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

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

Issue 918463002: Add detailed tests of supported avc1, avc3, and mp4a codec strings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@avc1
Patch Set: rebase Created 5 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 | no next file » | no next file with comments »
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 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;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698