Originally committed as revision 15143 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -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) | |||||
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 = { | |||||
.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 = { | |||||
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) | |||||
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 @@ | |||||
#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 { | |||||
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 | |||||
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) | |||||
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) | |||||
} | } | ||||
#endif | #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; | 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) | |||||
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) | |||||
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) | |||||
} | } | ||||
#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 = { | |||||
}; | }; | ||||
#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", | ||||