| Index: media/ffmpeg/ffmpeg_common.cc
|
| diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
|
| index f817547006fbfdd5ffe887d7a4abd573a6ca9dd5..370a6dceb0c2adb369f817623aadb243d86ebcff 100644
|
| --- a/media/ffmpeg/ffmpeg_common.cc
|
| +++ b/media/ffmpeg/ffmpeg_common.cc
|
| @@ -65,6 +65,12 @@ static AudioCodec CodecIDToAudioCodec(AVCodecID codec_id) {
|
| switch (codec_id) {
|
| case AV_CODEC_ID_AAC:
|
| return kCodecAAC;
|
| +#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
|
| + case AV_CODEC_ID_AC3:
|
| + return kCodecAC3;
|
| + case AV_CODEC_ID_EAC3:
|
| + return kCodecEAC3;
|
| +#endif
|
| case AV_CODEC_ID_MP3:
|
| return kCodecMP3;
|
| case AV_CODEC_ID_VORBIS:
|
| @@ -279,8 +285,11 @@ void AVCodecContextToAudioDecoderConfig(
|
|
|
| AudioCodec codec = CodecIDToAudioCodec(codec_context->codec_id);
|
|
|
| + // For AC3/EAC3, FFmpeg does not fill |sample_fmt|.
|
| SampleFormat sample_format =
|
| - AVSampleFormatToSampleFormat(codec_context->sample_fmt);
|
| + (codec == kCodecAC3 || codec == kCodecEAC3)
|
| + ? kSampleFormatS16
|
| + : AVSampleFormatToSampleFormat(codec_context->sample_fmt);
|
|
|
| ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout(
|
| codec_context->channel_layout, codec_context->channels);
|
| @@ -316,7 +325,7 @@ void AVCodecContextToAudioDecoderConfig(
|
| record_stats,
|
| seek_preroll,
|
| codec_context->delay);
|
| - if (codec != kCodecOpus) {
|
| + if (codec != kCodecOpus && codec != kCodecAC3 && codec != kCodecEAC3) {
|
| DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8,
|
| config->bits_per_channel());
|
| }
|
|
|