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

Unified Diff: media/base/mime_util_internal.cc

Issue 1677133003: Implemented parsing of HEVC codec ids (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@parse-codec-id
Patch Set: Fixed handling of empty elements + added test cases with empty elements Created 4 years, 8 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
Index: media/base/mime_util_internal.cc
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
index 02e2ab3ee0f05ce2b14f164cb6f1b72675f9b03c..fb3f627803b9ead9e5dfe53e0c090d24367550f3 100644
--- a/media/base/mime_util_internal.cc
+++ b/media/base/mime_util_internal.cc
@@ -149,42 +149,6 @@ static bool IsValidH264Level(uint8_t level_idc) {
(level_idc >= 50 && level_idc <= 51));
}
-#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
-// ISO/IEC FDIS 14496-15 standard section E.3 describes the syntax of codec ids
-// reserved for HEVC. According to that spec HEVC codec id must start with
-// either "hev1." or "hvc1.". We don't yet support full parsing of HEVC codec
-// ids, but since no other codec id starts with those string we'll just treat
-// any string starting with "hev1." or "hvc1." as valid HEVC codec ids.
-// crbug.com/482761
-static bool ParseHEVCCodecID(const std::string& codec_id,
- MimeUtil::Codec* codec,
- bool* is_ambiguous) {
- if (base::StartsWith(codec_id, "hev1.", base::CompareCase::SENSITIVE) ||
- base::StartsWith(codec_id, "hvc1.", base::CompareCase::SENSITIVE)) {
- *codec = MimeUtil::HEVC_MAIN;
-
- // TODO(servolk): Full HEVC codec id parsing is not implemented yet (see
- // crbug.com/482761). So treat HEVC codec ids as ambiguous for now.
- *is_ambiguous = true;
-
- // TODO(servolk): Most HEVC codec ids are treated as ambiguous (see above),
- // but we need to recognize at least one valid unambiguous HEVC codec id,
- // which is added into kMP4VideoCodecsExpression. We need it to be
- // unambiguous to avoid DCHECK(!is_ambiguous) in InitializeMimeTypeMaps. We
- // also use these in unit tests (see
- // content/browser/media/media_canplaytype_browsertest.cc).
- // Remove this workaround after crbug.com/482761 is fixed.
- if (codec_id == "hev1.1.6.L93.B0" || codec_id == "hvc1.1.6.L93.B0") {
- *is_ambiguous = false;
- }
-
- return true;
- }
-
- return false;
-}
-#endif
-
// Handle parsing of vp9 codec IDs.
static bool ParseVp9CodecID(const std::string& mime_type_lower_case,
const std::string& codec_id,
@@ -392,7 +356,7 @@ void MimeUtil::AddSupportedMediaFormats() {
CodecSet mp4_video_codecs;
mp4_video_codecs.insert(H264);
#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
- mp4_video_codecs.insert(HEVC_MAIN);
+ mp4_video_codecs.insert(HEVC);
#endif // BUILDFLAG(ENABLE_HEVC_DEMUXING)
#if BUILDFLAG(ENABLE_MP4_VP9_DEMUXING)
// Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported.
@@ -616,7 +580,7 @@ bool MimeUtil::IsCodecSupportedOnPlatform(
DCHECK(!is_encrypted || platform_info.has_platform_decoders);
return true;
- case HEVC_MAIN:
+ case HEVC:
#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
if (platform_info.is_unified_media_pipeline_enabled &&
!platform_info.has_platform_decoders) {
@@ -682,15 +646,9 @@ bool MimeUtil::StringToCodec(const std::string& mime_type_lower_case,
// If |codec_id| is not in |string_to_codec_map_|, then we assume that it is
// either H.264 or HEVC/H.265 codec ID because currently those are the only
// ones that are not added to the |string_to_codec_map_| and require parsing.
-
-#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
- if (ParseHEVCCodecID(codec_id, codec, is_ambiguous)) {
- return true;
- }
-#endif
-
VideoCodecProfile profile = VIDEO_CODEC_PROFILE_UNKNOWN;
uint8_t level_idc = 0;
+
if (ParseAVCCodecId(codec_id, &profile, &level_idc)) {
*codec = MimeUtil::H264;
switch (profile) {
@@ -734,6 +692,18 @@ bool MimeUtil::StringToCodec(const std::string& mime_type_lower_case,
return true;
}
+#if BUILDFLAG(ENABLE_HEVC_DEMUXING)
+ if (ParseHEVCCodecId(codec_id, &profile, &level_idc)) {
+ // TODO(servolk): Set |is_ambiguous| to true for now to make CanPlayType
+ // return 'maybe' for HEVC codec ids, instead of probably. This needs to be
+ // changed to false after adding platform-level HEVC profile and level
+ // checks, see crbug.com/601949.
+ *is_ambiguous = true;
+ *codec = MimeUtil::HEVC;
+ return true;
+ }
+#endif
+
DVLOG(4) << __FUNCTION__ << ": Unrecognized codec id " << codec_id;
return false;
}
@@ -762,7 +732,7 @@ bool MimeUtil::IsCodecProprietary(Codec codec) const {
case MPEG2_AAC:
case MPEG4_AAC:
case H264:
- case HEVC_MAIN:
+ case HEVC:
return true;
case PCM:

Powered by Google App Engine
This is Rietveld 408576698