Index: net/base/mime_util.cc |
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc |
index 37e630fb031a1c0b2fa1eff1f29bc79c919a7000..8f7b51422aa95202197dbbe9656a5d77b6215e4e 100644 |
--- a/net/base/mime_util.cc |
+++ b/net/base/mime_util.cc |
@@ -924,6 +924,20 @@ void MimeUtil::RemoveProprietaryMediaTypesAndCodecsForTests() { |
allow_proprietary_codecs_ = false; |
} |
+// Returns true iff |profile_str| conforms to hex string "42y0": y >= 8. Taken |
DaleCurtis
2014/10/03 21:54:07
Since this is just 8,9 -- why not explicitly enume
wolenetz
2014/10/03 22:27:52
(replying again, in context):
This is actually 8,9
DaleCurtis
2014/10/03 22:33:56
Ahh, sorry the CL description makes it clear, but
wolenetz
2014/10/03 22:42:10
Done.
xhwang
2014/10/03 23:08:06
It's hex, so it can be 'c', 'e' etc.
|
+// from Annex A and constraint_set0 in ISO-14496-10. |
xhwang
2014/10/03 23:08:06
Can you mention 7.3.2.1 and 7.4.2.1 in the spec.
wolenetz
2014/10/04 01:36:40
Done.
|
+static bool IsValidH264BaselineProfile(const std::string& profile_str) { |
+ uint32 constraint_set_bits; |
+ if (profile_str.size() != 4 || |
+ profile_str.substr(0, 2) != "42" || |
+ profile_str.substr(3, 1) != "0" || |
xhwang
2014/10/03 23:08:06
The substr is a bit overkill; will this work?
ret
xhwang
2014/10/03 23:10:28
Sorry, you still need to convert string to int, fo
wolenetz
2014/10/03 23:51:04
Masking with 0xF1 instead of 0xFF means that we wo
wolenetz
2014/10/04 01:36:40
I'm keeping to just >= 8 (which requires constrain
|
+ !base::HexStringToUInt(profile_str.substr(2, 1), &constraint_set_bits)) { |
+ return false; |
+ } |
+ |
+ return (constraint_set_bits & 0x8); |
DaleCurtis
2014/10/03 22:33:56
Just use >= 8. Let the compiler handle such an opt
wolenetz
2014/10/03 22:42:10
Done.
|
+} |
+ |
static bool IsValidH264Level(const std::string& level_str) { |
uint32 level; |
if (level_str.size() != 2 || !base::HexStringToUInt(level_str, &level)) |
@@ -939,9 +953,9 @@ static bool IsValidH264Level(const std::string& level_str) { |
} |
// Handle parsing H.264 codec IDs as outlined in RFC 6381 |
xhwang
2014/10/03 23:08:06
The suffix strings are really defined in ISO-14496
wolenetz
2014/10/04 01:36:40
Done.
|
-// avc1.42E0xx - H.264 Baseline |
-// avc1.4D40xx - H.264 Main |
-// avc1.6400xx - H.264 High |
+// avc1.42y0xx, y >= 8 - H.264 Baseline |
+// avc1.4D40xx - H.264 Main |
+// avc1.6400xx - H.264 High |
// |
// avc1.xxxxxx & avc3.xxxxxx are considered ambiguous forms that |
// are trying to signal H.264 Baseline. |
@@ -956,7 +970,7 @@ static bool ParseH264CodecID(const std::string& codec_id, |
} |
std::string profile = StringToUpperASCII(codec_id.substr(5, 4)); |
- if (profile == "42E0") { |
+ if (IsValidH264BaselineProfile(profile)) { |
*codec = MimeUtil::H264_BASELINE; |
} else if (profile == "4D40") { |
*codec = MimeUtil::H264_MAIN; |