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. Security test files can be found in the
6 // internal media test data directory:
8 // svn://svn.chromium.org/chrome-internal/trunk/data/media/security/
10 // Simply add the custom_dep below to your gclient and sync:
12 // "src/media/test/data/security":
13 // "svn://chrome-svn/chrome-internal/trunk/data/media/security"
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 // FLAKY_OGV_0 may run out of memory under ASAN on IA32 Linux/Mac.
31 // Some OGG files leak ~30 bytes of memory, upstream tracking bug:
32 // https://ffmpeg.org/trac/ffmpeg/ticket/1244
35 #include "media/filters/pipeline_integration_test_base.h"
37 #include "base/bind.h"
38 #include "media/base/test_data_util.h"
42 struct RegressionTestData
{
43 RegressionTestData(const char* filename
, PipelineStatus init_status
,
44 PipelineStatus end_status
, const char* video_md5
,
45 const char* audio_md5
)
46 : video_md5(video_md5
),
49 init_status(init_status
),
50 end_status(end_status
) {
53 const char* video_md5
;
54 const char* audio_md5
;
56 PipelineStatus init_status
;
57 PipelineStatus end_status
;
60 // Used for tests which just need to run without crashing or tooling errors, but
61 // which may have undefined behavior for hashing, etc.
62 struct FlakyRegressionTestData
{
63 FlakyRegressionTestData(const char* filename
)
64 : filename(filename
) {
70 class FFmpegRegressionTest
71 : public testing::TestWithParam
<RegressionTestData
>,
72 public PipelineIntegrationTestBase
{
75 class FlakyFFmpegRegressionTest
76 : public testing::TestWithParam
<FlakyRegressionTestData
>,
77 public PipelineIntegrationTestBase
{
80 #define FFMPEG_TEST_CASE(name, fn, init_status, end_status, video_md5, \
82 INSTANTIATE_TEST_CASE_P(name, FFmpegRegressionTest, \
83 testing::Values(RegressionTestData(fn, \
89 #define FLAKY_FFMPEG_TEST_CASE(name, fn) \
90 INSTANTIATE_TEST_CASE_P(FLAKY_##name, FlakyFFmpegRegressionTest, \
91 testing::Values(FlakyRegressionTestData(fn)));
93 // Test cases from issues.
94 FFMPEG_TEST_CASE(Cr47325
, "security/47325.mp4", PIPELINE_OK
, PIPELINE_OK
,
95 "2a7a938c6b5979621cec998f02d9bbb6",
96 "efbc63a850c9f8f51942f6a6029eb00f");
97 FFMPEG_TEST_CASE(Cr47761
, "content/crbug47761.ogg", PIPELINE_OK
, PIPELINE_OK
,
99 "f45b9d7556f39dd811700ec72cb71483");
100 FFMPEG_TEST_CASE(Cr50045
, "content/crbug50045.mp4", PIPELINE_OK
, PIPELINE_OK
,
101 "c345e9ef9ebfc6bfbcbe3f0ddc3125ba",
102 "39cc70f744944eb01da947b8cf6fcd58");
103 FFMPEG_TEST_CASE(Cr62127
, "content/crbug62127.webm",
104 PIPELINE_OK
, PIPELINE_OK
,
105 "a064b2776fc5aef3e9cba47967a75db9", kNullHash
);
106 FFMPEG_TEST_CASE(Cr93620
, "security/93620.ogg", PIPELINE_OK
, PIPELINE_OK
,
108 "0cff252cd46867d26c42a96e6a2e2376");
109 FFMPEG_TEST_CASE(Cr100492
, "security/100492.webm", DECODER_ERROR_NOT_SUPPORTED
,
110 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
111 FFMPEG_TEST_CASE(Cr100543
, "security/100543.webm", PIPELINE_OK
, PIPELINE_OK
,
112 "c16691cc9178db3adbf7e562cadcd6e6",
113 "816d9a772a449bc29f65f58244ee04c9");
114 FFMPEG_TEST_CASE(Cr101458
, "security/101458.webm", DECODER_ERROR_NOT_SUPPORTED
,
115 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
116 FFMPEG_TEST_CASE(Cr108416
, "security/108416.webm", PIPELINE_OK
, PIPELINE_OK
,
117 "5cb3a934795cd552753dec7687928291",
118 "3e576c21f83f3c00719dbe62998d71cb");
119 FFMPEG_TEST_CASE(Cr110849
, "security/110849.mkv",
120 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
121 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
, kNullHash
, kNullHash
);
122 FFMPEG_TEST_CASE(Cr112384
, "security/112384.webm",
123 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
124 kNullHash
, kNullHash
);
125 FFMPEG_TEST_CASE(Cr112670
, "security/112670.mp4", PIPELINE_ERROR_DECODE
,
126 PIPELINE_ERROR_DECODE
, kNullHash
,
127 "59adb24ef3cdbe0297f05b395827453f");
128 FFMPEG_TEST_CASE(Cr112976
, "security/112976.ogg", PIPELINE_OK
,
129 PIPELINE_ERROR_DECODE
, kNullHash
,
130 "ef79f7c5805561908805eb0bb7097bb4");
131 FFMPEG_TEST_CASE(Cr116927
, "security/116927.ogv", PIPELINE_ERROR_DECODE
,
132 PIPELINE_ERROR_DECODE
, kNullHash
, kNullHash
);
133 FFMPEG_TEST_CASE(Cr117912
, "security/117912.webm", DEMUXER_ERROR_COULD_NOT_OPEN
,
134 DEMUXER_ERROR_COULD_NOT_OPEN
, kNullHash
, kNullHash
);
135 FFMPEG_TEST_CASE(Cr123481
, "security/123481.ogv", PIPELINE_OK
,
136 PIPELINE_OK
, "e6dd853fcbd746c8bb2ab2b8fc376fc7",
137 "c96a166a09061ca94202903d7824cf04");
138 FFMPEG_TEST_CASE(Cr132779
, "security/132779.webm",
139 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
140 kNullHash
, kNullHash
);
141 FFMPEG_TEST_CASE(Cr140165
, "security/140165.ogg", PIPELINE_ERROR_DECODE
,
142 PIPELINE_ERROR_DECODE
, kNullHash
,
143 "bd42757e42bdada18cb9441ee4ef8313");
144 FFMPEG_TEST_CASE(Cr140647
, "security/140647.ogv",
145 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
146 kNullHash
, kNullHash
);
147 FFMPEG_TEST_CASE(Cr142738
, "content/crbug142738.ogg", PIPELINE_OK
, PIPELINE_OK
,
149 "03a9591e5b596eb848feeafd7693f371");
150 FFMPEG_TEST_CASE(Cr152691
, "security/152691.mp3", PIPELINE_ERROR_DECODE
,
151 PIPELINE_ERROR_DECODE
, kNullHash
,
152 "59adb24ef3cdbe0297f05b395827453f");
154 // General MKV test cases.
155 FFMPEG_TEST_CASE(MKV_0
, "security/nested_tags_lang.mka.627.628", PIPELINE_OK
,
156 PIPELINE_ERROR_DECODE
, kNullHash
,
157 "7d1d74b9801002d983e7df3d52dd6db6");
158 FFMPEG_TEST_CASE(MKV_1
, "security/nested_tags_lang.mka.667.628", PIPELINE_OK
,
159 PIPELINE_ERROR_DECODE
, kNullHash
,
160 "7d04ad131b4b07e04406159a17537a54");
162 // General MP4 test cases.
163 FFMPEG_TEST_CASE(MP4_0
, "security/aac.10419.mp4", PIPELINE_OK
, PIPELINE_OK
,
164 kNullHash
, kNullHash
);
165 FFMPEG_TEST_CASE(MP4_1
, "security/clockh264aac_200021889.mp4",
166 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
167 kNullHash
, kNullHash
);
168 FFMPEG_TEST_CASE(MP4_2
, "security/clockh264aac_200701257.mp4", PIPELINE_OK
,
169 PIPELINE_OK
, kNullHash
, "d4fea8297ca1c5ad7bbcd858864f66d9");
170 FFMPEG_TEST_CASE(MP4_5
, "security/clockh264aac_3022500.mp4",
171 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
172 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
, kNullHash
, kNullHash
);
173 FFMPEG_TEST_CASE(MP4_6
, "security/clockh264aac_344289.mp4", PIPELINE_OK
,
174 PIPELINE_OK
, kNullHash
, kNullHash
);
175 FFMPEG_TEST_CASE(MP4_7
, "security/clockh264mp3_187697.mp4",
176 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
177 DEMUXER_ERROR_NO_SUPPORTED_STREAMS
,
178 kNullHash
, kNullHash
);
179 FFMPEG_TEST_CASE(MP4_8
, "security/h264.705767.mp4",
180 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
181 kNullHash
, kNullHash
);
182 FFMPEG_TEST_CASE(MP4_9
, "security/smclockmp4aac_1_0.mp4",
183 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
184 kNullHash
, kNullHash
);
185 FFMPEG_TEST_CASE(MP4_11
, "security/null1.mp4", PIPELINE_OK
, PIPELINE_OK
,
186 kNullHash
, "d30daffed220266a133b27e00b892558");
187 FFMPEG_TEST_CASE(MP4_16
, "security/looping2.mov",
188 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
189 kNullHash
, kNullHash
);
191 // General OGV test cases.
192 FFMPEG_TEST_CASE(OGV_1
, "security/out.163.ogv", DECODER_ERROR_NOT_SUPPORTED
,
193 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
194 FFMPEG_TEST_CASE(OGV_2
, "security/out.391.ogv", DECODER_ERROR_NOT_SUPPORTED
,
195 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
196 FFMPEG_TEST_CASE(OGV_5
, "security/smclocktheora_1_0.ogv",
197 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
198 kNullHash
, kNullHash
);
199 FFMPEG_TEST_CASE(OGV_7
, "security/smclocktheora_1_102.ogv",
200 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
201 kNullHash
, kNullHash
);
202 FFMPEG_TEST_CASE(OGV_8
, "security/smclocktheora_1_104.ogv",
203 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
204 kNullHash
, kNullHash
);
205 FFMPEG_TEST_CASE(OGV_9
, "security/smclocktheora_1_110.ogv",
206 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
207 kNullHash
, kNullHash
);
208 FFMPEG_TEST_CASE(OGV_10
, "security/smclocktheora_1_179.ogv",
209 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
210 kNullHash
, kNullHash
);
211 FFMPEG_TEST_CASE(OGV_11
, "security/smclocktheora_1_20.ogv",
212 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
213 kNullHash
, kNullHash
);
214 FFMPEG_TEST_CASE(OGV_12
, "security/smclocktheora_1_723.ogv",
215 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
216 kNullHash
, kNullHash
);
217 FFMPEG_TEST_CASE(OGV_14
, "security/smclocktheora_2_10405.ogv",
218 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
219 kNullHash
, kNullHash
);
220 FFMPEG_TEST_CASE(OGV_15
, "security/smclocktheora_2_10619.ogv",
221 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
222 kNullHash
, kNullHash
);
223 FFMPEG_TEST_CASE(OGV_16
, "security/smclocktheora_2_1075.ogv",
224 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
225 kNullHash
, kNullHash
);
226 FFMPEG_TEST_CASE(OGV_17
, "security/vorbis.482086.ogv",
227 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
228 kNullHash
, kNullHash
);
229 FFMPEG_TEST_CASE(OGV_18
, "security/wav.711.ogv", DECODER_ERROR_NOT_SUPPORTED
,
230 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
231 FFMPEG_TEST_CASE(OGV_19
, "security/null1.ogv", DECODER_ERROR_NOT_SUPPORTED
,
232 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
233 FFMPEG_TEST_CASE(OGV_20
, "security/null2.ogv", DECODER_ERROR_NOT_SUPPORTED
,
234 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
235 FFMPEG_TEST_CASE(OGV_21
, "security/assert1.ogv", DECODER_ERROR_NOT_SUPPORTED
,
236 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
237 FFMPEG_TEST_CASE(OGV_22
, "security/assert2.ogv", DECODER_ERROR_NOT_SUPPORTED
,
238 DECODER_ERROR_NOT_SUPPORTED
, kNullHash
, kNullHash
);
240 // General WebM test cases.
241 FFMPEG_TEST_CASE(WEBM_1
, "security/no-bug.webm", PIPELINE_OK
, PIPELINE_OK
,
242 "39e92700cbb77478fd63f49db855e7e5", kNullHash
);
243 FFMPEG_TEST_CASE(WEBM_2
, "security/uninitialize.webm", PIPELINE_ERROR_DECODE
,
244 PIPELINE_ERROR_DECODE
, kNullHash
, kNullHash
);
245 FFMPEG_TEST_CASE(WEBM_3
, "security/out.webm.139771.2965",
246 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
247 kNullHash
, kNullHash
);
248 FFMPEG_TEST_CASE(WEBM_4
, "security/out.webm.68798.1929",
249 DECODER_ERROR_NOT_SUPPORTED
, DECODER_ERROR_NOT_SUPPORTED
,
250 kNullHash
, kNullHash
);
251 FFMPEG_TEST_CASE(WEBM_5
, "content/frame_size_change.webm", PIPELINE_OK
,
252 PIPELINE_OK
, "d8fcf2896b7400a2261bac9e9ea930f8", kNullHash
);
254 // Audio Functional Tests
255 FFMPEG_TEST_CASE(AUDIO_GAMING_0
, "content/gaming/a_220_00.mp3", PIPELINE_OK
,
256 PIPELINE_OK
, kNullHash
, "1693d9a1e498b13c2a7fb8e7e62db880");
257 FFMPEG_TEST_CASE(AUDIO_GAMING_1
, "content/gaming/a_220_00_v2.ogg", PIPELINE_OK
,
258 PIPELINE_OK
, kNullHash
, "2fa0e9fca48759a7de1c22418fba7ea0");
259 FFMPEG_TEST_CASE(AUDIO_GAMING_2
, "content/gaming/ai_laser1.ogg", PIPELINE_OK
,
260 PIPELINE_OK
, kNullHash
, "d4f331b0f7f04e94cd70f037a1091c2b");
261 FFMPEG_TEST_CASE(AUDIO_GAMING_3
, "content/gaming/ai_laser2.ogg", PIPELINE_OK
,
262 PIPELINE_OK
, kNullHash
, "7b0eccb651e5572711f9c8826cc14c3c");
263 FFMPEG_TEST_CASE(AUDIO_GAMING_4
, "content/gaming/ai_laser3.ogg", PIPELINE_OK
,
264 PIPELINE_OK
, kNullHash
, "cd977a2dd4fa570f1a7392fc9948f184");
265 FFMPEG_TEST_CASE(AUDIO_GAMING_5
, "content/gaming/ai_laser4.ogg", PIPELINE_OK
,
266 PIPELINE_OK
, kNullHash
, "155caa85c878abae43428f424cdc8848");
267 FFMPEG_TEST_CASE(AUDIO_GAMING_6
, "content/gaming/ai_laser5.ogg", PIPELINE_OK
,
268 PIPELINE_OK
, kNullHash
, "c0f7768ac3c72aaf26ac7b6070d2392a");
269 FFMPEG_TEST_CASE(AUDIO_GAMING_7
, "content/gaming/footstep1.ogg", PIPELINE_OK
,
270 PIPELINE_OK
, kNullHash
, "46fab3db625f0f9b655b9affbb1fff25");
271 FFMPEG_TEST_CASE(AUDIO_GAMING_8
, "content/gaming/footstep3.ogg", PIPELINE_OK
,
272 PIPELINE_OK
, kNullHash
, "38b84b04eb3f1993eb97b5d46fa2a444");
273 FFMPEG_TEST_CASE(AUDIO_GAMING_9
, "content/gaming/footstep4.ogg", PIPELINE_OK
,
274 PIPELINE_OK
, kNullHash
, "7a3927c3026fa96562b6c19950df0be0");
275 FFMPEG_TEST_CASE(AUDIO_GAMING_10
, "content/gaming/laser1.ogg", PIPELINE_OK
,
276 PIPELINE_OK
, kNullHash
, "d2750f18ffce52f3763daba52117b66b");
277 FFMPEG_TEST_CASE(AUDIO_GAMING_11
, "content/gaming/laser2.ogg", PIPELINE_OK
,
278 PIPELINE_OK
, kNullHash
, "bb398db9b2873e03a06d486d0a6f6d3a");
279 FFMPEG_TEST_CASE(AUDIO_GAMING_12
, "content/gaming/laser3.ogg", PIPELINE_OK
,
280 PIPELINE_OK
, kNullHash
, "deb996d817e155ecd56766749d856e74");
281 FFMPEG_TEST_CASE(AUDIO_GAMING_13
, "content/gaming/leg1.ogg", PIPELINE_OK
,
282 PIPELINE_OK
, kNullHash
, "556e339fd0d1bdcb2d98f69063614067");
283 FFMPEG_TEST_CASE(AUDIO_GAMING_14
, "content/gaming/leg2.ogg", PIPELINE_OK
,
284 PIPELINE_OK
, kNullHash
, "313344cc2c02db5b23e336a9523b0c4a");
285 FFMPEG_TEST_CASE(AUDIO_GAMING_15
, "content/gaming/leg3.ogg", PIPELINE_OK
,
286 PIPELINE_OK
, kNullHash
, "25730f36ed51ba07eacca9c2b6235e6c");
287 FFMPEG_TEST_CASE(AUDIO_GAMING_16
, "content/gaming/lock_on.ogg", PIPELINE_OK
,
288 PIPELINE_OK
, kNullHash
, "92a3af2fc3597e7aaf5b06748daf5d6a");
289 FFMPEG_TEST_CASE(AUDIO_GAMING_17
, "content/gaming/enemy_lock_on.ogg",
290 PIPELINE_OK
, PIPELINE_OK
, kNullHash
,
291 "9670d8f5a668cf85f8ae8d6f8e0fdcdc");
292 FFMPEG_TEST_CASE(AUDIO_GAMING_18
, "content/gaming/rocket_launcher.mp3",
293 PIPELINE_OK
, PIPELINE_OK
, kNullHash
,
294 "bd8b70f6452360db7cca5c34b6e72844");
296 // Allocate gigabytes of memory, likely can't be run on 32bit machines.
297 FFMPEG_TEST_CASE(BIG_MEM_1
, "security/bigmem1.mov",
298 DEMUXER_ERROR_COULD_NOT_OPEN
, DEMUXER_ERROR_COULD_NOT_OPEN
,
299 kNullHash
, kNullHash
);
300 FFMPEG_TEST_CASE(BIG_MEM_2
, "security/looping1.mov",
301 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
302 kNullHash
, kNullHash
);
303 FFMPEG_TEST_CASE(BIG_MEM_5
, "security/looping5.mov",
304 DEMUXER_ERROR_COULD_NOT_PARSE
, DEMUXER_ERROR_COULD_NOT_PARSE
,
305 kNullHash
, kNullHash
);
306 FLAKY_FFMPEG_TEST_CASE(BIG_MEM_3
, "security/looping3.mov");
307 FLAKY_FFMPEG_TEST_CASE(BIG_MEM_4
, "security/looping4.mov");
309 // Flaky under threading or for other reasons. Per rbultje, most of these will
310 // never be reliable since FFmpeg does not guarantee consistency in error cases.
311 // We only really care that these don't cause crashes or errors under tooling.
312 FLAKY_FFMPEG_TEST_CASE(Cr99652
, "security/99652.webm");
313 FLAKY_FFMPEG_TEST_CASE(Cr100464
, "security/100464.webm");
314 FLAKY_FFMPEG_TEST_CASE(Cr111342
, "security/111342.ogm");
315 FLAKY_FFMPEG_TEST_CASE(OGV_0
, "security/big_dims.ogv");
316 FLAKY_FFMPEG_TEST_CASE(OGV_3
, "security/smclock_1_0.ogv");
317 FLAKY_FFMPEG_TEST_CASE(OGV_4
, "security/smclock.ogv.1.0.ogv");
318 FLAKY_FFMPEG_TEST_CASE(OGV_6
, "security/smclocktheora_1_10000.ogv");
319 FLAKY_FFMPEG_TEST_CASE(OGV_13
, "security/smclocktheora_1_790.ogv");
320 FLAKY_FFMPEG_TEST_CASE(MP4_3
, "security/clockh264aac_300413969.mp4");
321 FLAKY_FFMPEG_TEST_CASE(MP4_4
, "security/clockh264aac_301350139.mp4");
322 FLAKY_FFMPEG_TEST_CASE(MP4_12
, "security/assert1.mov");
323 // Not really flaky, but can't pass the seek test.
324 FLAKY_FFMPEG_TEST_CASE(MP4_10
, "security/null1.m4a");
326 // Videos with massive gaps between frame timestamps that result in long hangs
327 // with our pipeline. Should be uncommented when we support clockless playback.
328 // FFMPEG_TEST_CASE(WEBM_0, "security/memcpy.webm", PIPELINE_OK, PIPELINE_OK,
329 // kNullHash, kNullHash);
330 // FFMPEG_TEST_CASE(MP4_17, "security/assert2.mov", PIPELINE_OK, PIPELINE_OK,
331 // kNullHash, kNullHash);
332 // FFMPEG_TEST_CASE(OGV_23, "security/assert2.ogv", PIPELINE_OK, PIPELINE_OK,
333 // kNullHash, kNullHash);
335 TEST_P(FFmpegRegressionTest
, BasicPlayback
) {
336 if (GetParam().init_status
== PIPELINE_OK
) {
337 ASSERT_TRUE(Start(GetTestDataURL(GetParam().filename
),
338 GetParam().init_status
, true));
340 ASSERT_EQ(WaitUntilEndedOrError(), GetParam().end_status
);
341 EXPECT_EQ(GetVideoHash(), GetParam().video_md5
);
342 EXPECT_EQ(GetAudioHash(), GetParam().audio_md5
);
344 // Check for ended if the pipeline is expected to finish okay.
345 if (GetParam().end_status
== PIPELINE_OK
) {
348 // Tack a seek on the end to catch any seeking issues.
349 Seek(base::TimeDelta::FromMilliseconds(0));
352 ASSERT_FALSE(Start(GetTestDataURL(GetParam().filename
),
353 GetParam().init_status
, true));
354 EXPECT_EQ(GetVideoHash(), GetParam().video_md5
);
355 EXPECT_EQ(GetAudioHash(), GetParam().audio_md5
);
359 TEST_P(FlakyFFmpegRegressionTest
, BasicPlayback
) {
360 if (Start(GetTestDataURL(GetParam().filename
))) {
362 WaitUntilEndedOrError();