diff options
-rw-r--r-- | content/browser/media/media_canplaytype_browsertest.cc | 51 | ||||
-rw-r--r-- | net/base/mime_util.cc | 48 |
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. |