1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "build/build_config.h"
6 #include "content/browser/media/media_browsertest.h"
7 #include "content/public/test/browser_test_utils.h"
8 #include "media/base/test_data_util.h"
9 #include "media/media_buildflags.h"
10
11 #if defined(OS_ANDROID)
12 #include "base/android/build_info.h"
13 #endif
14
15 namespace content {
16
17 class MediaColorTest : public MediaBrowserTest {
18 public:
RunColorTest(const std::string & video_file)19 void RunColorTest(const std::string& video_file) {
20 base::FilePath path = media::GetTestDataFilePath("blackwhite.html");
21 std::string final_title =
22 RunTest(GetFileUrlWithQuery(path, video_file), media::kEnded);
23 EXPECT_EQ(media::kEnded, final_title);
24 }
SetUp()25 void SetUp() override {
26 EnablePixelOutput();
27 MediaBrowserTest::SetUp();
28 }
29 };
30
31 // Android doesn't support Theora.
32 #if !defined(OS_ANDROID)
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv420pTheora)33 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pTheora) {
34 RunColorTest("yuv420p.ogv");
35 }
36
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv422pTheora)37 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv422pTheora) {
38 RunColorTest("yuv422p.ogv");
39 }
40
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv444pTheora)41 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv444pTheora) {
42 RunColorTest("yuv444p.ogv");
43 }
44 #endif // !defined(OS_ANDROID)
45
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv420pVp8)46 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pVp8) {
47 RunColorTest("yuv420p.webm");
48 }
49
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv444pVp9)50 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv444pVp9) {
51 RunColorTest("yuv444p.webm");
52 }
53
54 #if BUILDFLAG(USE_PROPRIETARY_CODECS)
55
56 // This test fails on Android: http://crbug.com/938320
57 // It also fails on ChromeOS https://crbug.com/938618
58 #if defined(OS_ANDROID) || defined(OS_CHROMEOS)
59 #define MAYBE_Yuv420pH264 DISABLED_Yuv420pH264
60 #else
61 #define MAYBE_Yuv420pH264 Yuv420pH264
62 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuv420pH264)63 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pH264) {
64 #if defined(OS_ANDROID)
65 // https://crbug.com/907572
66 if (base::android::BuildInfo::GetInstance()->sdk_int() <=
67 base::android::SDK_VERSION_KITKAT) {
68 DVLOG(0) << "Skipping test - Yuv420pH264 is flaky on KitKat devices.";
69 return;
70 }
71 #endif
72 RunColorTest("yuv420p.mp4");
73 }
74
75 // This test fails on Android: http://crbug.com/647818
76 #if defined(OS_ANDROID)
77 #define MAYBE_Yuvj420pH264 DISABLED_Yuvj420pH264
78 #else
79 #define MAYBE_Yuvj420pH264 Yuvj420pH264
80 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuvj420pH264)81 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuvj420pH264) {
82 RunColorTest("yuvj420p.mp4");
83 }
84
85 // This fails on ChromeOS: http://crbug.com/647400,
86 // This fails on Android: http://crbug.com/938320,
87 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
88 #define MAYBE_Yuv420pRec709H264 DISABLED_Yuv420pRec709H264
89 #else
90 #define MAYBE_Yuv420pRec709H264 Yuv420pRec709H264
91 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuv420pRec709H264)92 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pRec709H264) {
93 #if defined(OS_ANDROID)
94 // https://crbug.com/907572
95 if (base::android::BuildInfo::GetInstance()->sdk_int() <=
96 base::android::SDK_VERSION_KITKAT) {
97 DVLOG(0) << "Skipping test - Yuv420pRec709H264 is flaky on KitKat devices.";
98 return;
99 }
100 #endif
101 RunColorTest("yuv420p_rec709.mp4");
102 }
103
104 // Android doesn't support 10bpc.
105 // This test flakes on mac: http://crbug.com/810908
106 #if defined(OS_ANDROID) || defined(OS_MACOSX)
107 #define MAYBE_Yuv420pHighBitDepth DISABLED_Yuv420pHighBitDepth
108 #else
109 #define MAYBE_Yuv420pHighBitDepth Yuv420pHighBitDepth
110 #endif
IN_PROC_BROWSER_TEST_F(MediaColorTest,MAYBE_Yuv420pHighBitDepth)111 IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pHighBitDepth) {
112 RunColorTest("yuv420p_hi10p.mp4");
113 }
114
115 // Android devices usually only support baseline, main and high.
116 #if !defined(OS_ANDROID)
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv422pH264)117 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv422pH264) {
118 RunColorTest("yuv422p.mp4");
119 }
120
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv444pH264)121 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv444pH264) {
122 RunColorTest("yuv444p.mp4");
123 }
124 #endif // !defined(OS_ANDROID)
125
126 #if defined(OS_CHROMEOS)
IN_PROC_BROWSER_TEST_F(MediaColorTest,Yuv420pMpeg4)127 IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pMpeg4) {
128 RunColorTest("yuv420p.avi");
129 }
130 #endif // defined(OS_CHROMEOS)
131 #endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
132
133 } // namespace content
134