annotate aea.c @ 6455:3f50c7effad1 libavformat

rtsp: 10l, try to update the correct rtp stream This fixes a bug from rev 22917. Now RTSP streams where the individual RTCP sender reports aren't sent at the same time actually are synced properly.
author mstorsjo
date Fri, 03 Sep 2010 07:10:21 +0000
parents 4aaed59641ff
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
1 /*
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
2 * MD STUDIO audio demuxer
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
3 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
4 * Copyright (c) 2009 Benjamin Larsson
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
5 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
6 * This file is part of FFmpeg.
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
7 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
12 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
16 * Lesser General Public License for more details.
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
17 *
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
21 */
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
22
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
23 #include "avformat.h"
6445
4aaed59641ff move pcm demuxers to their own file
aurel
parents: 6045
diff changeset
24 #include "pcm.h"
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
25 #include "libavutil/intreadwrite.h"
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
26
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
27 #define AT1_SU_SIZE 212
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
28
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
29 static int aea_read_probe(AVProbeData *p)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
30 {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
31 if (p->buf_size <= 2048+212)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
32 return 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
33
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
34 /* Magic is '00 08 00 00' in Little Endian*/
5170
80a367a3742c Cosmetics, add spaces
banan
parents: 5169
diff changeset
35 if (AV_RL32(p->buf)==0x800) {
5173
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
36 int bsm_s, bsm_e, inb_s, inb_e, ch;
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
37 ch = p->buf[264];
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
38 bsm_s = p->buf[2048];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
39 inb_s = p->buf[2048+1];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
40 inb_e = p->buf[2048+210];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
41 bsm_e = p->buf[2048+211];
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
42
5173
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
43 if (ch != 1 && ch != 2)
948db02fab55 Add condition to aea demuxer probe.
banan
parents: 5170
diff changeset
44 return 0;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
45
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
46 /* Check so that the redundant bsm bytes and info bytes are valid
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
47 * the block size mode bytes have to be the same
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
48 * the info bytes have to be the same
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
49 */
6044
33e5c3910738 Fix detection of some stereo atrac files by not comparing the
banan
parents: 5969
diff changeset
50 if (bsm_s == bsm_e && inb_s == inb_e)
6045
69289b8cf847 10l, now the score is reduced
banan
parents: 6044
diff changeset
51 return AVPROBE_SCORE_MAX / 4 + 1;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
52 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
53 return 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
54 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
55
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
56 static int aea_read_header(AVFormatContext *s,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
57 AVFormatParameters *ap)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
58 {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
59 AVStream *st = av_new_stream(s, 0);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
60 if (!st)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
61 return AVERROR(ENOMEM);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
62
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
63 /* Parse the amount of channels and skip to pos 2048(0x800) */
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
64 url_fskip(s->pb, 264);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
65 st->codec->channels = get_byte(s->pb);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
66 url_fskip(s->pb, 1783);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
67
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
68
5910
536e5527c1e0 Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 5173
diff changeset
69 st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
70 st->codec->codec_id = CODEC_ID_ATRAC1;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
71 st->codec->sample_rate = 44100;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
72 st->codec->bit_rate = 292000;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
73
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
74 if (st->codec->channels != 1 && st->codec->channels != 2) {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
75 av_log(s,AV_LOG_ERROR,"Channels %d not supported!\n",st->codec->channels);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
76 return -1;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
77 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
78
5170
80a367a3742c Cosmetics, add spaces
banan
parents: 5169
diff changeset
79 st->codec->channel_layout = (st->codec->channels == 1) ? CH_LAYOUT_MONO : CH_LAYOUT_STEREO;
5169
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
80
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
81 st->codec->block_align = AT1_SU_SIZE * st->codec->channels;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
82 return 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
83 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
84
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
85 static int aea_read_packet(AVFormatContext *s, AVPacket *pkt)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
86 {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
87 int ret = av_get_packet(s->pb, pkt, s->streams[0]->codec->block_align);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
88
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
89 pkt->stream_index = 0;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
90 if (ret <= 0)
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
91 return AVERROR(EIO);
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
92
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
93 return ret;
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
94 }
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
95
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
96 AVInputFormat aea_demuxer = {
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
97 "aea",
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
98 NULL_IF_CONFIG_SMALL("MD STUDIO audio"),
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
99 0,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
100 aea_read_probe,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
101 aea_read_header,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
102 aea_read_packet,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
103 0,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
104 pcm_read_seek,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
105 .flags= AVFMT_GENERIC_INDEX,
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
106 .extensions = "aea",
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
107 };
0d8ad70ca914 Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff changeset
108