Index: media/base/mime_util.cc |
diff --git a/media/base/mime_util.cc b/media/base/mime_util.cc |
index 01422b26fb8f2649059fa6edb805d64c7926529b..9abd15a58e2ab877ab6a8a127f21e3a0e7ce3504 100644 |
--- a/media/base/mime_util.cc |
+++ b/media/base/mime_util.cc |
@@ -30,6 +30,8 @@ class MimeUtil { |
INVALID_CODEC, |
PCM, |
MP3, |
+ AC3, |
+ EAC3, |
MPEG2_AAC_LC, |
MPEG2_AAC_MAIN, |
MPEG2_AAC_SSR, |
@@ -152,6 +154,11 @@ static bool IsCodecSupportedOnAndroid(MimeUtil::Codec codec) { |
case MimeUtil::VP8: |
return true; |
+ case MimeUtil::AC3: |
+ case MimeUtil::EAC3: |
+ // TODO(servolk): Revisit this for AC3/EAC3 support on AndroidTV |
+ return false; |
+ |
case MimeUtil::MPEG2_AAC_LC: |
case MimeUtil::MPEG2_AAC_MAIN: |
case MimeUtil::MPEG2_AAC_SSR: |
@@ -210,6 +217,11 @@ struct MediaFormat { |
// avc1.6400xx - H.264 High |
static const char kMP4AudioCodecsExpression[] = |
"mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
+#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ // Only one variant each of ac3 and eac3 codec string is sufficient here, |
+ // since these strings are parsed and mapped to MimeUtil::Codec enum values. |
+ "ac-3,ec-3," |
+#endif |
"mp4a.40.05,mp4a.40.29"; |
static const char kMP4VideoCodecsExpression[] = |
// This is not a complete list of supported avc1 codecs. It is simply used |
@@ -225,6 +237,11 @@ static const char kMP4VideoCodecsExpression[] = |
"hev1.1.6.L93.B0," |
#endif |
"mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
+#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ // Only one variant each of ac3 and eac3 codec string is sufficient here, |
+ // since these strings are parsed and mapped to MimeUtil::Codec enum values. |
+ "ac-3,ec-3," |
+#endif |
"mp4a.40.05,mp4a.40.29"; |
#endif // USE_PROPRIETARY_CODECS |
@@ -291,6 +308,20 @@ static const CodecIDMappings kUnambiguousCodecStringMap[] = { |
{"mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1}, |
{"mp4a.40.05", MimeUtil::MPEG4_AAC_SBR_v1}, |
{"mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2}, |
+#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ // TODO(servolk): Strictly speaking only mp4a.A5 and mp4a.A6 codec ids are |
+ // valid according to RFC 6381 section 3.3, 3.4. Lower-case oti (mp4a.a5 and |
+ // mp4a.a6) should be rejected. But we used to allow those in older versions |
+ // of Chromecast firmware and some apps (notably MPL) depend on those codec |
+ // types being supported, so they should be allowed for now |
+ // (crbug.com/564960). |
+ {"ac-3", MimeUtil::AC3}, |
+ {"mp4a.a5", MimeUtil::AC3}, |
+ {"mp4a.A5", MimeUtil::AC3}, |
+ {"ec-3", MimeUtil::EAC3}, |
+ {"mp4a.a6", MimeUtil::EAC3}, |
+ {"mp4a.A6", MimeUtil::EAC3}, |
+#endif |
{"vorbis", MimeUtil::VORBIS}, |
{"opus", MimeUtil::OPUS}, |
{"vp8", MimeUtil::VP8}, |
@@ -638,6 +669,8 @@ bool MimeUtil::IsCodecSupported(Codec codec) const { |
bool MimeUtil::IsCodecProprietary(Codec codec) const { |
switch (codec) { |
case INVALID_CODEC: |
+ case AC3: |
+ case EAC3: |
case MP3: |
case MPEG2_AAC_LC: |
case MPEG2_AAC_MAIN: |