Commit 2988c93d authored by Justin Ruggles's avatar Justin Ruggles

create a separate codec_id for E-AC-3

Originally committed as revision 15143 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 5f86057f
...@@ -76,7 +76,8 @@ get_next: ...@@ -76,7 +76,8 @@ get_next:
avctx->request_channels < s->channels && avctx->request_channels < s->channels &&
(avctx->request_channels <= 2 || (avctx->request_channels <= 2 ||
(avctx->request_channels == 1 && (avctx->request_channels == 1 &&
avctx->codec_id == CODEC_ID_AC3))) { (avctx->codec_id == CODEC_ID_AC3 ||
avctx->codec_id == CODEC_ID_EAC3)))) {
avctx->channels = avctx->request_channels; avctx->channels = avctx->request_channels;
} else { } else {
avctx->channels = s->channels; avctx->channels = s->channels;
......
...@@ -188,7 +188,7 @@ static av_cold int ac3_parse_init(AVCodecParserContext *s1) ...@@ -188,7 +188,7 @@ static av_cold int ac3_parse_init(AVCodecParserContext *s1)
AVCodecParser ac3_parser = { AVCodecParser ac3_parser = {
{ CODEC_ID_AC3 }, { CODEC_ID_AC3, CODEC_ID_EAC3 },
sizeof(AACAC3ParseContext), sizeof(AACAC3ParseContext),
ac3_parse_init, ac3_parse_init,
ff_aac_ac3_parse, ff_aac_ac3_parse,
......
...@@ -1288,5 +1288,16 @@ AVCodec ac3_decoder = { ...@@ -1288,5 +1288,16 @@ AVCodec ac3_decoder = {
.init = ac3_decode_init, .init = ac3_decode_init,
.close = ac3_decode_end, .close = ac3_decode_end,
.decode = ac3_decode_frame, .decode = ac3_decode_frame,
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52 (AC-3, E-AC-3)"), .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
};
AVCodec eac3_decoder = {
.name = "eac3",
.type = CODEC_TYPE_AUDIO,
.id = CODEC_ID_EAC3,
.priv_data_size = sizeof (AC3DecodeContext),
.init = ac3_decode_init,
.close = ac3_decode_end,
.decode = ac3_decode_frame,
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"),
}; };
...@@ -1365,5 +1365,5 @@ AVCodec ac3_encoder = { ...@@ -1365,5 +1365,5 @@ AVCodec ac3_encoder = {
AC3_encode_close, AC3_encode_close,
NULL, NULL,
.sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE}, .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52 (AC-3, E-AC-3)"), .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
}; };
...@@ -189,6 +189,7 @@ void avcodec_register_all(void) ...@@ -189,6 +189,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (COOK, cook); REGISTER_DECODER (COOK, cook);
REGISTER_DECODER (DCA, dca); REGISTER_DECODER (DCA, dca);
REGISTER_DECODER (DSICINAUDIO, dsicinaudio); REGISTER_DECODER (DSICINAUDIO, dsicinaudio);
REGISTER_DECODER (EAC3, eac3);
REGISTER_ENCDEC (FLAC, flac); REGISTER_ENCDEC (FLAC, flac);
REGISTER_DECODER (IMC, imc); REGISTER_DECODER (IMC, imc);
REGISTER_DECODER (MACE3, mace3); REGISTER_DECODER (MACE3, mace3);
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include "libavutil/avutil.h" #include "libavutil/avutil.h"
#define LIBAVCODEC_VERSION_MAJOR 51 #define LIBAVCODEC_VERSION_MAJOR 51
#define LIBAVCODEC_VERSION_MINOR 70 #define LIBAVCODEC_VERSION_MINOR 71
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
...@@ -306,6 +306,7 @@ enum CodecID { ...@@ -306,6 +306,7 @@ enum CodecID {
CODEC_ID_WMAPRO, CODEC_ID_WMAPRO,
CODEC_ID_WMALOSSLESS, CODEC_ID_WMALOSSLESS,
CODEC_ID_ATRAC3P, CODEC_ID_ATRAC3P,
CODEC_ID_EAC3,
/* subtitle codecs */ /* subtitle codecs */
CODEC_ID_DVD_SUBTITLE= 0x17000, CODEC_ID_DVD_SUBTITLE= 0x17000,
......
...@@ -44,6 +44,8 @@ OBJS-$(CONFIG_DV_MUXER) += dvenc.o ...@@ -44,6 +44,8 @@ OBJS-$(CONFIG_DV_MUXER) += dvenc.o
OBJS-$(CONFIG_DXA_DEMUXER) += dxa.o riff.o OBJS-$(CONFIG_DXA_DEMUXER) += dxa.o riff.o
OBJS-$(CONFIG_EA_CDATA_DEMUXER) += eacdata.o OBJS-$(CONFIG_EA_CDATA_DEMUXER) += eacdata.o
OBJS-$(CONFIG_EA_DEMUXER) += electronicarts.o OBJS-$(CONFIG_EA_DEMUXER) += electronicarts.o
OBJS-$(CONFIG_EAC3_DEMUXER) += raw.o
OBJS-$(CONFIG_EAC3_MUXER) += raw.o
OBJS-$(CONFIG_FFM_DEMUXER) += ffmdec.o OBJS-$(CONFIG_FFM_DEMUXER) += ffmdec.o
OBJS-$(CONFIG_FFM_MUXER) += ffmenc.o OBJS-$(CONFIG_FFM_MUXER) += ffmenc.o
OBJS-$(CONFIG_FLAC_DEMUXER) += raw.o OBJS-$(CONFIG_FLAC_DEMUXER) += raw.o
......
...@@ -76,6 +76,7 @@ void av_register_all(void) ...@@ -76,6 +76,7 @@ void av_register_all(void)
REGISTER_DEMUXER (DXA, dxa); REGISTER_DEMUXER (DXA, dxa);
REGISTER_DEMUXER (EA, ea); REGISTER_DEMUXER (EA, ea);
REGISTER_DEMUXER (EA_CDATA, ea_cdata); REGISTER_DEMUXER (EA_CDATA, ea_cdata);
REGISTER_MUXDEMUX (EAC3, eac3);
REGISTER_MUXDEMUX (FFM, ffm); REGISTER_MUXDEMUX (FFM, ffm);
REGISTER_MUXDEMUX (FLAC, flac); REGISTER_MUXDEMUX (FLAC, flac);
REGISTER_DEMUXER (FLIC, flic); REGISTER_DEMUXER (FLIC, flic);
......
...@@ -487,8 +487,8 @@ static int dirac_probe(AVProbeData *p) ...@@ -487,8 +487,8 @@ static int dirac_probe(AVProbeData *p)
} }
#endif #endif
#ifdef CONFIG_AC3_DEMUXER #if (CONFIG_AC3_DEMUXER || CONFIG_EAC3_DEMUXER)
static int ac3_probe(AVProbeData *p) static int ac3_eac3_probe(AVProbeData *p, int *codec_id)
{ {
int max_frames, first_frames = 0, frames; int max_frames, first_frames = 0, frames;
uint8_t *buf, *buf2, *end; uint8_t *buf, *buf2, *end;
...@@ -499,6 +499,7 @@ static int ac3_probe(AVProbeData *p) ...@@ -499,6 +499,7 @@ static int ac3_probe(AVProbeData *p)
buf = p->buf; buf = p->buf;
end = buf + p->buf_size; end = buf + p->buf_size;
*codec_id = CODEC_ID_AC3;
for(; buf < end; buf++) { for(; buf < end; buf++) {
buf2 = buf; buf2 = buf;
...@@ -509,6 +510,8 @@ static int ac3_probe(AVProbeData *p) ...@@ -509,6 +510,8 @@ static int ac3_probe(AVProbeData *p)
if(buf2 + hdr.frame_size > end || if(buf2 + hdr.frame_size > end ||
av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2)) av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
break; break;
if (hdr.bitstream_id > 10)
*codec_id = CODEC_ID_EAC3;
buf2 += hdr.frame_size; buf2 += hdr.frame_size;
} }
max_frames = FFMAX(max_frames, frames); max_frames = FFMAX(max_frames, frames);
...@@ -522,6 +525,28 @@ static int ac3_probe(AVProbeData *p) ...@@ -522,6 +525,28 @@ static int ac3_probe(AVProbeData *p)
} }
#endif #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 #ifdef CONFIG_FLAC_DEMUXER
static int flac_probe(AVProbeData *p) static int flac_probe(AVProbeData *p)
{ {
...@@ -633,6 +658,35 @@ AVOutputFormat dts_muxer = { ...@@ -633,6 +658,35 @@ AVOutputFormat dts_muxer = {
}; };
#endif #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 #ifdef CONFIG_FLAC_DEMUXER
AVInputFormat flac_demuxer = { AVInputFormat flac_demuxer = {
"flac", "flac",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment