Chromium Code Reviews| 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; |