1 // Copyright (c) 2012 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.
5 // Regression tests for FFmpeg. Test files can be found in the internal media
6 // test data directory:
8 // svn://svn.chromium.org/chrome-internal/trunk/data/media/
10 // Simply add the custom_dep below to your gclient and sync:
12 // "src/media/test/data/internal":
13 // "svn://svn.chromium.org/chrome-internal/trunk/data/media"
15 // Many of the files here do not cause issues outside of tooling, so you'll need
16 // to run this test under ASAN, TSAN, and Valgrind to ensure that all issues are
19 // Test cases labeled FLAKY may not always pass, but they should never crash or
20 // cause any kind of warnings or errors under tooling.
22 // Frame hashes must be generated with --video-threads=1 for correctness.
25 // Cr47325 will generate an UninitValue error under Valgrind inside of the
26 // MD5 hashing code. The error occurs due to some problematic error
27 // resilence code for H264 inside of FFmpeg. See http://crbug.com/119020
29 // Some OGG files leak ~30 bytes of memory, upstream tracking bug:
30 // https://ffmpeg.org/trac/ffmpeg/ticket/1244
32 // Some OGG files leak hundreds of kilobytes of memory, upstream bug:
33 // https://ffmpeg.org/trac/ffmpeg/ticket/1931
35 #include "media/filters/pipeline_integration_test_base.h"
39 #include "base/bind.h"
40 #include "media/base/test_data_util.h"
44 const char kRegressionTestDataPathPrefix
[] = "internal/";
46 struct RegressionTestData
{
47 RegressionTestData(const char* filename
, PipelineStatus init_status
,
48 PipelineStatus end_status
, const char* video_md5
,
49 const char* audio_md5
)
50 : video_md5(video_md5
),
52 filename(std::string(kRegressionTestDataPathPrefix
) + filename
),
53 init_status(init_status
),
54 end_status(end_status
) {
57 const char* video_md5
;
58 const char* audio_md5
;
60 PipelineStatus init_status
;
61 PipelineStatus end_status
;
64 // Used for tests which just need to run without crashing or tooling errors, but
65 // which may have undefined behavior for hashing, etc.
66 struct FlakyRegressionTestData
{
67 FlakyRegressionTestData(const char* filename
)
68 : filename(std::string(kRegressionTestDataPathPrefix
) + filename
) {
74 class FFmpegRegressionTest
75 : public testing::TestWithParam
<RegressionTestData
>,
76 public PipelineIntegrationTestBase
{
79 class FlakyFFmpegRegressionTest
80 : public testing::TestWithParam
<FlakyRegressionTestData
>,
81 public PipelineIntegrationTestBase
{
84 #define FFMPEG_TEST_CASE(name, fn, init_status, end_status, video_md5, \
86 INSTANTIATE_TEST_CASE_P(name, FFmpegRegressionTest, \
87 testing::Values(RegressionTestData(fn, \
93 #define FLAKY_FFMPEG_TEST_CASE(name, fn) \
94 INSTANTIATE_TEST_CASE_P(FLAKY_##name, FlakyFFmpegRegressionTest, \
95 testing::Values(FlakyRegressionTestData(fn)));
97 // Test cases from issues.
98 FFMPEG_TEST_CASE(Cr47325
, "security/47325.mp4", PIPELINE_OK
, PIPELINE_OK
,
99 "2a7a938c6b5979621cec998f02d9bbb6",
100 "3.61,1.64,-3.24,0.12,1.50,-0.86,");
101 FFMPEG_TEST_CASE(Cr47761
, "crbug47761.ogg", PIPELINE_OK
, PIPELINE_OK
,
103 "8.89,8.55,8.88,8.01,8.23,7.69,");
104 FFMPEG_TEST_CASE(Cr50045
, "crbug50045.mp4", PIPELINE_OK
, PIPELINE_OK
,
105 "c345e9ef9ebfc6bfbcbe3f0ddc3125ba",
106 "2.72,-6.27,-6.11,-3.17,-5.58,1.26,");
107 FFMPEG_TEST_CASE(Cr62127
, "crbug62127.webm", PIPELINE_OK
,
108 PIPELINE_OK
, "a064b2776fc5aef3e9cba47967a75db9",
110 FFMPEG_TEST_CASE(Cr93620
, "security/93620.ogg", PIPELINE_OK
, PIPELINE_OK
,
112 "-10.55,-10.10,-10.42,-10.35,-10.29,-10.72,");
113 FFMPEG_TEST_CASE(Cr100492
, "security/100492.webm", DECODER_ERROR_NOT_SUPPORTED
,
114 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
115 FFMPEG_TEST_CASE(Cr100543
, "security/100543.webm", PIPELINE_OK
, PIPELINE_OK
,
116 "c16691cc9178db3adbf7e562cadcd6e6",
117 "1211.73,304.89,1311.54,371.34,1283.06,299.63,");
118 FFMPEG_TEST_CASE(Cr101458
, "security/101458.webm", DECODER_ERROR_NOT_SUPPORTED
,
119 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
120 FFMPEG_TEST_CASE(Cr108416
, "security/108416.webm", PIPELINE_OK
, PIPELINE_OK
,
121 "5cb3a934795cd552753dec7687928291",
122 "-17.87,-37.20,-23.33,45.57,8.13,-9.92,");
123 FFMPEG_TEST_CASE(Cr110849
, "security/110849.mkv",
124 DEMUXER_ERROR_COULD_NOT_OPEN
,
125 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
126 kNullVideoHash
, kNullAudioHash
);
127 FFMPEG_TEST_CASE(Cr112384
, "security/112384.webm",
128 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
129 kNullVideoHash
, kNullAudioHash
);
130 FFMPEG_TEST_CASE(Cr117912
, "security/117912.webm", DEMUXER_ERROR_COULD_NOT_OPEN
,
131 DEMUXER_ERROR_COULD_NOT_OPEN
, kNullVideoHash
, kNullAudioHash
);
132 FFMPEG_TEST_CASE(Cr123481
, "security/123481.ogv", PIPELINE_OK
,
133 PIPELINE_OK
, "e6dd853fcbd746c8bb2ab2b8fc376fc7",
134 "1.28,-0.32,-0.81,0.08,1.66,0.89,");
135 FFMPEG_TEST_CASE(Cr132779
, "security/132779.webm",
136 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
137 kNullVideoHash
, kNullAudioHash
);
138 FFMPEG_TEST_CASE(Cr140165
, "security/140165.ogg", PIPELINE_ERROR_DECODE
,
139 PIPELINE_ERROR_DECODE
, kNullVideoHash
, kNullAudioHash
);
140 FFMPEG_TEST_CASE(Cr140647
, "security/140647.ogv", DEMUXER_ERROR_COULD_NOT_OPEN
,
141 DEMUXER_ERROR_COULD_NOT_OPEN
, kNullVideoHash
, kNullAudioHash
);
142 FFMPEG_TEST_CASE(Cr142738
, "crbug142738.ogg", PIPELINE_OK
, PIPELINE_OK
,
144 "-1.22,0.45,1.79,1.80,-0.30,-1.21,");
145 FFMPEG_TEST_CASE(Cr152691
, "security/152691.mp3", PIPELINE_ERROR_DECODE
,
146 PIPELINE_ERROR_DECODE
, kNullVideoHash
, kNullAudioHash
);
147 FFMPEG_TEST_CASE(Cr161639
, "security/161639.m4a", PIPELINE_ERROR_DECODE
,
148 PIPELINE_ERROR_DECODE
, kNullVideoHash
, kNullAudioHash
);
149 FFMPEG_TEST_CASE(Cr222754
, "security/222754.mp4", PIPELINE_ERROR_DECODE
,
150 PIPELINE_ERROR_DECODE
, kNullVideoHash
, kNullAudioHash
);
151 FFMPEG_TEST_CASE(Cr234630a
, "security/234630a.mov", PIPELINE_OK
,
152 PIPELINE_OK
, kNullVideoHash
,
153 "-15.52,-18.90,-15.33,-16.68,-14.41,-15.89,");
154 FFMPEG_TEST_CASE(Cr234630b
, "security/234630b.mov", PIPELINE_ERROR_DECODE
,
155 PIPELINE_ERROR_DECODE
, kNullVideoHash
, kNullAudioHash
);
156 FFMPEG_TEST_CASE(Cr242786
, "security/242786.webm", PIPELINE_OK
,
157 PIPELINE_OK
, kNullVideoHash
,
158 "-1.72,-0.83,0.84,1.70,1.23,-0.53,");
159 // Test for out-of-bounds access with slightly corrupt file (detection logic
160 // thinks it's a MONO file, but actually contains STEREO audio).
161 FFMPEG_TEST_CASE(Cr275590
, "security/275590.m4a",
162 DECODER_ERROR_NOT_SUPPORTED
, DEMUXER_ERROR_COULD_NOT_OPEN
,
163 kNullVideoHash
, kNullAudioHash
);
165 // General MP4 test cases.
166 FFMPEG_TEST_CASE(MP4_0
, "security/aac.10419.mp4", DEMUXER_ERROR_COULD_NOT_OPEN
,
167 DEMUXER_ERROR_COULD_NOT_OPEN
, kNullVideoHash
, kNullAudioHash
);
168 FFMPEG_TEST_CASE(MP4_1
, "security/clockh264aac_200021889.mp4",
169 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
170 kNullVideoHash
, kNullAudioHash
);
171 FFMPEG_TEST_CASE(MP4_2
, "security/clockh264aac_200701257.mp4", PIPELINE_OK
,
172 PIPELINE_OK
, kNullVideoHash
, kNullAudioHash
);
173 FFMPEG_TEST_CASE(MP4_5
, "security/clockh264aac_3022500.mp4",
174 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
175 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
176 kNullVideoHash
, kNullAudioHash
);
177 FFMPEG_TEST_CASE(MP4_6
, "security/clockh264aac_344289.mp4", PIPELINE_OK
,
178 PIPELINE_OK
, kNullVideoHash
, kNullAudioHash
);
179 FFMPEG_TEST_CASE(MP4_7
, "security/clockh264mp3_187697.mp4",
180 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
181 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
182 kNullVideoHash
, kNullAudioHash
);
183 FFMPEG_TEST_CASE(MP4_8
, "security/h264.705767.mp4",
184 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
185 kNullVideoHash
, kNullAudioHash
);
186 FFMPEG_TEST_CASE(MP4_9
, "security/smclockmp4aac_1_0.mp4",
187 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
188 kNullVideoHash
, kNullAudioHash
);
189 FFMPEG_TEST_CASE(MP4_16
, "security/looping2.mov",
190 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
191 kNullVideoHash
, kNullAudioHash
);
193 // General OGV test cases.
194 FFMPEG_TEST_CASE(OGV_1
, "security/out.163.ogv", DECODER_ERROR_NOT_SUPPORTED
,
195 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
196 FFMPEG_TEST_CASE(OGV_2
, "security/out.391.ogv", DECODER_ERROR_NOT_SUPPORTED
,
197 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
198 FFMPEG_TEST_CASE(OGV_5
, "security/smclocktheora_1_0.ogv",
199 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
200 kNullVideoHash
, kNullAudioHash
);
201 FFMPEG_TEST_CASE(OGV_7
, "security/smclocktheora_1_102.ogv",
202 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
203 kNullVideoHash
, kNullAudioHash
);
204 FFMPEG_TEST_CASE(OGV_8
, "security/smclocktheora_1_104.ogv",
205 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
206 kNullVideoHash
, kNullAudioHash
);
207 FFMPEG_TEST_CASE(OGV_9
, "security/smclocktheora_1_110.ogv",
208 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
209 kNullVideoHash
, kNullAudioHash
);
210 FFMPEG_TEST_CASE(OGV_10
, "security/smclocktheora_1_179.ogv",
211 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
212 kNullVideoHash
, kNullAudioHash
);
213 FFMPEG_TEST_CASE(OGV_11
, "security/smclocktheora_1_20.ogv",
214 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
215 kNullVideoHash
, kNullAudioHash
);
216 FFMPEG_TEST_CASE(OGV_12
, "security/smclocktheora_1_723.ogv",
217 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
218 kNullVideoHash
, kNullAudioHash
);
219 FFMPEG_TEST_CASE(OGV_14
, "security/smclocktheora_2_10405.ogv",
220 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
221 kNullVideoHash
, kNullAudioHash
);
222 FFMPEG_TEST_CASE(OGV_15
, "security/smclocktheora_2_10619.ogv",
223 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
224 kNullVideoHash
, kNullAudioHash
);
225 FFMPEG_TEST_CASE(OGV_16
, "security/smclocktheora_2_1075.ogv",
226 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
227 kNullVideoHash
, kNullAudioHash
);
228 FFMPEG_TEST_CASE(OGV_18
, "security/wav.711.ogv", DECODER_ERROR_NOT_SUPPORTED
,
229 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
230 FFMPEG_TEST_CASE(OGV_19
, "security/null1.ogv", DECODER_ERROR_NOT_SUPPORTED
,
231 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
232 FFMPEG_TEST_CASE(OGV_20
, "security/null2.ogv", DECODER_ERROR_NOT_SUPPORTED
,
233 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
234 FFMPEG_TEST_CASE(OGV_21
, "security/assert1.ogv", DECODER_ERROR_NOT_SUPPORTED
,
235 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
236 FFMPEG_TEST_CASE(OGV_22
, "security/assert2.ogv", DECODER_ERROR_NOT_SUPPORTED
,
237 DECODER_ERROR_NOT_SUPPORTED
, kNullVideoHash
, kNullAudioHash
);
239 // General WebM test cases.
240 FFMPEG_TEST_CASE(WEBM_1
, "security/no-bug.webm", PIPELINE_OK
, PIPELINE_OK
,
241 "39e92700cbb77478fd63f49db855e7e5", kNullAudioHash
);
242 FFMPEG_TEST_CASE(WEBM_3
, "security/out.webm.139771.2965",
243 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
244 kNullVideoHash
, kNullAudioHash
);
245 FFMPEG_TEST_CASE(WEBM_4
, "security/out.webm.68798.1929",
246 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
247 kNullVideoHash
, kNullAudioHash
);
248 FFMPEG_TEST_CASE(WEBM_5
, "frame_size_change.webm", PIPELINE_OK
,
249 PIPELINE_OK
, "d8fcf2896b7400a2261bac9e9ea930f8",
252 // Audio Functional Tests
253 FFMPEG_TEST_CASE(AUDIO_GAMING_0
, "gaming/a_220_00.mp3", PIPELINE_OK
,
254 PIPELINE_OK
, kNullVideoHash
,
255 "0.36,1.25,2.98,4.29,4.19,2.76,");
256 FFMPEG_TEST_CASE(AUDIO_GAMING_1
, "gaming/a_220_00_v2.ogg", PIPELINE_OK
,
257 PIPELINE_OK
, kNullVideoHash
,
258 "2.17,3.31,5.15,6.33,5.97,4.35,");
259 FFMPEG_TEST_CASE(AUDIO_GAMING_2
, "gaming/ai_laser1.ogg", PIPELINE_OK
,
260 PIPELINE_OK
, kNullVideoHash
,
261 "7.70,10.81,13.19,10.07,7.39,7.56,");
262 FFMPEG_TEST_CASE(AUDIO_GAMING_3
, "gaming/ai_laser2.ogg", PIPELINE_OK
,
263 PIPELINE_OK
, kNullVideoHash
,
264 "5.99,8.04,9.71,8.69,7.81,7.52,");
265 FFMPEG_TEST_CASE(AUDIO_GAMING_4
, "gaming/ai_laser3.ogg", PIPELINE_OK
,
266 PIPELINE_OK
, kNullVideoHash
,
267 "-0.32,1.44,3.75,5.88,6.32,3.22,");
268 FFMPEG_TEST_CASE(AUDIO_GAMING_5
, "gaming/ai_laser4.ogg", PIPELINE_OK
,
269 PIPELINE_OK
, kNullVideoHash
,
270 "4.75,4.16,2.21,3.01,5.51,6.11,");
271 FFMPEG_TEST_CASE(AUDIO_GAMING_6
, "gaming/ai_laser5.ogg", PIPELINE_OK
,
272 PIPELINE_OK
, kNullVideoHash
,
273 "6.04,7.46,8.78,7.32,4.16,3.97,");
274 FFMPEG_TEST_CASE(AUDIO_GAMING_7
, "gaming/footstep1.ogg", PIPELINE_OK
,
275 PIPELINE_OK
, kNullVideoHash
,
276 "-0.50,0.29,2.35,4.79,5.14,2.24,");
277 FFMPEG_TEST_CASE(AUDIO_GAMING_8
, "gaming/footstep3.ogg", PIPELINE_OK
,
278 PIPELINE_OK
, kNullVideoHash
,
279 "-2.87,-3.05,-4.10,-3.20,-2.20,-2.20,");
280 FFMPEG_TEST_CASE(AUDIO_GAMING_9
, "gaming/footstep4.ogg", PIPELINE_OK
,
281 PIPELINE_OK
, kNullVideoHash
,
282 "10.35,10.74,11.60,12.83,12.69,10.67,");
283 FFMPEG_TEST_CASE(AUDIO_GAMING_10
, "gaming/laser1.ogg", PIPELINE_OK
,
284 PIPELINE_OK
, kNullVideoHash
,
285 "-9.48,-12.94,-1.75,7.66,5.61,-0.58,");
286 FFMPEG_TEST_CASE(AUDIO_GAMING_11
, "gaming/laser2.ogg", PIPELINE_OK
,
287 PIPELINE_OK
, kNullVideoHash
,
288 "-7.53,-6.28,3.37,0.73,-5.83,-4.70,");
289 FFMPEG_TEST_CASE(AUDIO_GAMING_12
, "gaming/laser3.ogg", PIPELINE_OK
,
290 PIPELINE_OK
, kNullVideoHash
,
291 "-13.62,-6.55,2.52,-10.10,-10.68,-5.43,");
292 FFMPEG_TEST_CASE(AUDIO_GAMING_13
, "gaming/leg1.ogg", PIPELINE_OK
,
293 PIPELINE_OK
, kNullVideoHash
,
294 "5.62,5.79,5.81,5.60,6.18,6.15,");
295 FFMPEG_TEST_CASE(AUDIO_GAMING_14
, "gaming/leg2.ogg", PIPELINE_OK
,
296 PIPELINE_OK
, kNullVideoHash
,
297 "-0.88,1.32,2.74,3.07,0.88,-0.03,");
298 FFMPEG_TEST_CASE(AUDIO_GAMING_15
, "gaming/leg3.ogg", PIPELINE_OK
,
299 PIPELINE_OK
, kNullVideoHash
,
300 "17.77,18.59,19.57,18.84,17.62,17.22,");
301 FFMPEG_TEST_CASE(AUDIO_GAMING_16
, "gaming/lock_on.ogg", PIPELINE_OK
,
302 PIPELINE_OK
, kNullVideoHash
,
303 "3.08,-4.33,-5.04,-0.24,1.83,5.16,");
304 FFMPEG_TEST_CASE(AUDIO_GAMING_17
, "gaming/enemy_lock_on.ogg",
305 PIPELINE_OK
, PIPELINE_OK
, kNullVideoHash
,
306 "-2.24,-1.00,-2.75,-0.87,1.11,-0.58,");
307 FFMPEG_TEST_CASE(AUDIO_GAMING_18
, "gaming/rocket_launcher.mp3",
308 PIPELINE_OK
, PIPELINE_OK
, kNullVideoHash
,
309 "-3.08,0.18,2.49,1.98,-2.20,-4.74,");
311 // Allocate gigabytes of memory, likely can't be run on 32bit machines.
312 FFMPEG_TEST_CASE(BIG_MEM_1
, "security/bigmem1.mov",
313 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
314 kNullVideoHash
, kNullAudioHash
);
315 FFMPEG_TEST_CASE(BIG_MEM_2
, "security/looping1.mov",
316 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
317 kNullVideoHash
, kNullAudioHash
);
318 FFMPEG_TEST_CASE(BIG_MEM_5
, "security/looping5.mov",
319 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
320 kNullVideoHash
, kNullAudioHash
);
321 FLAKY_FFMPEG_TEST_CASE(BIG_MEM_3
, "security/looping3.mov");
322 FLAKY_FFMPEG_TEST_CASE(BIG_MEM_4
, "security/looping4.mov");
324 // Flaky under threading or for other reasons. Per rbultje, most of these will
325 // never be reliable since FFmpeg does not guarantee consistency in error cases.
326 // We only really care that these don't cause crashes or errors under tooling.
327 FLAKY_FFMPEG_TEST_CASE(Cr99652
, "security/99652.webm");
328 FLAKY_FFMPEG_TEST_CASE(Cr100464
, "security/100464.webm");
329 FLAKY_FFMPEG_TEST_CASE(Cr111342
, "security/111342.ogm");
330 FLAKY_FFMPEG_TEST_CASE(Cr368980
, "security/368980.mp4");
331 FLAKY_FFMPEG_TEST_CASE(OGV_0
, "security/big_dims.ogv");
332 FLAKY_FFMPEG_TEST_CASE(OGV_3
, "security/smclock_1_0.ogv");
333 FLAKY_FFMPEG_TEST_CASE(OGV_4
, "security/smclock.ogv.1.0.ogv");
334 FLAKY_FFMPEG_TEST_CASE(OGV_6
, "security/smclocktheora_1_10000.ogv");
335 FLAKY_FFMPEG_TEST_CASE(OGV_13
, "security/smclocktheora_1_790.ogv");
336 FLAKY_FFMPEG_TEST_CASE(MP4_3
, "security/clockh264aac_300413969.mp4");
337 FLAKY_FFMPEG_TEST_CASE(MP4_4
, "security/clockh264aac_301350139.mp4");
338 FLAKY_FFMPEG_TEST_CASE(MP4_12
, "security/assert1.mov");
339 // Not really flaky, but can't pass the seek test.
340 FLAKY_FFMPEG_TEST_CASE(MP4_10
, "security/null1.m4a");
342 // TODO(wolenetz/dalecurtis): The following have flaky audio hash result.
343 // See http://crbug.com/237371
344 FLAKY_FFMPEG_TEST_CASE(Cr112976
, "security/112976.ogg");
345 FLAKY_FFMPEG_TEST_CASE(MKV_0
, "security/nested_tags_lang.mka.627.628");
346 FLAKY_FFMPEG_TEST_CASE(MKV_1
, "security/nested_tags_lang.mka.667.628");
347 FLAKY_FFMPEG_TEST_CASE(MP4_11
, "security/null1.mp4");
349 // TODO(wolenetz/dalecurtis): The following have flaky init status: on mac
350 // ia32 Chrome, observed PIPELINE_OK instead of DECODER_ERROR_NOT_SUPPORTED.
351 FLAKY_FFMPEG_TEST_CASE(Cr112670
, "security/112670.mp4");
352 FLAKY_FFMPEG_TEST_CASE(OGV_17
, "security/vorbis.482086.ogv");
354 // TODO(wolenetz/dalecurtis): The following have flaky init status: on mac
355 // ia32 Chrome, observed DUMUXER_ERROR_NO_SUPPORTED_STREAMS instead of
356 // DECODER_ERROR_NOT_SUPPORTED.
357 FLAKY_FFMPEG_TEST_CASE(Cr116927
, "security/116927.ogv");
358 FLAKY_FFMPEG_TEST_CASE(WEBM_2
, "security/uninitialize.webm");
360 // Videos with massive gaps between frame timestamps that result in long hangs
361 // with our pipeline. Should be uncommented when we support clockless playback.
362 // FFMPEG_TEST_CASE(WEBM_0, "security/memcpy.webm", PIPELINE_OK, PIPELINE_OK,
363 // kNullVideoHash, kNullAudioHash);
364 // FFMPEG_TEST_CASE(MP4_17, "security/assert2.mov", PIPELINE_OK, PIPELINE_OK,
365 // kNullVideoHash, kNullAudioHash);
366 // FFMPEG_TEST_CASE(OGV_23, "security/assert2.ogv", PIPELINE_OK, PIPELINE_OK,
367 // kNullVideoHash, kNullAudioHash);
369 TEST_P(FFmpegRegressionTest
, BasicPlayback
) {
370 if (GetParam().init_status
== PIPELINE_OK
) {
371 ASSERT_TRUE(Start(GetTestDataFilePath(GetParam().filename
),
372 GetParam().init_status
, kHashed
));
374 ASSERT_EQ(WaitUntilEndedOrError(), GetParam().end_status
);
375 EXPECT_EQ(GetParam().video_md5
, GetVideoHash());
376 EXPECT_EQ(GetParam().audio_md5
, GetAudioHash());
378 // Check for ended if the pipeline is expected to finish okay.
379 if (GetParam().end_status
== PIPELINE_OK
) {
382 // Tack a seek on the end to catch any seeking issues.
383 Seek(base::TimeDelta::FromMilliseconds(0));
386 ASSERT_FALSE(Start(GetTestDataFilePath(GetParam().filename
),
387 GetParam().init_status
, kHashed
));
388 EXPECT_EQ(GetParam().video_md5
, GetVideoHash());
389 EXPECT_EQ(GetParam().audio_md5
, GetAudioHash());
393 TEST_P(FlakyFFmpegRegressionTest
, BasicPlayback
) {
394 if (Start(GetTestDataFilePath(GetParam().filename
))) {
396 WaitUntilEndedOrError();