summaryrefslogtreecommitdiff
path: root/libavformat/raw.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2008-09-01 14:33:54 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2008-09-01 14:33:54 +0000
commit2988c93d94d857da609f366db82b624a91ff9b4c (patch)
tree9038c03b1a91bc622d73463bea80e18f7fb2718a /libavformat/raw.c
parent5f86057ffd534abb42fada9f0abf88409f6b51d2 (diff)
create a separate codec_id for E-AC-3
Originally committed as revision 15143 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/raw.c')
-rw-r--r--libavformat/raw.c58
1 files changed, 56 insertions, 2 deletions
diff --git a/libavformat/raw.c b/libavformat/raw.c
index f8b3f5d57c..c065785bb1 100644
--- a/libavformat/raw.c
+++ b/libavformat/raw.c
@@ -487,8 +487,8 @@ static int dirac_probe(AVProbeData *p)
}
#endif
-#ifdef CONFIG_AC3_DEMUXER
-static int ac3_probe(AVProbeData *p)
+#if (CONFIG_AC3_DEMUXER || CONFIG_EAC3_DEMUXER)
+static int ac3_eac3_probe(AVProbeData *p, int *codec_id)
{
int max_frames, first_frames = 0, frames;
uint8_t *buf, *buf2, *end;
@@ -499,6 +499,7 @@ static int ac3_probe(AVProbeData *p)
buf = p->buf;
end = buf + p->buf_size;
+ *codec_id = CODEC_ID_AC3;
for(; buf < end; buf++) {
buf2 = buf;
@@ -509,6 +510,8 @@ static int ac3_probe(AVProbeData *p)
if(buf2 + hdr.frame_size > end ||
av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
break;
+ if (hdr.bitstream_id > 10)
+ *codec_id = CODEC_ID_EAC3;
buf2 += hdr.frame_size;
}
max_frames = FFMAX(max_frames, frames);
@@ -522,6 +525,28 @@ static int ac3_probe(AVProbeData *p)
}
#endif
+#ifdef CONFIG_AC3_DEMUXER
+static int ac3_probe(AVProbeData *p)
+{
+ int codec_id = CODEC_ID_NONE;
+ int score = ac3_eac3_probe(p, &codec_id);
+ if(codec_id == CODEC_ID_AC3)
+ return score;
+ return 0;
+}
+#endif
+
+#ifdef CONFIG_EAC3_DEMUXER
+static int eac3_probe(AVProbeData *p)
+{
+ int codec_id = CODEC_ID_NONE;
+ int score = ac3_eac3_probe(p, &codec_id);
+ if(codec_id == CODEC_ID_EAC3)
+ return score;
+ return 0;
+}
+#endif
+
#ifdef CONFIG_FLAC_DEMUXER
static int flac_probe(AVProbeData *p)
{
@@ -633,6 +658,35 @@ AVOutputFormat dts_muxer = {
};
#endif
+#ifdef CONFIG_EAC3_DEMUXER
+AVInputFormat eac3_demuxer = {
+ "eac3",
+ NULL_IF_CONFIG_SMALL("raw E-AC-3"),
+ 0,
+ eac3_probe,
+ audio_read_header,
+ raw_read_partial_packet,
+ .flags= AVFMT_GENERIC_INDEX,
+ .extensions = "eac3",
+ .value = CODEC_ID_EAC3,
+};
+#endif
+
+#ifdef CONFIG_EAC3_MUXER
+AVOutputFormat eac3_muxer = {
+ "eac3",
+ NULL_IF_CONFIG_SMALL("raw E-AC-3"),
+ "audio/x-eac3",
+ "eac3",
+ 0,
+ CODEC_ID_EAC3,
+ CODEC_ID_NONE,
+ NULL,
+ raw_write_packet,
+ .flags= AVFMT_NOTIMESTAMPS,
+};
+#endif
+
#ifdef CONFIG_FLAC_DEMUXER
AVInputFormat flac_demuxer = {
"flac",