Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1751)

Unified Diff: media/base/mime_util_internal.cc

Issue 1728193004: Media: Do not support new codecs with legacy MIME type names. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: prototype new approach; drop MP3 from most types Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/mime_util_internal.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/mime_util_internal.cc
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
index e9b38f1191801c55e0e7d4e7092cfaf7a1c92140..59b7c595963bc700a0b258ac8abfd0fa6e41c10e 100644
--- a/media/base/mime_util_internal.cc
+++ b/media/base/mime_util_internal.cc
@@ -31,22 +31,6 @@ struct MediaFormat {
// Strings used as the |codecs_list| only need one valid unambiguous variant for
// each supported MimeUtil::Codec enum value. Each codec string is parsed and
// mapped to corresponding MimeUtil::Codec value. See https://crbug.com/461009.
-#if defined(USE_PROPRIETARY_CODECS)
-static const char kMP4AudioCodecsExpression[] =
-#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
- "ac-3,ec-3," // AC-3 and E-AC-3.
-#endif
- "mp4a.66,mp4a.69,mp4a.40.2"; // MPEG-2 AAC, MP3, and MPEG-4 AAC.
-static const char kMP4VideoCodecsExpression[] =
- "avc1.42E00A,"
-#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
- "hev1.1.6.L93.B0,"
-#endif
-#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
- "ac-3,ec-3," // AC-3 and E-AC-3.
-#endif
- "mp4a.66,mp4a.69,mp4a.40.2"; // MPEG-2 AAC, MP3, and MPEG-4 AAC.
-#endif // USE_PROPRIETARY_CODECS
// A list of media types (https://en.wikipedia.org/wiki/Media_type) and
// corresponding media codecs supported by these types/containers.
@@ -72,18 +56,7 @@ static const MediaFormat kFormatCodecMappings[] = {
{"audio/mp3", PROPRIETARY, ""},
{"audio/x-mp3", PROPRIETARY, ""},
{"audio/aac", PROPRIETARY, ""}, // AAC / ADTS
- {"audio/mp4", PROPRIETARY, kMP4AudioCodecsExpression},
- {"audio/x-m4a", PROPRIETARY, kMP4AudioCodecsExpression},
- {"video/mp4", PROPRIETARY, kMP4VideoCodecsExpression},
- {"video/x-m4v", PROPRIETARY, kMP4VideoCodecsExpression},
-#if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
- {"video/mp2t", PROPRIETARY, kMP4VideoCodecsExpression},
-#endif
-#if defined(OS_ANDROID)
- // HTTP Live Streaming (HLS)
- {"application/x-mpegurl", PROPRIETARY, kMP4VideoCodecsExpression},
- {"application/vnd.apple.mpegurl", PROPRIETARY, kMP4VideoCodecsExpression}
-#endif
+// Most MPEG MIME types are added in InitializeMimeTypeMaps().
ddorwin 2016/03/17 20:52:54 We now have this information scattered. Should we
#endif // USE_PROPRIETARY_CODECS
};
@@ -101,7 +74,7 @@ static const CodecIDMappings kUnambiguousCodecStringMap[] = {
// avc1/avc3.XXXXXX may be unambiguous; handled by ParseAVCCodecId().
// hev1/hvc1.XXXXXX may be unambiguous; handled by ParseHEVCCodecID().
{"mp3", MimeUtil::MP3},
- // Following is the list of RFC 6381 compliant audio codecs:
+ // Following is the list of RFC 6381 compliant audio codec strings:
// mp4a.66 - MPEG-2 AAC MAIN
// mp4a.67 - MPEG-2 AAC LC
// mp4a.68 - MPEG-2 AAC SSR
@@ -299,7 +272,6 @@ SupportsType MimeUtil::AreSupportedCodecs(
}
void MimeUtil::InitializeMimeTypeMaps() {
-// Initialize the supported media types.
#if defined(USE_PROPRIETARY_CODECS)
allow_proprietary_codecs_ = true;
#endif
@@ -316,21 +288,68 @@ void MimeUtil::InitializeMimeTypeMaps() {
// Initialize the supported media formats.
for (size_t i = 0; i < arraysize(kFormatCodecMappings); ++i) {
- std::vector<std::string> mime_type_codecs;
- ParseCodecString(kFormatCodecMappings[i].codecs_list, &mime_type_codecs,
- false);
-
- CodecSet codecs;
- for (size_t j = 0; j < mime_type_codecs.size(); ++j) {
- Codec codec = INVALID_CODEC;
- bool is_ambiguous = true;
- CHECK(StringToCodec(mime_type_codecs[j], &codec, &is_ambiguous));
- DCHECK(!is_ambiguous);
- codecs.insert(codec);
- }
+ AddContainerWithCodecs(kFormatCodecMappings[i].mime_type,
+ kFormatCodecMappings[i].codecs_list);
+ }
- media_format_map_[kFormatCodecMappings[i].mime_type] = codecs;
+#if defined(USE_PROPRIETARY_CODECS)
DaleCurtis 2016/03/17 21:00:21 Could have an InitializeProprietaryCodecMimeTypeMa
ddorwin 2016/03/17 21:44:25 Yes, though that would separate the lists of types
+ // Initialize the supported media formats not in kFormatCodecMappings.
+ // TODO: Should we move all mappings to this style?
+ const std::string aac = "mp4a.66,mp4a.40.2"; // MPEG-2 AAC and MPEG-4 AAC.
DaleCurtis 2016/03/17 21:00:21 You can keep these as const char* up above and jus
ddorwin 2016/03/17 21:44:25 I've uploaded this change, but I plan to revert -
+ const std::string avc = "avc1.42E00A";
+ const std::string avc_and_aac = avc + "," + aac;
+ const std::string mp4_audio_codecs =
+#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
+ "ac-3,ec-3," // AC-3 and E-AC-3.
+#endif
+ "mp4a.69," + // MP3
+ aac;
+ const std::string mp4_video_codecs =
+#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
+ "hev1.1.6.L93.B0," +
+#endif
+ avc;
+ const std::string mp4_codecs = mp4_video_codecs + "," + mp4_audio_codecs;
+
+ // TODO: Fix before committing. This breaks
+ // RemoveProprietaryMediaTypesAndCodecs() because the containers are not in
+ // kFormatCodecMappings with PROPRIETARY.
ddorwin 2016/03/17 20:52:54 I will add this parameter to AddContainerWithCodec
+ AddContainerWithCodecs("audio/mp4", mp4_audio_codecs);
ddorwin 2016/03/17 20:52:55 Each entry remaining in kFormatCodecMappings would
+ AddContainerWithCodecs("video/mp4", mp4_codecs);
+ // These strings are supported for backwards compatibility only and thus only
+ // support the codecs needed for compatibility.
+ AddContainerWithCodecs("audio/x-m4a", aac);
+ AddContainerWithCodecs("video/x-m4v", avc_and_aac);
+
+#if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
+ // TODO(ddorwin): Exactly which codecs should be supported?
+ AddContainerWithCodecs("video/mp2t", mp4_codecs);
+#endif
+#if defined(OS_ANDROID)
+ // HTTP Live Streaming (HLS)
+ AddContainerWithCodecs("application/x-mpegurl", avc_and_aac);
+ AddContainerWithCodecs("application/vnd.apple.mpegurl", avc_and_aac);
+#endif
+#endif // USE_PROPRIETARY_CODECS
+}
+
+// TODO(ddorwin): Replace |codecs_list| with a vector of MimeUtil::Codec values.
+// See https://crbug.com/461009
+void MimeUtil::AddContainerWithCodecs(const std::string& mime_type,
+ const std::string& codecs_list) {
+ std::vector<std::string> mime_type_codecs;
+ ParseCodecString(codecs_list, &mime_type_codecs, false);
+
+ CodecSet codecs;
+ for (size_t j = 0; j < mime_type_codecs.size(); ++j) {
+ Codec codec = INVALID_CODEC;
+ bool is_ambiguous = true;
+ CHECK(StringToCodec(mime_type_codecs[j], &codec, &is_ambiguous));
+ DCHECK(!is_ambiguous);
+ codecs.insert(codec);
}
+
+ media_format_map_[mime_type] = codecs;
}
bool MimeUtil::IsSupportedMediaMimeType(const std::string& mime_type) const {
@@ -408,6 +427,7 @@ SupportsType MimeUtil::IsSupportedMediaFormat(
mime_type_lower_case, is_encrypted);
}
+// TODO: Stop using kFormatCodecMappings since it no longer contains all types.
void MimeUtil::RemoveProprietaryMediaTypesAndCodecs() {
for (size_t i = 0; i < arraysize(kFormatCodecMappings); ++i)
if (kFormatCodecMappings[i].format_type == PROPRIETARY)
« no previous file with comments | « media/base/mime_util_internal.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698