Mercurial > libavformat.hg
annotate aea.c @ 5786:7d670040187e libavformat
In mpegts muxer, search for h264 aud nal, it might not be the first nal.
Improve ther error message when bitstream is malformated and tell user to use
the bitstream filter.
author | bcoudurier |
---|---|
date | Mon, 08 Mar 2010 23:59:05 +0000 |
parents | 948db02fab55 |
children | 536e5527c1e0 |
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 /** |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
24 * @file libavformat/aea.c |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
25 */ |
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 #include "avformat.h" |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
28 #include "raw.h" |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
29 #include "libavutil/intreadwrite.h" |
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 #define AT1_SU_SIZE 212 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
32 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
33 static int aea_read_probe(AVProbeData *p) |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
34 { |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
35 if (p->buf_size <= 2048+212) |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
36 return 0; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
37 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
38 /* Magic is '00 08 00 00' in Little Endian*/ |
5170 | 39 if (AV_RL32(p->buf)==0x800) { |
5173 | 40 int bsm_s, bsm_e, inb_s, inb_e, ch; |
41 ch = p->buf[264]; | |
5169
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
42 bsm_s = p->buf[2048]; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
43 inb_s = p->buf[2048+1]; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
44 inb_e = p->buf[2048+210]; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
45 bsm_e = p->buf[2048+211]; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
46 |
5173 | 47 if (ch != 1 && ch != 2) |
48 return 0; | |
5169
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
49 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
50 /* 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
|
51 * 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
|
52 * the info bytes have to be the same |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
53 * the block size mode and info byte can't be the same |
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 if (bsm_s == bsm_e && inb_s == inb_e && bsm_s != inb_s) |
5170 | 56 return AVPROBE_SCORE_MAX / 2; |
5169
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
57 } |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
58 return 0; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
59 } |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
60 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
61 static int aea_read_header(AVFormatContext *s, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
62 AVFormatParameters *ap) |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
63 { |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
64 AVStream *st = av_new_stream(s, 0); |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
65 if (!st) |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
66 return AVERROR(ENOMEM); |
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 /* 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
|
69 url_fskip(s->pb, 264); |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
70 st->codec->channels = get_byte(s->pb); |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
71 url_fskip(s->pb, 1783); |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
72 |
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 st->codec->codec_type = CODEC_TYPE_AUDIO; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
75 st->codec->codec_id = CODEC_ID_ATRAC1; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
76 st->codec->sample_rate = 44100; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
77 st->codec->bit_rate = 292000; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
78 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
79 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
|
80 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
|
81 return -1; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
82 } |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
83 |
5170 | 84 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
|
85 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
86 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
|
87 return 0; |
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 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
90 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
|
91 { |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
92 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
|
93 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
94 pkt->stream_index = 0; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
95 if (ret <= 0) |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
96 return AVERROR(EIO); |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
97 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
98 return ret; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
99 } |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
100 |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
101 AVInputFormat aea_demuxer = { |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
102 "aea", |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
103 NULL_IF_CONFIG_SMALL("MD STUDIO audio"), |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
104 0, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
105 aea_read_probe, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
106 aea_read_header, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
107 aea_read_packet, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
108 0, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
109 pcm_read_seek, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
110 .flags= AVFMT_GENERIC_INDEX, |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
111 .extensions = "aea", |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
112 }; |
0d8ad70ca914
Initial commit of the MD studio demuxer, not hooked up yet
banan
parents:
diff
changeset
|
113 |