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