| Index: media/filters/stream_parser_factory.cc
|
| diff --git a/media/filters/stream_parser_factory.cc b/media/filters/stream_parser_factory.cc
|
| index fc3257b139d04ce08b50f0633c28c25de552965f..47b3d52aa5a5974c004079b2a62ea393c566d21e 100644
|
| --- a/media/filters/stream_parser_factory.cc
|
| +++ b/media/filters/stream_parser_factory.cc
|
| @@ -53,7 +53,8 @@ struct CodecInfo {
|
| HISTOGRAM_MP3,
|
| HISTOGRAM_OPUS,
|
| HISTOGRAM_HEVC,
|
| - HISTOGRAM_MAX = HISTOGRAM_HEVC // Must be equal to largest logged entry.
|
| + HISTOGRAM_AC3,
|
| + HISTOGRAM_MAX = HISTOGRAM_AC3 // Must be equal to largest logged entry.
|
| };
|
|
|
| const char* pattern;
|
| @@ -161,6 +162,26 @@ static const CodecInfo kMPEG4AACCodecInfo = { "mp4a.40.*", CodecInfo::AUDIO,
|
| static const CodecInfo kMPEG2AACLCCodecInfo = { "mp4a.67", CodecInfo::AUDIO,
|
| NULL,
|
| CodecInfo::HISTOGRAM_MPEG2AAC };
|
| +#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
|
| +// The 'ac-3' and 'ec-3' are mime codec ids for AC3 and EAC3 according to
|
| +// http://www.mp4ra.org/codecs.html
|
| +// The object types for AC3 and EAC3 in MP4 container are 0xa5 and 0xa6, so
|
| +// according to RFC 6381 this corresponds to codec ids 'mp4a.A5' and 'mp4a.A6'.
|
| +// Codec ids with lower case oti (mp4a.a5 and mp4a.a6) are supported for
|
| +// backward compatibility.
|
| +static const CodecInfo kAC3CodecInfo1 = {"ac-3", CodecInfo::AUDIO, NULL,
|
| + CodecInfo::HISTOGRAM_AC3};
|
| +static const CodecInfo kAC3CodecInfo2 = {"mp4a.a5", CodecInfo::AUDIO, NULL,
|
| + CodecInfo::HISTOGRAM_AC3};
|
| +static const CodecInfo kAC3CodecInfo3 = {"mp4a.A5", CodecInfo::AUDIO, NULL,
|
| + CodecInfo::HISTOGRAM_AC3};
|
| +static const CodecInfo kEAC3CodecInfo1 = {"ec-3", CodecInfo::AUDIO, NULL,
|
| + CodecInfo::HISTOGRAM_EAC3};
|
| +static const CodecInfo kEAC3CodecInfo2 = {"mp4a.a6", CodecInfo::AUDIO, NULL,
|
| + CodecInfo::HISTOGRAM_EAC3};
|
| +static const CodecInfo kEAC3CodecInfo3 = {"mp4a.A6", CodecInfo::AUDIO, NULL,
|
| + CodecInfo::HISTOGRAM_EAC3};
|
| +#endif
|
|
|
| static const CodecInfo* kVideoMP4Codecs[] = {
|
| &kH264AVC1CodecInfo,
|
| @@ -174,11 +195,17 @@ static const CodecInfo* kVideoMP4Codecs[] = {
|
| NULL
|
| };
|
|
|
| -static const CodecInfo* kAudioMP4Codecs[] = {
|
| - &kMPEG4AACCodecInfo,
|
| - &kMPEG2AACLCCodecInfo,
|
| - NULL
|
| -};
|
| +static const CodecInfo* kAudioMP4Codecs[] = {&kMPEG4AACCodecInfo,
|
| + &kMPEG2AACLCCodecInfo,
|
| +#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
|
| + &kAC3CodecInfo1,
|
| + &kAC3CodecInfo2,
|
| + &kAC3CodecInfo3,
|
| + &kEAC3CodecInfo1,
|
| + &kEAC3CodecInfo2,
|
| + &kEAC3CodecInfo3,
|
| +#endif
|
| + NULL};
|
|
|
| static StreamParser* BuildMP4Parser(const std::vector<std::string>& codecs,
|
| const scoped_refptr<MediaLog>& media_log) {
|
| @@ -200,6 +227,16 @@ static StreamParser* BuildMP4Parser(const std::vector<std::string>& codecs,
|
| has_sbr = true;
|
| break;
|
| }
|
| +#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
|
| + } else if (MatchPattern(codec_id, kAC3CodecInfo1.pattern) ||
|
| + MatchPattern(codec_id, kAC3CodecInfo2.pattern) ||
|
| + MatchPattern(codec_id, kAC3CodecInfo3.pattern)) {
|
| + audio_object_types.insert(mp4::kAC3);
|
| + } else if (MatchPattern(codec_id, kEAC3CodecInfo1.pattern) ||
|
| + MatchPattern(codec_id, kEAC3CodecInfo2.pattern) ||
|
| + MatchPattern(codec_id, kEAC3CodecInfo3.pattern)) {
|
| + audio_object_types.insert(mp4::kEAC3);
|
| +#endif
|
| }
|
| }
|
|
|
|
|