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

Unified Diff: content/browser/media/media_canplaytype_browsertest.cc

Issue 1677563003: Implemented parsing for H.264/AVC codec ids (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed unit tests Created 4 years, 10 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 | « no previous file | media/base/mime_util.cc » ('j') | media/base/mime_util.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/media_canplaytype_browsertest.cc
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc
index 83493ccc317e55bfa32469eddf24d5ab49aa6550..5b714eb52652551dc426bb2dd040bbd6e09e7dd9 100644
--- a/content/browser/media/media_canplaytype_browsertest.cc
+++ b/content/browser/media/media_canplaytype_browsertest.cc
@@ -629,7 +629,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.77.30\"'"));
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.100.40\"'"));
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E11E\"'"));
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
ddorwin 2016/02/17 19:31:20 Why was the codec ID changed to a probably? This w
servolk 2016/02/17 19:49:53 As I've explained in a thread about logging mime t
ddorwin 2016/02/17 21:44:21 This was added in https://chromium.googlesource.co
servolk 2016/02/17 23:57:15 Good point about duplication, I haven't noticed th
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42101E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42701E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42F01E\"'"));
@@ -710,7 +710,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kNot, CanPlay("'video/x-m4v; codecs=\"avc1.77.30\"'"));
EXPECT_EQ(kNot, CanPlay("'video/x-m4v; codecs=\"avc1.100.40\"'"));
- EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1.42E11E\"'"));
+ EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42E01E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42101E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42701E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42F01E\"'"));
@@ -837,12 +837,17 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
// avc1 without extensions results in "maybe" for compatibility.
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'"));
- // Any 6-digit hexadecimal number will result in at least "maybe".
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.123456\"'"));
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.ABCDEF\"'"));
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.abcdef\"'"));
- EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.12345\"'"));
- EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.1234567\"'"));
+ // A valid-looking 6-digit hexadecimal number will result in at least "maybe".
+ // But the first hex byte after the dot must be a valid profile_idc and the
+ // lower two bits of the second byte/4th digit must be zero.
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42AC23\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42ACDF\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42acdf\"'"));
+
+ // Invalid profile 0x12.
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.123456\"'"));
+ // Valid profile, but the reserved bit is set to 1 (4th digit after dot).
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.420100\"'"));
// Both upper and lower case hexadecimal digits are accepted.
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'"));
@@ -856,55 +861,55 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc1Variants) {
//
// Baseline Profile (66 == 0x42).
- // The first two digits must be 42. The third digit (constraint_set_flags)
- // must be valid hex but it otherwise is ignored. The fourth digit (reserved)
- // must be 0. The last two digits must be any valid level.
+ // The first two digits after the dot must be 42. The third and fourth digits
+ // contain constraint_set_flags and must be valid hex. The last two digits
+ // should be any valid H.264 level. If the level value is invalid the result
+ // will be kMaybe.
//
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42001E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42401E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42801E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E0FF\"'"));
ddorwin 2016/02/17 19:31:19 I assume this is an invalid level. If so, it shoul
servolk 2016/02/17 19:49:53 Done.
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.42G01E\"'"));
-
- // The fourth digit must be 0.
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E11E\"'"));
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.42000G\"'"));
//
// Main Profile (77 == 0x4D).
- // The first two digits must be 4D. The third digit (constraint_set_flags)
- // must be valid hex but it otherwise is ignored. The fourth digit (reserved)
- // must be 0. The last two digits must be any valid level.
+ // The first two digits after the dot must be 4D. The third and fourth digits
+ // contain constraint_set_flags and must be valid hex. The last two digits
+ // should be any valid H.264 level. If the level value is invalid the result
+ // will be kMaybe.
//
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D001E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D400A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D800A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4DE00A\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4DE0FF\"'"));
ddorwin 2016/02/17 19:31:20 ditto
servolk 2016/02/17 19:49:54 Done.
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.4DG01E\"'"));
-
- // The fourth digit must be 0.
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4DE11E\"'"));
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.4D000G\"'"));
//
// High Profile (100 == 0x64).
- // The first two digits must be 64. The third digit (constraint_set_flags)
- // must be valid hex but it otherwise is ignored. The fourth digit (reserved)
- // must be 0. The last two digits must be any valid level.
+ // The first two digits after the dot must be 64. The third and fourth digits
+ // contain constraint_set_flags and must be valid hex. The last two digits
+ // should be any valid H.264 level. If the level value is invalid the result
+ // will be kMaybe.
//
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64001E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64400A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64800A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64E00A\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64E0FF\"'"));
ddorwin 2016/02/17 19:31:19 ditto
servolk 2016/02/17 19:49:54 Done.
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.64G01E\"'"));
-
- // The fourth digit must be 0.
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64E11E\"'"));
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.64000G\"'"));
ddorwin 2016/02/17 19:31:20 It looks like we lost coverage of this: // The fou
servolk 2016/02/17 19:49:54 Well, we didn't lose it completely, it's still cov
ddorwin 2016/02/17 21:44:21 Okay, thanks for the explanation. Note: The origi
//
// Other profiles are not known to be supported.
//
// Extended Profile (88 == 0x58).
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.58A01E\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.58001E\"'"));
servolk 2016/02/17 19:49:53 Btw, note also that I changed this. Since the thir
ddorwin 2016/02/17 21:44:21 Acknowledged. If it is valid to "override" the ext
servolk 2016/02/17 23:57:15 Yes, good point. I've added a few test cases for c
}
// When modifying this test, also change CodecSupportTest_Avc1Variants.
ddorwin 2016/02/17 19:31:20 same as above.
servolk 2016/02/17 19:49:53 See the explanations above.
@@ -912,12 +917,17 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) {
// avc3 without extensions results in "maybe" for compatibility.
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'"));
- // Any 6-digit hexadecimal number will result in at least "maybe".
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.123456\"'"));
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.ABCDEF\"'"));
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.abcdef\"'"));
- EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.12345\"'"));
- EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.1234567\"'"));
+ // A valid-looking 6-digit hexadecimal number will result in at least "maybe".
+ // But the first hex byte after the dot must be a valid profile_idc and the
+ // lower two bits of the second byte/4th digit must be zero.
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42AC23\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42ACDF\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42acdf\"'"));
+
+ // Invalid profile 0x12.
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.123456\"'"));
+ // Valid profile, but the reserved bit is set to 1 (4th digit after dot).
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.420100\"'"));
// Both upper and lower case hexadecimal digits are accepted.
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E01E\"'"));
@@ -931,55 +941,55 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) {
//
// Baseline Profile (66 == 0x42).
- // The first two digits must be 42. The third digit (constraint_set_flags)
- // must be valid hex but it otherwise is ignored. The fourth digit (reserved)
- // must be 0. The last two digits must be any valid level.
+ // The first two digits after the dot must be 42. The third and fourth digits
+ // contain constraint_set_flags and must be valid hex. The last two digits
+ // should be any valid H.264 level. If the level value is invalid the result
+ // will be kMaybe.
//
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42001E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42400A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42800A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.42E00A\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42E0FF\"'"));
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.42G01E\"'"));
-
- // The fourth digit must be 0.
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.42E11E\"'"));
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.42000G\"'"));
//
// Main Profile (77 == 0x4D).
- // The first two digits must be 4D. The third digit (constraint_set_flags)
- // must be valid hex but it otherwise is ignored. The fourth digit (reserved)
- // must be 0. The last two digits must be any valid level.
+ // The first two digits after the dot must be 4D. The third and fourth digits
+ // contain constraint_set_flags and must be valid hex. The last two digits
+ // should be any valid H.264 level. If the level value is invalid the result
+ // will be kMaybe.
//
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D001E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D400A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4D800A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.4DE00A\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4DE0FF\"'"));
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.4DG01E\"'"));
-
- // The fourth digit must be 0.
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.4DE11E\"'"));
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.4D000G\"'"));
//
// High Profile (100 == 0x64).
- // The first two digits must be 64. The third digit (constraint_set_flags)
- // must be valid hex but it otherwise is ignored. The fourth digit (reserved)
- // must be 0. The last two digits must be any valid level.
+ // The first two digits after the dot must be 64. The third and fourth digits
+ // contain constraint_set_flags and must be valid hex. The last two digits
+ // should be any valid H.264 level. If the level value is invalid the result
+ // will be kMaybe.
//
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64001E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64400A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64800A\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc3.64E00A\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64E0FF\"'"));
EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.64G01E\"'"));
-
- // The fourth digit must be 0.
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.64E11E\"'"));
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc3.64000G\"'"));
//
// Other profiles are not known to be supported.
//
// Extended Profile (88 == 0x58).
- EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.58A01E\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3.58001E\"'"));
}
// Tests AVC levels using AVC1 Baseline (0x42E0zz).
@@ -1182,8 +1192,8 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc3.42C01E\"'"));
- EXPECT_EQ(maybeCanPlayHLS,
- CanPlay("'application/x-mpegurl; codecs=\"avc1.42E11E\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E\"'"));
ddorwin 2016/02/17 19:31:20 ditto here and 1272
servolk 2016/02/17 19:49:53 See the explanations above.
EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc1.42101E\"'"));
EXPECT_EQ(probablyCanPlayHLS,
@@ -1259,8 +1269,8 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.42C01E\"'"));
- EXPECT_EQ(maybeCanPlayHLS,
- CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42E11E\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42E01E\"'"));
EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.42101E\"'"));
EXPECT_EQ(probablyCanPlayHLS,
« no previous file with comments | « no previous file | media/base/mime_util.cc » ('j') | media/base/mime_util.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698