| 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 |