OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 const char* kHevcSupported = kNot; | 50 const char* kHevcSupported = kNot; |
51 | 51 |
52 #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER) | 52 #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER) |
53 const char* kMp2tsMaybe = kPropMaybe; | 53 const char* kMp2tsMaybe = kPropMaybe; |
54 const char* kMp2tsProbably = kPropProbably; | 54 const char* kMp2tsProbably = kPropProbably; |
55 #else | 55 #else |
56 const char* kMp2tsMaybe = kNot; | 56 const char* kMp2tsMaybe = kNot; |
57 const char* kMp2tsProbably = kNot; | 57 const char* kMp2tsProbably = kNot; |
58 #endif | 58 #endif |
59 | 59 |
60 #if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) | |
61 const char* kAc3Eac3Probably = kPropProbably; | |
62 #else | |
63 const char* kAc3Eac3Probably = kNot; | |
64 #endif | |
65 | |
66 #if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER) && \ | |
67 BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) | |
68 const char* kMp2tsAc3Eac3Probably = kPropProbably; | |
69 #else | |
70 const char* kMp2tsAc3Eac3Probably = kNot; | |
71 #endif | |
72 | |
73 // High 10-bit profile is only available when we can use ffmpeg to decode H.264. | 60 // High 10-bit profile is only available when we can use ffmpeg to decode H.264. |
74 // Even though FFmpeg is used on Android, we only use platform decoders for | 61 // Even though FFmpeg is used on Android, we only use platform decoders for |
75 // H.264 | 62 // H.264 |
76 #if !defined(MEDIA_DISABLE_FFMPEG) && !defined(OS_ANDROID) | 63 #if !defined(MEDIA_DISABLE_FFMPEG) && !defined(OS_ANDROID) |
77 const char* kHi10pProbably = kPropProbably; | 64 const char* kHi10pProbably = kPropProbably; |
78 #else | 65 #else |
79 const char* kHi10pProbably = kPropMaybe; | 66 const char* kHi10pProbably = kPropMaybe; |
80 #endif | 67 #endif |
81 | 68 |
82 namespace content { | 69 namespace content { |
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'")); | 808 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'")); |
822 EXPECT_EQ(kPropProbably, | 809 EXPECT_EQ(kPropProbably, |
823 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.02\"'")); | 810 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40.02\"'")); |
824 EXPECT_EQ(kPropProbably, | 811 EXPECT_EQ(kPropProbably, |
825 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.5\"'")); | 812 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.5\"'")); |
826 EXPECT_EQ(kPropProbably, | 813 EXPECT_EQ(kPropProbably, |
827 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.05\"'")); | 814 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.05\"'")); |
828 EXPECT_EQ(kPropProbably, | 815 EXPECT_EQ(kPropProbably, |
829 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"'")); | 816 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"'")); |
830 | 817 |
831 // AC3 and EAC3 (aka Dolby Digital Plus, DD+) audio codecs. | 818 // AC3 and EAC3 (aka Dolby Digital Plus, DD+) audio codecs. These are not |
| 819 // supported by Chrome by default. |
832 // TODO(servolk): Strictly speaking only mp4a.A5 and mp4a.A6 codec ids are | 820 // TODO(servolk): Strictly speaking only mp4a.A5 and mp4a.A6 codec ids are |
833 // valid according to RFC 6381 section 3.3, 3.4. Lower-case oti (mp4a.a5 and | 821 // valid according to RFC 6381 section 3.3, 3.4. Lower-case oti (mp4a.a5 and |
834 // mp4a.a6) should be rejected. But we used to allow those in older versions | 822 // mp4a.a6) should be rejected. But we used to allow those in older versions |
835 // of Chromecast firmware and some apps (notably MPL) depend on those codec | 823 // of Chromecast firmware and some apps (notably MPL) depend on those codec |
836 // types being supported, so they should be allowed for now (crbug.com/564960) | 824 // types being supported, so they should be allowed for now (crbug.com/564960) |
837 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'video/mp4; codecs=\"ac-3\"'")); | 825 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"ac-3\"'")); |
838 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'video/mp4; codecs=\"mp4a.a5\"'")); | 826 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"mp4a.a5\"'")); |
839 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'video/mp4; codecs=\"mp4a.A5\"'")); | 827 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"mp4a.A5\"'")); |
840 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'video/mp4; codecs=\"ec-3\"'")); | 828 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"ec-3\"'")); |
841 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'video/mp4; codecs=\"mp4a.a6\"'")); | 829 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"mp4a.a6\"'")); |
842 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'video/mp4; codecs=\"mp4a.A6\"'")); | 830 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"mp4a.A6\"'")); |
843 EXPECT_EQ(kAc3Eac3Probably, | 831 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.640028,ac-3\"'")); |
844 CanPlay("'video/mp4; codecs=\"avc1.640028,ac-3\"'")); | 832 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.a5\"'")); |
845 EXPECT_EQ(kAc3Eac3Probably, | 833 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.A5\"'")); |
846 CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.a5\"'")); | 834 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.640028,ec-3\"'")); |
847 EXPECT_EQ(kAc3Eac3Probably, | 835 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.a6\"'")); |
848 CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.A5\"'")); | 836 EXPECT_EQ(kNot, CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.A6\"'")); |
849 EXPECT_EQ(kAc3Eac3Probably, | |
850 CanPlay("'video/mp4; codecs=\"avc1.640028,ec-3\"'")); | |
851 EXPECT_EQ(kAc3Eac3Probably, | |
852 CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.a6\"'")); | |
853 EXPECT_EQ(kAc3Eac3Probably, | |
854 CanPlay("'video/mp4; codecs=\"avc1.640028,mp4a.A6\"'")); | |
855 | 837 |
856 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.2\"'")); | 838 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.2\"'")); |
857 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.02\"'")); | 839 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc1, mp4a.40.02\"'")); |
858 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.2\"'")); | 840 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.2\"'")); |
859 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.02\"'")); | 841 EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4; codecs=\"avc3, mp4a.40.02\"'")); |
860 EXPECT_EQ(kPropMaybe, | 842 EXPECT_EQ(kPropMaybe, |
861 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40\"'")); | 843 CanPlay("'video/mp4; codecs=\"avc1.42E01E, mp4a.40\"'")); |
862 EXPECT_EQ(kPropMaybe, | 844 EXPECT_EQ(kPropMaybe, |
863 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40\"'")); | 845 CanPlay("'video/mp4; codecs=\"avc3.42E01E, mp4a.40\"'")); |
864 | 846 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'")); | 951 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc1.4D401E\"'")); |
970 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3.64001F\"'")); | 952 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"avc3.64001F\"'")); |
971 | 953 |
972 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hev1.1.6.L93.B0\"'")); | 954 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hev1.1.6.L93.B0\"'")); |
973 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hvc1.1.6.L93.B0\"'")); | 955 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hvc1.1.6.L93.B0\"'")); |
974 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hev1.1.6.L93.B0,mp4a.40.5\"'")); | 956 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hev1.1.6.L93.B0,mp4a.40.5\"'")); |
975 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hvc1.1.6.L93.B0,mp4a.40.5\"'")); | 957 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"hvc1.1.6.L93.B0,mp4a.40.5\"'")); |
976 | 958 |
977 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"vp09.00.10.08\"'")); | 959 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"vp09.00.10.08\"'")); |
978 | 960 |
979 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'audio/mp4; codecs=\"ac-3\"'")); | 961 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"ac-3\"'")); |
980 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'audio/mp4; codecs=\"mp4a.a5\"'")); | 962 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.a5\"'")); |
981 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'audio/mp4; codecs=\"mp4a.A5\"'")); | 963 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.A5\"'")); |
982 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'audio/mp4; codecs=\"ec-3\"'")); | 964 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"ec-3\"'")); |
983 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'audio/mp4; codecs=\"mp4a.a6\"'")); | 965 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.a6\"'")); |
984 EXPECT_EQ(kAc3Eac3Probably, CanPlay("'audio/mp4; codecs=\"mp4a.A6\"'")); | 966 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"mp4a.A6\"'")); |
985 | 967 |
986 TestMPEGUnacceptableCombinations("audio/mp4"); | 968 TestMPEGUnacceptableCombinations("audio/mp4"); |
987 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"flac\"'")); | 969 EXPECT_EQ(kNot, CanPlay("'audio/mp4; codecs=\"flac\"'")); |
988 // This result is incorrect. See https://crbug.com/592889. | 970 // This result is incorrect. See https://crbug.com/592889. |
989 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp3\"'")); | 971 EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"mp3\"'")); |
990 | 972 |
991 EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'")); | 973 EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-m4a'")); |
992 | 974 |
993 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.66\"'")); | 975 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.66\"'")); |
994 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.67\"'")); | 976 EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"mp4a.67\"'")); |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1438 // AAC LC audio | 1420 // AAC LC audio |
1439 EXPECT_EQ(kMp2tsProbably, CanPlay("'video/mp2t; codecs=\"mp4a.40.2\"'")); | 1421 EXPECT_EQ(kMp2tsProbably, CanPlay("'video/mp2t; codecs=\"mp4a.40.2\"'")); |
1440 // H.264 + AAC audio combinations | 1422 // H.264 + AAC audio combinations |
1441 EXPECT_EQ(kMp2tsProbably, | 1423 EXPECT_EQ(kMp2tsProbably, |
1442 CanPlay("'video/mp2t; codecs=\"avc1.42E01E,mp4a.40.2\"'")); | 1424 CanPlay("'video/mp2t; codecs=\"avc1.42E01E,mp4a.40.2\"'")); |
1443 EXPECT_EQ(kMp2tsProbably, | 1425 EXPECT_EQ(kMp2tsProbably, |
1444 CanPlay("'video/mp2t; codecs=\"avc1.4D401E,mp4a.40.2\"'")); | 1426 CanPlay("'video/mp2t; codecs=\"avc1.4D401E,mp4a.40.2\"'")); |
1445 EXPECT_EQ(kMp2tsProbably, | 1427 EXPECT_EQ(kMp2tsProbably, |
1446 CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.40.2\"'")); | 1428 CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.40.2\"'")); |
1447 // H.264 + AC3/EAC3 audio combinations | 1429 // H.264 + AC3/EAC3 audio combinations |
1448 EXPECT_EQ(kMp2tsAc3Eac3Probably, | 1430 EXPECT_EQ(kNot, CanPlay("'video/mp2t; codecs=\"avc1.640028,ac-3\"'")); |
1449 CanPlay("'video/mp2t; codecs=\"avc1.640028,ac-3\"'")); | 1431 EXPECT_EQ(kNot, CanPlay("'video/mp2t; codecs=\"avc1.640028,ec-3\"'")); |
1450 EXPECT_EQ(kMp2tsAc3Eac3Probably, | 1432 EXPECT_EQ(kNot, CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.A5\"'")); |
1451 CanPlay("'video/mp2t; codecs=\"avc1.640028,ec-3\"'")); | 1433 EXPECT_EQ(kNot, CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.A6\"'")); |
1452 EXPECT_EQ(kMp2tsAc3Eac3Probably, | 1434 EXPECT_EQ(kNot, CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.a5\"'")); |
1453 CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.A5\"'")); | 1435 EXPECT_EQ(kNot, CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.a6\"'")); |
1454 EXPECT_EQ(kMp2tsAc3Eac3Probably, | |
1455 CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.A6\"'")); | |
1456 EXPECT_EQ(kMp2tsAc3Eac3Probably, | |
1457 CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.a5\"'")); | |
1458 EXPECT_EQ(kMp2tsAc3Eac3Probably, | |
1459 CanPlay("'video/mp2t; codecs=\"avc1.640028,mp4a.a6\"'")); | |
1460 | 1436 |
1461 TestMPEGUnacceptableCombinations("video/mp2t"); | 1437 TestMPEGUnacceptableCombinations("video/mp2t"); |
1462 // This result is incorrect. See https://crbug.com/592889. | 1438 // This result is incorrect. See https://crbug.com/592889. |
1463 EXPECT_EQ(kMp2tsProbably, CanPlay("'video/mp2t; codecs=\"mp3\"'")); | 1439 EXPECT_EQ(kMp2tsProbably, CanPlay("'video/mp2t; codecs=\"mp3\"'")); |
1464 } | 1440 } |
1465 | 1441 |
1466 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, | 1442 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, |
1467 CodecSupportTest_Mpeg2Ts_LegacyAvc1_codec_ids) { | 1443 CodecSupportTest_Mpeg2Ts_LegacyAvc1_codec_ids) { |
1468 // Old-style avc1/H.264 codec ids that are still being used by some HLS | 1444 // Old-style avc1/H.264 codec ids that are still being used by some HLS |
1469 // streaming apps for backward compatibility. | 1445 // streaming apps for backward compatibility. |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1575 {switches::kEnableNewVp9CodecString, "video/mp4", kNot, kNot}, | 1551 {switches::kEnableNewVp9CodecString, "video/mp4", kNot, kNot}, |
1576 {switches::kEnableHDR, "video/webm", kProbably, kMaybe}, | 1552 {switches::kEnableHDR, "video/webm", kProbably, kMaybe}, |
1577 {switches::kEnableNewVp9CodecString, "video/webm", kProbably, kMaybe}, | 1553 {switches::kEnableNewVp9CodecString, "video/webm", kProbably, kMaybe}, |
1578 }; | 1554 }; |
1579 | 1555 |
1580 INSTANTIATE_TEST_CASE_P(CodecSupportTest_NewVp9String, | 1556 INSTANTIATE_TEST_CASE_P(CodecSupportTest_NewVp9String, |
1581 MediaCanPlayNewVp9TypeTest, | 1557 MediaCanPlayNewVp9TypeTest, |
1582 ::testing::ValuesIn(kNewVp9ParamVariants)); | 1558 ::testing::ValuesIn(kNewVp9ParamVariants)); |
1583 | 1559 |
1584 } // namespace content | 1560 } // namespace content |
OLD | NEW |