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. 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 40 namespace media { 41 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), 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. 62 struct FlakyRegressionTestData { 63 FlakyRegressionTestData(const char* filename) 64 : filename(filename) { 65 } 66 67 const char* filename; 68 }; 69 70 class FFmpegRegressionTest 71 : public testing::TestWithParam<RegressionTestData>, 72 public PipelineIntegrationTestBase { 73 }; 74 75 class 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. 94 FFMPEG_TEST_CASE(Cr47325, "security/47325.mp4", PIPELINE_OK, PIPELINE_OK, 95 "2a7a938c6b5979621cec998f02d9bbb6", 96 "3.61,1.64,-3.24,0.12,1.50,-0.86,"); 97 FFMPEG_TEST_CASE(Cr47761, "content/crbug47761.ogg", PIPELINE_OK, PIPELINE_OK, 98 kNullVideoHash, 99 "8.89,8.55,8.88,8.01,8.23,7.69,"); 100 FFMPEG_TEST_CASE(Cr50045, "content/crbug50045.mp4", PIPELINE_OK, PIPELINE_OK, 101 "c345e9ef9ebfc6bfbcbe3f0ddc3125ba", 102 "2.72,-6.27,-6.11,-3.17,-5.58,1.26,"); 103 FFMPEG_TEST_CASE(Cr62127, "content/crbug62127.webm", PIPELINE_OK, 104 PIPELINE_OK, "a064b2776fc5aef3e9cba47967a75db9", 105 kNullAudioHash); 106 FFMPEG_TEST_CASE(Cr93620, "security/93620.ogg", PIPELINE_OK, PIPELINE_OK, 107 kNullVideoHash, 108 "-10.55,-10.10,-10.42,-10.35,-10.29,-10.72,"); 109 FFMPEG_TEST_CASE(Cr100492, "security/100492.webm", DECODER_ERROR_NOT_SUPPORTED, 110 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 111 FFMPEG_TEST_CASE(Cr100543, "security/100543.webm", PIPELINE_OK, PIPELINE_OK, 112 "c16691cc9178db3adbf7e562cadcd6e6", 113 "1211.73,304.89,1311.54,371.34,1283.06,299.63,"); 114 FFMPEG_TEST_CASE(Cr101458, "security/101458.webm", DECODER_ERROR_NOT_SUPPORTED, 115 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 116 FFMPEG_TEST_CASE(Cr108416, "security/108416.webm", PIPELINE_OK, PIPELINE_OK, 117 "5cb3a934795cd552753dec7687928291", 118 "-17.87,-37.20,-23.33,45.57,8.13,-9.92,"); 119 FFMPEG_TEST_CASE(Cr110849, "security/110849.mkv", 120 DEMUXER_ERROR_COULD_NOT_OPEN, 121 DEMUXER_ERROR_NO_SUPPORTED_STREAMS, 122 kNullVideoHash, kNullAudioHash); 123 FFMPEG_TEST_CASE(Cr112384, "security/112384.webm", 124 DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, 125 kNullVideoHash, kNullAudioHash); 126 FFMPEG_TEST_CASE(Cr117912, "security/117912.webm", DEMUXER_ERROR_COULD_NOT_OPEN, 127 DEMUXER_ERROR_COULD_NOT_OPEN, kNullVideoHash, kNullAudioHash); 128 FFMPEG_TEST_CASE(Cr123481, "security/123481.ogv", PIPELINE_OK, 129 PIPELINE_OK, "e6dd853fcbd746c8bb2ab2b8fc376fc7", 130 "1.28,-0.32,-0.81,0.08,1.66,0.89,"); 131 FFMPEG_TEST_CASE(Cr132779, "security/132779.webm", 132 DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, 133 kNullVideoHash, kNullAudioHash); 134 FFMPEG_TEST_CASE(Cr140165, "security/140165.ogg", PIPELINE_ERROR_DECODE, 135 PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); 136 FFMPEG_TEST_CASE(Cr140647, "security/140647.ogv", DEMUXER_ERROR_COULD_NOT_OPEN, 137 DEMUXER_ERROR_COULD_NOT_OPEN, kNullVideoHash, kNullAudioHash); 138 FFMPEG_TEST_CASE(Cr142738, "content/crbug142738.ogg", PIPELINE_OK, PIPELINE_OK, 139 kNullVideoHash, 140 "-1.22,0.45,1.79,1.80,-0.30,-1.21,"); 141 FFMPEG_TEST_CASE(Cr152691, "security/152691.mp3", PIPELINE_ERROR_DECODE, 142 PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); 143 FFMPEG_TEST_CASE(Cr161639, "security/161639.m4a", PIPELINE_ERROR_DECODE, 144 PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); 145 FFMPEG_TEST_CASE(Cr222754, "security/222754.mp4", PIPELINE_ERROR_DECODE, 146 PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); 147 FFMPEG_TEST_CASE(Cr234630a, "security/234630a.mov", PIPELINE_OK, 148 PIPELINE_OK, kNullVideoHash, 149 "-15.52,-18.90,-15.33,-16.68,-14.41,-15.89,"); 150 FFMPEG_TEST_CASE(Cr234630b, "security/234630b.mov", PIPELINE_ERROR_DECODE, 151 PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); 152 FFMPEG_TEST_CASE(Cr242786, "security/242786.webm", PIPELINE_OK, 153 PIPELINE_OK, kNullVideoHash, 154 "-1.72,-0.83,0.84,1.70,1.23,-0.53,"); 155 156 // General MP4 test cases. 157 FFMPEG_TEST_CASE(MP4_0, "security/aac.10419.mp4", DEMUXER_ERROR_COULD_NOT_OPEN, 158 DEMUXER_ERROR_COULD_NOT_OPEN, kNullVideoHash, kNullAudioHash); 159 FFMPEG_TEST_CASE(MP4_1, "security/clockh264aac_200021889.mp4", 160 DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, 161 kNullVideoHash, kNullAudioHash); 162 FFMPEG_TEST_CASE(MP4_2, "security/clockh264aac_200701257.mp4", PIPELINE_OK, 163 PIPELINE_OK, kNullVideoHash, kNullAudioHash); 164 FFMPEG_TEST_CASE(MP4_5, "security/clockh264aac_3022500.mp4", 165 DEMUXER_ERROR_NO_SUPPORTED_STREAMS, 166 DEMUXER_ERROR_NO_SUPPORTED_STREAMS, 167 kNullVideoHash, kNullAudioHash); 168 FFMPEG_TEST_CASE(MP4_6, "security/clockh264aac_344289.mp4", PIPELINE_OK, 169 PIPELINE_OK, kNullVideoHash, kNullAudioHash); 170 FFMPEG_TEST_CASE(MP4_7, "security/clockh264mp3_187697.mp4", 171 DEMUXER_ERROR_NO_SUPPORTED_STREAMS, 172 DEMUXER_ERROR_NO_SUPPORTED_STREAMS, 173 kNullVideoHash, kNullAudioHash); 174 FFMPEG_TEST_CASE(MP4_8, "security/h264.705767.mp4", 175 DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, 176 kNullVideoHash, kNullAudioHash); 177 FFMPEG_TEST_CASE(MP4_9, "security/smclockmp4aac_1_0.mp4", 178 DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, 179 kNullVideoHash, kNullAudioHash); 180 FFMPEG_TEST_CASE(MP4_16, "security/looping2.mov", 181 DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, 182 kNullVideoHash, kNullAudioHash); 183 184 // General OGV test cases. 185 FFMPEG_TEST_CASE(OGV_1, "security/out.163.ogv", DECODER_ERROR_NOT_SUPPORTED, 186 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 187 FFMPEG_TEST_CASE(OGV_2, "security/out.391.ogv", DECODER_ERROR_NOT_SUPPORTED, 188 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 189 FFMPEG_TEST_CASE(OGV_5, "security/smclocktheora_1_0.ogv", 190 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 191 kNullVideoHash, kNullAudioHash); 192 FFMPEG_TEST_CASE(OGV_7, "security/smclocktheora_1_102.ogv", 193 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 194 kNullVideoHash, kNullAudioHash); 195 FFMPEG_TEST_CASE(OGV_8, "security/smclocktheora_1_104.ogv", 196 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 197 kNullVideoHash, kNullAudioHash); 198 FFMPEG_TEST_CASE(OGV_9, "security/smclocktheora_1_110.ogv", 199 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 200 kNullVideoHash, kNullAudioHash); 201 FFMPEG_TEST_CASE(OGV_10, "security/smclocktheora_1_179.ogv", 202 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 203 kNullVideoHash, kNullAudioHash); 204 FFMPEG_TEST_CASE(OGV_11, "security/smclocktheora_1_20.ogv", 205 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 206 kNullVideoHash, kNullAudioHash); 207 FFMPEG_TEST_CASE(OGV_12, "security/smclocktheora_1_723.ogv", 208 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 209 kNullVideoHash, kNullAudioHash); 210 FFMPEG_TEST_CASE(OGV_14, "security/smclocktheora_2_10405.ogv", 211 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 212 kNullVideoHash, kNullAudioHash); 213 FFMPEG_TEST_CASE(OGV_15, "security/smclocktheora_2_10619.ogv", 214 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 215 kNullVideoHash, kNullAudioHash); 216 FFMPEG_TEST_CASE(OGV_16, "security/smclocktheora_2_1075.ogv", 217 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 218 kNullVideoHash, kNullAudioHash); 219 FFMPEG_TEST_CASE(OGV_18, "security/wav.711.ogv", DECODER_ERROR_NOT_SUPPORTED, 220 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 221 FFMPEG_TEST_CASE(OGV_19, "security/null1.ogv", DECODER_ERROR_NOT_SUPPORTED, 222 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 223 FFMPEG_TEST_CASE(OGV_20, "security/null2.ogv", DECODER_ERROR_NOT_SUPPORTED, 224 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 225 FFMPEG_TEST_CASE(OGV_21, "security/assert1.ogv", DECODER_ERROR_NOT_SUPPORTED, 226 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 227 FFMPEG_TEST_CASE(OGV_22, "security/assert2.ogv", DECODER_ERROR_NOT_SUPPORTED, 228 DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); 229 230 // General WebM test cases. 231 FFMPEG_TEST_CASE(WEBM_1, "security/no-bug.webm", PIPELINE_OK, PIPELINE_OK, 232 "39e92700cbb77478fd63f49db855e7e5", kNullAudioHash); 233 FFMPEG_TEST_CASE(WEBM_3, "security/out.webm.139771.2965", 234 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 235 kNullVideoHash, kNullAudioHash); 236 FFMPEG_TEST_CASE(WEBM_4, "security/out.webm.68798.1929", 237 DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, 238 kNullVideoHash, kNullAudioHash); 239 FFMPEG_TEST_CASE(WEBM_5, "content/frame_size_change.webm", PIPELINE_OK, 240 PIPELINE_OK, "d8fcf2896b7400a2261bac9e9ea930f8", 241 kNullAudioHash); 242 243 // Audio Functional Tests 244 FFMPEG_TEST_CASE(AUDIO_GAMING_0, "content/gaming/a_220_00.mp3", PIPELINE_OK, 245 PIPELINE_OK, kNullVideoHash, 246 "0.36,1.25,2.98,4.29,4.19,2.76,"); 247 FFMPEG_TEST_CASE(AUDIO_GAMING_1, "content/gaming/a_220_00_v2.ogg", PIPELINE_OK, 248 PIPELINE_OK, kNullVideoHash, 249 "2.17,3.31,5.15,6.33,5.97,4.35,"); 250 FFMPEG_TEST_CASE(AUDIO_GAMING_2, "content/gaming/ai_laser1.ogg", PIPELINE_OK, 251 PIPELINE_OK, kNullVideoHash, 252 "7.70,10.81,13.19,10.07,7.39,7.56,"); 253 FFMPEG_TEST_CASE(AUDIO_GAMING_3, "content/gaming/ai_laser2.ogg", PIPELINE_OK, 254 PIPELINE_OK, kNullVideoHash, 255 "5.99,8.04,9.71,8.69,7.81,7.52,"); 256 FFMPEG_TEST_CASE(AUDIO_GAMING_4, "content/gaming/ai_laser3.ogg", PIPELINE_OK, 257 PIPELINE_OK, kNullVideoHash, 258 "-0.32,1.44,3.75,5.88,6.32,3.22,"); 259 FFMPEG_TEST_CASE(AUDIO_GAMING_5, "content/gaming/ai_laser4.ogg", PIPELINE_OK, 260 PIPELINE_OK, kNullVideoHash, 261 "4.75,4.16,2.21,3.01,5.51,6.11,"); 262 FFMPEG_TEST_CASE(AUDIO_GAMING_6, "content/gaming/ai_laser5.ogg", PIPELINE_OK, 263 PIPELINE_OK, kNullVideoHash, 264 "6.04,7.46,8.78,7.32,4.16,3.97,"); 265 FFMPEG_TEST_CASE(AUDIO_GAMING_7, "content/gaming/footstep1.ogg", PIPELINE_OK, 266 PIPELINE_OK, kNullVideoHash, 267 "-0.50,0.29,2.35,4.79,5.14,2.24,"); 268 FFMPEG_TEST_CASE(AUDIO_GAMING_8, "content/gaming/footstep3.ogg", PIPELINE_OK, 269 PIPELINE_OK, kNullVideoHash, 270 "-2.87,-3.05,-4.10,-3.20,-2.20,-2.20,"); 271 FFMPEG_TEST_CASE(AUDIO_GAMING_9, "content/gaming/footstep4.ogg", PIPELINE_OK, 272 PIPELINE_OK, kNullVideoHash, 273 "10.35,10.74,11.60,12.83,12.69,10.67,"); 274 FFMPEG_TEST_CASE(AUDIO_GAMING_10, "content/gaming/laser1.ogg", PIPELINE_OK, 275 PIPELINE_OK, kNullVideoHash, 276 "-9.48,-12.94,-1.75,7.66,5.61,-0.58,"); 277 FFMPEG_TEST_CASE(AUDIO_GAMING_11, "content/gaming/laser2.ogg", PIPELINE_OK, 278 PIPELINE_OK, kNullVideoHash, 279 "-7.53,-6.28,3.37,0.73,-5.83,-4.70,"); 280 FFMPEG_TEST_CASE(AUDIO_GAMING_12, "content/gaming/laser3.ogg", PIPELINE_OK, 281 PIPELINE_OK, kNullVideoHash, 282 "-13.62,-6.55,2.52,-10.10,-10.68,-5.43,"); 283 FFMPEG_TEST_CASE(AUDIO_GAMING_13, "content/gaming/leg1.ogg", PIPELINE_OK, 284 PIPELINE_OK, kNullVideoHash, 285 "5.62,5.79,5.81,5.60,6.18,6.15,"); 286 FFMPEG_TEST_CASE(AUDIO_GAMING_14, "content/gaming/leg2.ogg", PIPELINE_OK, 287 PIPELINE_OK, kNullVideoHash, 288 "-0.88,1.32,2.74,3.07,0.88,-0.03,"); 289 FFMPEG_TEST_CASE(AUDIO_GAMING_15, "content/gaming/leg3.ogg", PIPELINE_OK, 290 PIPELINE_OK, kNullVideoHash, 291 "17.77,18.59,19.57,18.84,17.62,17.22,"); 292 FFMPEG_TEST_CASE(AUDIO_GAMING_16, "content/gaming/lock_on.ogg", PIPELINE_OK, 293 PIPELINE_OK, kNullVideoHash, 294 "3.08,-4.33,-5.04,-0.24,1.83,5.16,"); 295 FFMPEG_TEST_CASE(AUDIO_GAMING_17, "content/gaming/enemy_lock_on.ogg", 296 PIPELINE_OK, PIPELINE_OK, kNullVideoHash, 297 "-2.24,-1.00,-2.75,-0.87,1.11,-0.58,"); 298 FFMPEG_TEST_CASE(AUDIO_GAMING_18, "content/gaming/rocket_launcher.mp3", 299 PIPELINE_OK, PIPELINE_OK, kNullVideoHash, 300 "-3.08,0.18,2.49,1.98,-2.20,-4.74,"); 301 302 // Allocate gigabytes of memory, likely can't be run on 32bit machines. 303 FFMPEG_TEST_CASE(BIG_MEM_1, "security/bigmem1.mov", 304 DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, 305 kNullVideoHash, kNullAudioHash); 306 FFMPEG_TEST_CASE(BIG_MEM_2, "security/looping1.mov", 307 DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, 308 kNullVideoHash, kNullAudioHash); 309 FFMPEG_TEST_CASE(BIG_MEM_5, "security/looping5.mov", 310 DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, 311 kNullVideoHash, kNullAudioHash); 312 FLAKY_FFMPEG_TEST_CASE(BIG_MEM_3, "security/looping3.mov"); 313 FLAKY_FFMPEG_TEST_CASE(BIG_MEM_4, "security/looping4.mov"); 314 315 // Flaky under threading or for other reasons. Per rbultje, most of these will 316 // never be reliable since FFmpeg does not guarantee consistency in error cases. 317 // We only really care that these don't cause crashes or errors under tooling. 318 FLAKY_FFMPEG_TEST_CASE(Cr99652, "security/99652.webm"); 319 FLAKY_FFMPEG_TEST_CASE(Cr100464, "security/100464.webm"); 320 FLAKY_FFMPEG_TEST_CASE(Cr111342, "security/111342.ogm"); 321 FLAKY_FFMPEG_TEST_CASE(OGV_0, "security/big_dims.ogv"); 322 FLAKY_FFMPEG_TEST_CASE(OGV_3, "security/smclock_1_0.ogv"); 323 FLAKY_FFMPEG_TEST_CASE(OGV_4, "security/smclock.ogv.1.0.ogv"); 324 FLAKY_FFMPEG_TEST_CASE(OGV_6, "security/smclocktheora_1_10000.ogv"); 325 FLAKY_FFMPEG_TEST_CASE(OGV_13, "security/smclocktheora_1_790.ogv"); 326 FLAKY_FFMPEG_TEST_CASE(MP4_3, "security/clockh264aac_300413969.mp4"); 327 FLAKY_FFMPEG_TEST_CASE(MP4_4, "security/clockh264aac_301350139.mp4"); 328 FLAKY_FFMPEG_TEST_CASE(MP4_12, "security/assert1.mov"); 329 // Not really flaky, but can't pass the seek test. 330 FLAKY_FFMPEG_TEST_CASE(MP4_10, "security/null1.m4a"); 331 332 // TODO(wolenetz/dalecurtis): The following have flaky audio hash result. 333 // See http://crbug.com/237371 334 FLAKY_FFMPEG_TEST_CASE(Cr112976, "security/112976.ogg"); 335 FLAKY_FFMPEG_TEST_CASE(MKV_0, "security/nested_tags_lang.mka.627.628"); 336 FLAKY_FFMPEG_TEST_CASE(MKV_1, "security/nested_tags_lang.mka.667.628"); 337 FLAKY_FFMPEG_TEST_CASE(MP4_11, "security/null1.mp4"); 338 339 // TODO(wolenetz/dalecurtis): The following have flaky init status: on mac 340 // ia32 Chrome, observed PIPELINE_OK instead of DECODER_ERROR_NOT_SUPPORTED. 341 FLAKY_FFMPEG_TEST_CASE(Cr112670, "security/112670.mp4"); 342 FLAKY_FFMPEG_TEST_CASE(OGV_17, "security/vorbis.482086.ogv"); 343 344 // TODO(wolenetz/dalecurtis): The following have flaky init status: on mac 345 // ia32 Chrome, observed DUMUXER_ERROR_NO_SUPPORTED_STREAMS instead of 346 // DECODER_ERROR_NOT_SUPPORTED. 347 FLAKY_FFMPEG_TEST_CASE(Cr116927, "security/116927.ogv"); 348 FLAKY_FFMPEG_TEST_CASE(WEBM_2, "security/uninitialize.webm"); 349 350 // Videos with massive gaps between frame timestamps that result in long hangs 351 // with our pipeline. Should be uncommented when we support clockless playback. 352 // FFMPEG_TEST_CASE(WEBM_0, "security/memcpy.webm", PIPELINE_OK, PIPELINE_OK, 353 // kNullVideoHash, kNullAudioHash); 354 // FFMPEG_TEST_CASE(MP4_17, "security/assert2.mov", PIPELINE_OK, PIPELINE_OK, 355 // kNullVideoHash, kNullAudioHash); 356 // FFMPEG_TEST_CASE(OGV_23, "security/assert2.ogv", PIPELINE_OK, PIPELINE_OK, 357 // kNullVideoHash, kNullAudioHash); 358 359 TEST_P(FFmpegRegressionTest, BasicPlayback) { 360 if (GetParam().init_status == PIPELINE_OK) { 361 ASSERT_TRUE(Start(GetTestDataFilePath(GetParam().filename), 362 GetParam().init_status, true)); 363 Play(); 364 ASSERT_EQ(WaitUntilEndedOrError(), GetParam().end_status); 365 EXPECT_EQ(GetParam().video_md5, GetVideoHash()); 366 EXPECT_EQ(GetParam().audio_md5, GetAudioHash()); 367 368 // Check for ended if the pipeline is expected to finish okay. 369 if (GetParam().end_status == PIPELINE_OK) { 370 ASSERT_TRUE(ended_); 371 372 // Tack a seek on the end to catch any seeking issues. 373 Seek(base::TimeDelta::FromMilliseconds(0)); 374 } 375 } else { 376 ASSERT_FALSE(Start(GetTestDataFilePath(GetParam().filename), 377 GetParam().init_status, true)); 378 EXPECT_EQ(GetParam().video_md5, GetVideoHash()); 379 EXPECT_EQ(GetParam().audio_md5, GetAudioHash()); 380 } 381 } 382 383 TEST_P(FlakyFFmpegRegressionTest, BasicPlayback) { 384 if (Start(GetTestDataFilePath(GetParam().filename))) { 385 Play(); 386 WaitUntilEndedOrError(); 387 } 388 } 389 390 } // namespace media 391