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 f0f83af748a56f2aed39e444c1579f886108f740..b125d83d9b7baf74d1c38e67b746eb41d728fb4e 100644 |
--- a/content/browser/media/media_canplaytype_browsertest.cc |
+++ b/content/browser/media/media_canplaytype_browsertest.cc |
@@ -25,18 +25,18 @@ const char kPropProbably[] = ""; |
const char kPropMaybe[] = ""; |
#endif // USE_PROPRIETARY_CODECS |
-// TODO(amogh.bihani): Change the opus tests when opus is on |
-// Android. (http://crbug.com/318436). |
#if !defined(OS_ANDROID) |
const char kOggVideoProbably[] = "probably"; |
const char kOggVideoMaybe[] = "maybe"; |
const char kTheoraProbably[] = "probably"; |
const char kOggOpusProbably[] = "probably"; |
+const char* kMpeg2AacProbably = kPropProbably; |
#else |
const char kOggVideoProbably[] = ""; |
const char kOggVideoMaybe[] = ""; |
const char kTheoraProbably[] = ""; |
const char kOggOpusProbably[] = ""; |
+const char kMpeg2AacProbably[] = ""; |
#endif // !OS_ANDROID |
namespace content { |
@@ -61,18 +61,57 @@ public: |
} |
void TestMPEGUnacceptableCombinations(std::string mime) { |
- // Codecs must be followed by valid hexadecimal number. |
- EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.unknown\"'")); |
- EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.unknown\"'")); |
- EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.unknown\"'")); |
+ // AVC codecs must be followed by valid 6-digit hexadecimal number. |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.12345\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.12345\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.1234567\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.1234567\"'")); |
+ // TODO(ddorwin): These four should return "". See crbug.com/457076. |
+// EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.number\"'")); |
+// EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.number\"'")); |
+// EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.12345.\"'")); |
+// EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.12345.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.123456.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.123456.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.123456.7\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.123456.7\"'")); |
+ |
+ // AAC codecs must be followed by one or two valid hexadecimal numbers. |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.no\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.0k\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.0k.0k\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.4.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.0k\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40k\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2k\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2k\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.2.0\"'")); |
+ |
+ // Just "mp4a" is not supported like just "avc1" is supported. |
wolenetz
2015/02/18 22:44:33
nit: rework comment. I kept reading this the wrong
ddorwin
2015/02/20 05:26:24
Done.
|
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.\"'")); |
+ |
+ // Other names for the codecs are not supported. |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"h264\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"h.264\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"H264\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"H.264\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"aac\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AAC\"'")); |
// Codecs must not end with a dot. |
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1.\"'")); |
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc3.\"'")); |
- EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a\"'")); |
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.\"'")); |
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"mp4a.40.\"'")); |
+ // A simple substring match is not sufficient. |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"lavc1337\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\";mp4a+\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\";mp4a.40+\"'")); |
+ |
// Codecs not belonging to MPEG container. |
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vorbis\"'")); |
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, vorbis\"'")); |
@@ -415,6 +454,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { |
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1\"'")); |
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"mp4a\"'")); |
wolenetz
2015/02/18 22:44:32
nit: this is redundant with the "just like" portio
ddorwin
2015/02/20 05:26:24
Done.
|
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"mp4a.40\"'")); |
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40\"'")); |
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40\"'")); |
@@ -458,6 +498,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { |
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1\"'")); |
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'video/x-m4v; codecs=\"mp4a\"'")); |
wolenetz
2015/02/18 22:44:33
nit: ditto redundant w/"just like" portion of call
ddorwin
2015/02/20 05:26:23
Done.
|
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"mp4a.40\"'")); |
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40\"'")); |
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40\"'")); |
@@ -498,6 +539,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { |
TestMPEGUnacceptableCombinations("video/x-m4v"); |
EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a\"'")); |
wolenetz
2015/02/18 22:44:33
nit ditto
ddorwin
2015/02/20 05:26:24
Done.
|
EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'")); |
EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); |
EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'")); |
@@ -516,6 +558,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { |
TestMPEGUnacceptableCombinations("audio/mp4"); |
EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"mp4a\"'")); |
wolenetz
2015/02/18 22:44:32
nit ditto
ddorwin
2015/02/20 05:26:23
Done.
|
EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a; codecs=\"mp4a.40\"'")); |
EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.2\"'")); |
EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.02\"'")); |
@@ -534,6 +577,254 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) { |
TestMPEGUnacceptableCombinations("audio/x-m4a"); |
} |
+// When modifying this test, also change CodecSupportTest_Avc3Variants. |
wolenetz
2015/02/18 22:44:33
nit: combine into one test that loops through all
ddorwin
2015/02/20 05:26:24
Done, but I don't like it. I think I will revert.
wolenetz
2015/02/23 19:57:45
Yeah, I agree with your reasons for not doing this
ddorwin
2015/02/24 00:09:20
Acknowledged.
|
+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\"'")); |
wolenetz
2015/02/18 22:44:33
nit ditto for these two kNot lines: (redundant wit
ddorwin
2015/02/20 05:26:24
Yeah, these tests are quick, and I think it's nice
wolenetz
2015/02/23 19:57:44
Acknowledged.
|
+ EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.1234567\"'")); |
+ |
+ // Both upper and lower case hexadecimal digits are accepted. |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'")); |
wolenetz
2015/02/18 22:44:32
hmm there's more redundancy. I suspect many of the
ddorwin
2015/02/20 05:26:24
Acknowledged.
|
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42e01e\"'")); |
+ |
+ // From a YouTube DASH MSE test manifest. |
wolenetz
2015/02/18 22:44:33
4d401e is duplicated, below.
This seems like a pa
ddorwin
2015/02/20 05:26:23
Yes. This was an attempt to make sure we were cove
wolenetz
2015/02/23 19:57:44
Acknowledged.
|
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4d401f\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4d401e\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4d4015\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.640028\"'")); |
+ |
+ // |
+ // Baseline Profile (66 == 0x42). |
+ // The first four digits must be 42E0, but Chrome also allows 42[8-F]0. |
+ // (See http://crbug.com/408552#c17.) |
+ // The last two digits must be any valid level. |
+ // |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'")); |
+ |
+ // The third digit must be 8-F. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42001E\"'")); |
wolenetz
2015/02/18 22:44:33
aside: thanks for formatting these lines to line u
ddorwin
2015/02/20 05:26:24
Acknowledged.
|
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42101E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42201E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42301E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42401E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42501E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42601E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42701E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42801E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42901E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42A01E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42B01E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42C01E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42D01E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42F01E\"'")); |
+ |
+ // The fourth digit must be 0. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E11E\"'")); |
+ |
+ // |
+ // Main Profile (77 == 0x4D). |
+ // The first four digits must be 4D40. |
+ // The last two digits must be any valid level. |
+ // |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D400A\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.4D401E\"'")); |
+ |
+ // Other values are not allowed for the third and fourth digits. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D301E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D501E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D411E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.4D4F1E\"'")); |
+ |
+ // |
+ // High Profile (100 == 0x64). |
+ // The first four digits must be 6400. |
+ // The last two digits must be any valid level. |
+ // |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64000A\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64001E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.64001F\"'")); |
+ |
+ // Other values are not allowed for the third and fourth digits. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64101E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64f01E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.64011E\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.640F1E\"'")); |
+ |
+ // |
+ // Other profiles are not known to be supported. |
+ // |
+ |
+ // Extended Profile (88 == 0x58). |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.58A01E\"'")); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Avc3Variants) { |
+ // TODO(ddorwin): Copy the final Avc1Variants contents here and s/avc1/avc3/. |
wolenetz
2015/02/18 22:44:33
nit ditto: parameterize avc# and use a helper for
ddorwin
2015/02/20 05:26:23
Ditto.
wolenetz
2015/02/23 19:57:45
Acknowledged.
|
+} |
+ |
+// Tests AVC levels using AVC1 Baseline (0x42E0zz). |
+// Other supported values for the first for hexadecimal digits should behave |
wolenetz
2015/02/18 22:44:33
nit: s/for hex/four hex/
ddorwin
2015/02/20 05:26:23
Done.
|
+// the same way but are not tested. |
+// For each full level, the following are tested: |
+// * The hexadecimal value before it is not supported. |
+// * The hexadecimal value for the main level and all sub-levels are supported. |
+// * The hexadecimal value after the last sub-level it is not supported. |
+// * Decimal representations of the levels are not supported. |
+ |
+IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_AvcLevels) { |
+ // Level 0 is not supported. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E000\"'")); |
+ |
+ // Levels 1 (0x0A), 1.1 (0x0B), 1.2 (0x0C), 1.3 (0x0D). |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E009\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00A\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00B\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00C\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E00D\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E00E\"'")); |
+ // Verify that decimal representations of levels are not supported. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E001\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E010\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E011\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E012\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'")); |
+ |
+ // Levels 2 (0x14), 2.1 (0x15), 2.2 (0x16) |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E013\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E014\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E015\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E016\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E017\"'")); |
+ // Verify that decimal representations of levels are not supported. |
+ // However, 20 is level 3.2. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E002\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E022\"'")); |
+ |
+ // Levels 3 (0x1e), 3.1 (0x1F), 3.2 (0x20) |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E01D\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01E\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E01F\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E020\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E021\"'")); |
+ // Verify that decimal representations of levels are not supported. |
+ // However, 32 is level 5. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E003\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E030\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'")); |
+ |
+ // Levels 4 (0x28), 4.1 (0x29), 4.2 (0x2A) |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E027\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E028\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E029\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E02A\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E02B\"'")); |
+ // Verify that decimal representations of levels are not supported. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E004\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E040\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E041\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E042\"'")); |
+ |
+ // Levels 5 (0x32), 5.1 (0x33). |
+ // Note: Level 5.2 (0x34) is not considered valid. |
wolenetz
2015/02/18 22:44:33
The version of ISO14496-10 acolwell@ used may have
ddorwin
2015/02/20 05:26:24
Done.
|
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E031\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E032\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42E033\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E034\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E035\"'")); |
+ // Verify that decimal representations of levels are not supported. |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E005\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E050\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E051\"'")); |
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1.42E052\"'")); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_Mp4aVariants) { |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a\"'")); |
wolenetz
2015/02/18 22:44:33
nit ditto redundancy...
ddorwin
2015/02/20 05:26:23
This is specifically testing mp4a, so I think it's
wolenetz
2015/02/23 19:57:45
Acknowledged.
|
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.\"'")); |
+ |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6\"'")); |
wolenetz
2015/02/18 22:44:33
nit: include comments in this method identifying w
ddorwin
2015/02/20 05:26:23
Hmm. I'm not sure how to do this without adding mo
wolenetz
2015/02/23 19:57:44
(nit) Perhaps a comment section at the top of this
ddorwin
2015/02/24 00:09:20
Done.
|
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.60\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.61\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.62\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.63\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.65\"'")); |
+ // MPEG2 AAC Main, LC, and SSR are supported except on Android. |
+ EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.66\"'")); |
+ EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.67\"'")); |
+ EXPECT_EQ(kMpeg2AacProbably, CanPlay("'audio/mp4; codecs=\"mp4a.68\"'")); |
+ // MP3. |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.69\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6A\"'")); |
+ // MP3. |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.6B\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6b\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6C\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6D\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6E\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.6F\"'")); |
+ |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.76\"'")); |
+ |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.39\"'")); |
+ |
+ // mp4a.40 without further extension is ambiguous and results in "maybe". |
+ EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4; codecs=\"mp4a.40\"'")); |
+ |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.0\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.1\"'")); |
+ // MPEG4 AAC LC. |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.3\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.4\"'")); |
+ // MPEG4 AAC SBR v1. |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.6\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.7\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.8\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.9\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.10\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.20\"'")); |
+ // MPEG4 AAC SBR PS v2. |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'")); |
wolenetz
2015/02/18 22:44:33
nit: try mp4a.40.1D, mp4a.40.1d, mp4a.40.41 should
ddorwin
2015/02/20 05:26:24
Done.
|
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.30\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.40\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.50\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.290\"'")); |
+ |
+ // Allow leading zeros in aud-oti for specific MPEG4 AAC strings. |
+ // See http://crbug.com/440607. |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.00\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.01\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.02\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.03\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.04\"'")); |
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.40.029\"'")); |
+ |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.41.2\"'")); |
+ |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.2\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.4.5\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.400.5\"'")); |
+ EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.040.5\"'")); |
+} |
+ |
IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) { |
// HLS are supported only on Android IceCreamSandwich and above (API level 14) |
std::string probablyCanPlayHLS = kNot; |