Index: net/base/mime_util.cc |
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc |
index e4901277c3f8c12e9207a83deddfeee0fa09ad71..d8a714c00cec2522ad7b6c89a93c1237a1a5ecfe 100644 |
--- a/net/base/mime_util.cc |
+++ b/net/base/mime_util.cc |
@@ -48,6 +48,11 @@ class MimeUtil : public PlatformMimeUtil { |
VP8, |
VP9, |
THEORA |
+#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ , |
+ AC3, |
+ EAC3 |
+#endif |
}; |
bool GetMimeTypeFromExtension(const base::FilePath::StringType& ext, |
@@ -472,6 +477,13 @@ static bool IsCodecSupportedOnAndroid(MimeUtil::Codec codec) { |
// MPEG-2 variants of AAC are not supported on Android. |
return false; |
+#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ case MimeUtil::AC3: |
+ case MimeUtil::EAC3: |
+ // TODO(servolk): Revisit this for AC3/EAC3 support on AndroidTV |
+ return false; |
+#endif |
+ |
case MimeUtil::VP9: |
// VP9 is supported only in KitKat+ (API Level 19). |
return base::android::BuildInfo::GetInstance()->sdk_int() >= 19; |
@@ -521,6 +533,11 @@ struct MediaFormatStrict { |
// 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 defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ "ac-3,ec-3," // Note: only one variant of eac codec string is sufficient |
+ // here since these are converted into enums in |
+ // InitializeMimeTypeMaps |
+#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 |
@@ -530,6 +547,11 @@ static const char kMP4VideoCodecsExpression[] = |
// kUnambiguousCodecStringMap/kAmbiguousCodecStringMap should be the only |
// mapping from strings to codecs. See crbug.com/461009. |
"avc1.42E00A,avc1.4D400A,avc1.64000A," |
+#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ "ac-3,ec-3," // Note: only one variant of eac codec string is sufficient |
+ // here since these are converted into enums in |
+ // InitializeMimeTypeMaps |
+#endif |
"mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5," |
"mp4a.40.05,mp4a.40.29"; |
@@ -583,6 +605,12 @@ 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 defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ {"ac-3", MimeUtil::AC3}, |
+ {"ec-3", MimeUtil::EAC3}, |
+ {"mp4a.a5", MimeUtil::AC3}, |
+ {"mp4a.a6", MimeUtil::EAC3}, |
+#endif |
{"vorbis", MimeUtil::VORBIS}, |
{"opus", MimeUtil::OPUS}, |
{"vp8", MimeUtil::VP8}, |
@@ -908,6 +936,13 @@ void MimeUtil::ParseCodecString(const std::string& codecs, |
for (std::vector<std::string>::iterator it = codecs_out->begin(); |
it != codecs_out->end(); |
++it) { |
+#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ // We need to know the codec subtype to properly support AC3/EAC3. |
+ // Do not strip the first '.' for mp4a.a5 and mp4a.a6. |
+ if (it->compare("mp4a.a5") == 0 || it->compare("mp4a.a6") == 0) { |
+ continue; |
+ } |
+#endif |
size_t found = it->find_first_of('.'); |
if (found != std::string::npos) |
it->resize(found); |
@@ -1084,6 +1119,10 @@ bool MimeUtil::IsCodecProprietary(Codec codec) const { |
case H264_BASELINE: |
case H264_MAIN: |
case H264_HIGH: |
+#if defined(ENABLE_AC3_EAC3_AUDIO_DEMUXING) |
+ case AC3: |
+ case EAC3: |
+#endif |
return true; |
case PCM: |