summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/media/media_canplaytype_browsertest.cc51
-rw-r--r--net/base/mime_util.cc48
2 files changed, 78 insertions, 21 deletions
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc
index c781d7e..8dd11e7 100644
--- a/content/browser/media/media_canplaytype_browsertest.cc
+++ b/content/browser/media/media_canplaytype_browsertest.cc
@@ -92,6 +92,8 @@ public:
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp9, mp4a.40\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8, mp4a.40.2\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp9, mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp8, mp4a.40.02\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"vp9, mp4a.40.02\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"1\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc1, 1\"'"));
@@ -102,6 +104,7 @@ public:
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora, mp4a\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora, mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"theora, mp4a.40.02\"'"));
// Codecs are case sensitive.
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC1\"'"));
@@ -110,12 +113,17 @@ public:
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC3.64001f\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"MP4A\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"MP4A.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"MP4A.40.02\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC1, MP4\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"AVC3, MP4\"'"));
EXPECT_EQ(kNot,
CanPlay("'" + mime + "; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
EXPECT_EQ(kNot,
CanPlay("'" + mime + "; codecs=\", AVC3.64001F, MP4.40.2\"'"));
+ EXPECT_EQ(kNot,
+ CanPlay("'" + mime + "; codecs=\", AVC1.4D401E, MP4.40.02\"'"));
+ EXPECT_EQ(kNot,
+ CanPlay("'" + mime + "; codecs=\", AVC3.64001F, MP4.40.02\"'"));
// Unknown codecs.
EXPECT_EQ(kNot, CanPlay("'" + mime + "; codecs=\"avc2\"'"));
@@ -151,7 +159,9 @@ public:
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.02\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, mp4a.40.02\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"1\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"theora, 1\"'"));
@@ -190,6 +200,7 @@ public:
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.02\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8, mp4a.40\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp9, mp4a.40\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"vp8.0, mp4a.40\"'"));
@@ -226,6 +237,7 @@ public:
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40\"'"));
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"mp4a.40.02\"'"));
// Unknown codec.
EXPECT_EQ(kNot, CanPlay("'" + mime +"; codecs=\"unknown\"'"));
@@ -358,6 +370,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.02\"'"));
TestMPEGUnacceptableCombinations("audio/mpeg");
@@ -372,6 +385,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.02\"'"));
TestMPEGUnacceptableCombinations("audio/mp3");
@@ -386,6 +400,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.02\"'"));
TestMPEGUnacceptableCombinations("audio/x-mp3");
}
@@ -411,15 +426,22 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1.42F01E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.40.02\"'"));
EXPECT_EQ(kPropProbably,
CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'"));
EXPECT_EQ(kPropProbably,
+ CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.02\"'"));
+ EXPECT_EQ(kPropProbably,
CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.5\"'"));
EXPECT_EQ(kPropProbably,
+ CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.05\"'"));
+ EXPECT_EQ(kPropProbably,
CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"'"));
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.2\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.02\"'"));
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.2\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.02\"'"));
EXPECT_EQ(kPropMaybe,
CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40\"'"));
EXPECT_EQ(kPropMaybe,
@@ -447,15 +469,22 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1.42F01E\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"mp4a.40.2\"'"));
+ EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"mp4a.40.02\"'"));
EXPECT_EQ(kPropProbably,
CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40.2\"'"));
EXPECT_EQ(kPropProbably,
+ CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40.02\"'"));
+ EXPECT_EQ(kPropProbably,
CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40.5\"'"));
EXPECT_EQ(kPropProbably,
+ CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40.05\"'"));
+ EXPECT_EQ(kPropProbably,
CanPlay("'video/x-m4v; codecs=\"avc3.42E01E, mp4a.40.29\"'"));
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.2\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc1, mp4a.40.02\"'"));
EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.2\"'"));
+ EXPECT_EQ(kPropMaybe, CanPlay("'video/x-m4v; codecs=\"avc3, mp4a.40.02\"'"));
EXPECT_EQ(kPropMaybe,
CanPlay("'video/x-m4v; codecs=\"avc1.42E01E, mp4a.40\"'"));
EXPECT_EQ(kPropMaybe,
@@ -466,7 +495,9 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp4'"));
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\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.5\"'"));
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.05\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp4a.40.29\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1\"'"));
@@ -482,7 +513,9 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'"));
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\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.5\"'"));
+ EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.05\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.40.29\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/x-m4a; codecs=\"avc1\"'"));
@@ -540,17 +573,27 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"mp4a.40.2\"'"));
EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/x-mpegurl; codecs=\"mp4a.40.02\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E, mp4a.40.2\"'"));
EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E, mp4a.40.02\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E, mp4a.40.5\"'"));
EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E, mp4a.40.05\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E, mp4a.40.29\"'"));
EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc1, mp4a.40.2\"'"));
EXPECT_EQ(maybeCanPlayHLS,
+ CanPlay("'application/x-mpegurl; codecs=\"avc1, mp4a.40.02\"'"));
+ EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc3, mp4a.40.2\"'"));
EXPECT_EQ(maybeCanPlayHLS,
+ CanPlay("'application/x-mpegurl; codecs=\"avc3, mp4a.40.02\"'"));
+ EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc1.42E01E, mp4a.40\"'"));
EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/x-mpegurl; codecs=\"avc3.42E01E, mp4a.40\"'"));
@@ -591,15 +634,23 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.2\"'"));
EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.02\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.5\"'"));
EXPECT_EQ(probablyCanPlayHLS,
+ CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.05\"'"));
+ EXPECT_EQ(probablyCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.29\"'"));
EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1, mp4a.40.2\"'"));
EXPECT_EQ(maybeCanPlayHLS,
+ CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1, mp4a.40.02\"'"));
+ EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3, mp4a.40.2\"'"));
EXPECT_EQ(maybeCanPlayHLS,
+ CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3, mp4a.40.02\"'"));
+ EXPECT_EQ(maybeCanPlayHLS,
CanPlay("'application/vnd.apple.mpegurl; "
"codecs=\"avc1.42E01E, mp4a.40\"'"));
EXPECT_EQ(maybeCanPlayHLS,
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc
index c35e24c..cba37a4 100644
--- a/net/base/mime_util.cc
+++ b/net/base/mime_util.cc
@@ -530,17 +530,22 @@ struct MediaFormatStrict {
// mp4a.69 - MPEG-2 extension to MPEG-1
// mp4a.6B - MPEG-1 audio
// mp4a.40.2 - MPEG-4 AAC LC
+// mp4a.40.02 - MPEG-4 AAC LC (leading 0 in aud-oti for compatibility)
// mp4a.40.5 - MPEG-4 HE-AAC v1 (AAC LC + SBR)
+// mp4a.40.05 - MPEG-4 HE-AAC v1 (AAC LC + SBR) (leading 0 in aud-oti for
+// compatibility)
// mp4a.40.29 - MPEG-4 HE-AAC v2 (AAC LC + SBR + PS)
//
// avc1.42E0xx - H.264 Baseline
// avc1.4D40xx - H.264 Main
// avc1.6400xx - H.264 High
static const char kMP4AudioCodecsExpression[] =
- "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.5,mp4a.40.29";
+ "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5,"
+ "mp4a.40.05,mp4a.40.29";
static const char kMP4VideoCodecsExpression[] =
- "avc1.42E00A,avc1.4D400A,avc1.64000A," \
- "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.5,mp4a.40.29";
+ "avc1.42E00A,avc1.4D400A,avc1.64000A,"
+ "mp4a.66,mp4a.67,mp4a.68,mp4a.69,mp4a.6B,mp4a.40.2,mp4a.40.02,mp4a.40.5,"
+ "mp4a.40.05,mp4a.40.29";
static const MediaFormatStrict format_codec_mappings[] = {
{ "video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0" },
@@ -571,24 +576,25 @@ struct CodecIDMappings {
//
// The "mp4a" strings come from RFC 6381.
static const CodecIDMappings kUnambiguousCodecIDs[] = {
- { "1", MimeUtil::PCM }, // We only allow this for WAV so it isn't ambiguous.
- { "mp3", MimeUtil::MP3 },
- { "mp4a.66", MimeUtil::MPEG2_AAC_MAIN },
- { "mp4a.67", MimeUtil::MPEG2_AAC_LC },
- { "mp4a.68", MimeUtil::MPEG2_AAC_SSR },
- { "mp4a.69", MimeUtil::MP3 },
- { "mp4a.6B", MimeUtil::MP3 },
- { "mp4a.40.2", MimeUtil::MPEG4_AAC_LC },
- { "mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1 },
- { "mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2 },
- { "vorbis", MimeUtil::VORBIS },
- { "opus", MimeUtil::OPUS },
- { "vp8", MimeUtil::VP8 },
- { "vp8.0", MimeUtil::VP8 },
- { "vp9", MimeUtil::VP9 },
- { "vp9.0", MimeUtil::VP9 },
- { "theora", MimeUtil::THEORA }
-};
+ {"1", MimeUtil::PCM}, // We only allow this for WAV so it isn't ambiguous.
+ {"mp3", MimeUtil::MP3},
+ {"mp4a.66", MimeUtil::MPEG2_AAC_MAIN},
+ {"mp4a.67", MimeUtil::MPEG2_AAC_LC},
+ {"mp4a.68", MimeUtil::MPEG2_AAC_SSR},
+ {"mp4a.69", MimeUtil::MP3},
+ {"mp4a.6B", MimeUtil::MP3},
+ {"mp4a.40.2", MimeUtil::MPEG4_AAC_LC},
+ {"mp4a.40.02", MimeUtil::MPEG4_AAC_LC},
+ {"mp4a.40.5", MimeUtil::MPEG4_AAC_SBR_v1},
+ {"mp4a.40.05", MimeUtil::MPEG4_AAC_SBR_v1},
+ {"mp4a.40.29", MimeUtil::MPEG4_AAC_SBR_PS_v2},
+ {"vorbis", MimeUtil::VORBIS},
+ {"opus", MimeUtil::OPUS},
+ {"vp8", MimeUtil::VP8},
+ {"vp8.0", MimeUtil::VP8},
+ {"vp9", MimeUtil::VP9},
+ {"vp9.0", MimeUtil::VP9},
+ {"theora", MimeUtil::THEORA}};
// List of codec IDs that are ambiguous and don't provide
// enough information to determine the codec and profile.