David Ghandehari | 9e5b587 | 2016-07-28 09:50:04 -0700 | [diff] [blame] | 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 | "efbc63a850c9f8f51942f6a6029eb00f"); |
| 97 | FFMPEG_TEST_CASE(Cr47761, "content/crbug47761.ogg", PIPELINE_OK, PIPELINE_OK, |
| 98 | kNullHash, |
| 99 | "f45b9d7556f39dd811700ec72cb71483"); |
| 100 | FFMPEG_TEST_CASE(Cr50045, "content/crbug50045.mp4", PIPELINE_OK, PIPELINE_OK, |
| 101 | "c345e9ef9ebfc6bfbcbe3f0ddc3125ba", |
| 102 | "73d65d9cc6ce25060b7510bd74678c26"); |
| 103 | FFMPEG_TEST_CASE(Cr62127, "content/crbug62127.webm", PIPELINE_ERROR_DECODE, |
| 104 | PIPELINE_ERROR_DECODE, "d41d8cd98f00b204e9800998ecf8427e", |
| 105 | kNullHash); |
| 106 | FFMPEG_TEST_CASE(Cr93620, "security/93620.ogg", PIPELINE_OK, PIPELINE_OK, |
| 107 | kNullHash, |
| 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", DEMUXER_ERROR_COULD_NOT_OPEN, |
| 132 | DEMUXER_ERROR_COULD_NOT_OPEN, 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", DEMUXER_ERROR_COULD_NOT_OPEN, |
| 145 | DEMUXER_ERROR_COULD_NOT_OPEN, kNullHash, kNullHash); |
| 146 | FFMPEG_TEST_CASE(Cr142738, "content/crbug142738.ogg", PIPELINE_OK, PIPELINE_OK, |
| 147 | kNullHash, |
| 148 | "03a9591e5b596eb848feeafd7693f371"); |
| 149 | FFMPEG_TEST_CASE(Cr152691, "security/152691.mp3", PIPELINE_ERROR_DECODE, |
| 150 | PIPELINE_ERROR_DECODE, kNullHash, |
| 151 | "59adb24ef3cdbe0297f05b395827453f"); |
| 152 | FFMPEG_TEST_CASE(Cr161639, "security/161639.m4a", PIPELINE_OK, PIPELINE_OK, |
| 153 | kNullHash, "97ae2fa2a2e9ff3c2cf17be96b08bbe8"); |
| 154 | |
| 155 | // General MKV test cases. |
| 156 | FFMPEG_TEST_CASE(MKV_0, "security/nested_tags_lang.mka.627.628", PIPELINE_OK, |
| 157 | PIPELINE_ERROR_DECODE, kNullHash, |
| 158 | "3fc4e8ef212df08c61acce3db34b2d09"); |
| 159 | FFMPEG_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. |
| 164 | FFMPEG_TEST_CASE(MP4_0, "security/aac.10419.mp4", DEMUXER_ERROR_COULD_NOT_OPEN, |
| 165 | DEMUXER_ERROR_COULD_NOT_OPEN, kNullHash, kNullHash); |
| 166 | FFMPEG_TEST_CASE(MP4_1, "security/clockh264aac_200021889.mp4", |
| 167 | DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, |
| 168 | kNullHash, kNullHash); |
| 169 | FFMPEG_TEST_CASE(MP4_2, "security/clockh264aac_200701257.mp4", PIPELINE_OK, |
| 170 | PIPELINE_OK, kNullHash, "d41d8cd98f00b204e9800998ecf8427e"); |
| 171 | FFMPEG_TEST_CASE(MP4_5, "security/clockh264aac_3022500.mp4", |
| 172 | DEMUXER_ERROR_NO_SUPPORTED_STREAMS, |
| 173 | DEMUXER_ERROR_NO_SUPPORTED_STREAMS, kNullHash, kNullHash); |
| 174 | FFMPEG_TEST_CASE(MP4_6, "security/clockh264aac_344289.mp4", PIPELINE_OK, |
| 175 | PIPELINE_OK, kNullHash, kNullHash); |
| 176 | FFMPEG_TEST_CASE(MP4_7, "security/clockh264mp3_187697.mp4", |
| 177 | DEMUXER_ERROR_NO_SUPPORTED_STREAMS, |
| 178 | DEMUXER_ERROR_NO_SUPPORTED_STREAMS, |
| 179 | kNullHash, kNullHash); |
| 180 | FFMPEG_TEST_CASE(MP4_8, "security/h264.705767.mp4", |
| 181 | DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, |
| 182 | kNullHash, kNullHash); |
| 183 | FFMPEG_TEST_CASE(MP4_9, "security/smclockmp4aac_1_0.mp4", |
| 184 | DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, |
| 185 | kNullHash, kNullHash); |
| 186 | FFMPEG_TEST_CASE(MP4_11, "security/null1.mp4", PIPELINE_OK, PIPELINE_OK, |
| 187 | kNullHash, "7397188f229211987268f39ef5a45b3c"); |
| 188 | FFMPEG_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. |
| 193 | FFMPEG_TEST_CASE(OGV_1, "security/out.163.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 194 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 195 | FFMPEG_TEST_CASE(OGV_2, "security/out.391.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 196 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 197 | FFMPEG_TEST_CASE(OGV_5, "security/smclocktheora_1_0.ogv", |
| 198 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 199 | kNullHash, kNullHash); |
| 200 | FFMPEG_TEST_CASE(OGV_7, "security/smclocktheora_1_102.ogv", |
| 201 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 202 | kNullHash, kNullHash); |
| 203 | FFMPEG_TEST_CASE(OGV_8, "security/smclocktheora_1_104.ogv", |
| 204 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 205 | kNullHash, kNullHash); |
| 206 | FFMPEG_TEST_CASE(OGV_9, "security/smclocktheora_1_110.ogv", |
| 207 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 208 | kNullHash, kNullHash); |
| 209 | FFMPEG_TEST_CASE(OGV_10, "security/smclocktheora_1_179.ogv", |
| 210 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 211 | kNullHash, kNullHash); |
| 212 | FFMPEG_TEST_CASE(OGV_11, "security/smclocktheora_1_20.ogv", |
| 213 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 214 | kNullHash, kNullHash); |
| 215 | FFMPEG_TEST_CASE(OGV_12, "security/smclocktheora_1_723.ogv", |
| 216 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 217 | kNullHash, kNullHash); |
| 218 | FFMPEG_TEST_CASE(OGV_14, "security/smclocktheora_2_10405.ogv", |
| 219 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 220 | kNullHash, kNullHash); |
| 221 | FFMPEG_TEST_CASE(OGV_15, "security/smclocktheora_2_10619.ogv", |
| 222 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 223 | kNullHash, kNullHash); |
| 224 | FFMPEG_TEST_CASE(OGV_16, "security/smclocktheora_2_1075.ogv", |
| 225 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 226 | kNullHash, kNullHash); |
| 227 | FFMPEG_TEST_CASE(OGV_17, "security/vorbis.482086.ogv", |
| 228 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 229 | kNullHash, kNullHash); |
| 230 | FFMPEG_TEST_CASE(OGV_18, "security/wav.711.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 231 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 232 | FFMPEG_TEST_CASE(OGV_19, "security/null1.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 233 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 234 | FFMPEG_TEST_CASE(OGV_20, "security/null2.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 235 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 236 | FFMPEG_TEST_CASE(OGV_21, "security/assert1.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 237 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 238 | FFMPEG_TEST_CASE(OGV_22, "security/assert2.ogv", DECODER_ERROR_NOT_SUPPORTED, |
| 239 | DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); |
| 240 | |
| 241 | // General WebM test cases. |
| 242 | FFMPEG_TEST_CASE(WEBM_1, "security/no-bug.webm", PIPELINE_OK, PIPELINE_OK, |
| 243 | "39e92700cbb77478fd63f49db855e7e5", kNullHash); |
| 244 | FFMPEG_TEST_CASE(WEBM_2, "security/uninitialize.webm", PIPELINE_ERROR_DECODE, |
| 245 | PIPELINE_ERROR_DECODE, kNullHash, kNullHash); |
| 246 | FFMPEG_TEST_CASE(WEBM_3, "security/out.webm.139771.2965", |
| 247 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 248 | kNullHash, kNullHash); |
| 249 | FFMPEG_TEST_CASE(WEBM_4, "security/out.webm.68798.1929", |
| 250 | DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, |
| 251 | kNullHash, kNullHash); |
| 252 | FFMPEG_TEST_CASE(WEBM_5, "content/frame_size_change.webm", PIPELINE_OK, |
| 253 | PIPELINE_OK, "d8fcf2896b7400a2261bac9e9ea930f8", kNullHash); |
| 254 | |
| 255 | // Audio Functional Tests |
| 256 | FFMPEG_TEST_CASE(AUDIO_GAMING_0, "content/gaming/a_220_00.mp3", PIPELINE_OK, |
| 257 | PIPELINE_OK, kNullHash, "3c2e03569e2af83415a8f32065425f8c"); |
| 258 | FFMPEG_TEST_CASE(AUDIO_GAMING_1, "content/gaming/a_220_00_v2.ogg", PIPELINE_OK, |
| 259 | PIPELINE_OK, kNullHash, "2fa0e9fca48759a7de1c22418fba7ea0"); |
| 260 | FFMPEG_TEST_CASE(AUDIO_GAMING_2, "content/gaming/ai_laser1.ogg", PIPELINE_OK, |
| 261 | PIPELINE_OK, kNullHash, "d4f331b0f7f04e94cd70f037a1091c2b"); |
| 262 | FFMPEG_TEST_CASE(AUDIO_GAMING_3, "content/gaming/ai_laser2.ogg", PIPELINE_OK, |
| 263 | PIPELINE_OK, kNullHash, "7b0eccb651e5572711f9c8826cc14c3c"); |
| 264 | FFMPEG_TEST_CASE(AUDIO_GAMING_4, "content/gaming/ai_laser3.ogg", PIPELINE_OK, |
| 265 | PIPELINE_OK, kNullHash, "cd977a2dd4fa570f1a7392fc9948f184"); |
| 266 | FFMPEG_TEST_CASE(AUDIO_GAMING_5, "content/gaming/ai_laser4.ogg", PIPELINE_OK, |
| 267 | PIPELINE_OK, kNullHash, "155caa85c878abae43428f424cdc8848"); |
| 268 | FFMPEG_TEST_CASE(AUDIO_GAMING_6, "content/gaming/ai_laser5.ogg", PIPELINE_OK, |
| 269 | PIPELINE_OK, kNullHash, "c0f7768ac3c72aaf26ac7b6070d2392a"); |
| 270 | FFMPEG_TEST_CASE(AUDIO_GAMING_7, "content/gaming/footstep1.ogg", PIPELINE_OK, |
| 271 | PIPELINE_OK, kNullHash, "46fab3db625f0f9b655b9affbb1fff25"); |
| 272 | FFMPEG_TEST_CASE(AUDIO_GAMING_8, "content/gaming/footstep3.ogg", PIPELINE_OK, |
| 273 | PIPELINE_OK, kNullHash, "38b84b04eb3f1993eb97b5d46fa2a444"); |
| 274 | FFMPEG_TEST_CASE(AUDIO_GAMING_9, "content/gaming/footstep4.ogg", PIPELINE_OK, |
| 275 | PIPELINE_OK, kNullHash, "7a3927c3026fa96562b6c19950df0be0"); |
| 276 | FFMPEG_TEST_CASE(AUDIO_GAMING_10, "content/gaming/laser1.ogg", PIPELINE_OK, |
| 277 | PIPELINE_OK, kNullHash, "d2750f18ffce52f3763daba52117b66b"); |
| 278 | FFMPEG_TEST_CASE(AUDIO_GAMING_11, "content/gaming/laser2.ogg", PIPELINE_OK, |
| 279 | PIPELINE_OK, kNullHash, "bb398db9b2873e03a06d486d0a6f6d3a"); |
| 280 | FFMPEG_TEST_CASE(AUDIO_GAMING_12, "content/gaming/laser3.ogg", PIPELINE_OK, |
| 281 | PIPELINE_OK, kNullHash, "deb996d817e155ecd56766749d856e74"); |
| 282 | FFMPEG_TEST_CASE(AUDIO_GAMING_13, "content/gaming/leg1.ogg", PIPELINE_OK, |
| 283 | PIPELINE_OK, kNullHash, "556e339fd0d1bdcb2d98f69063614067"); |
| 284 | FFMPEG_TEST_CASE(AUDIO_GAMING_14, "content/gaming/leg2.ogg", PIPELINE_OK, |
| 285 | PIPELINE_OK, kNullHash, "313344cc2c02db5b23e336a9523b0c4a"); |
| 286 | FFMPEG_TEST_CASE(AUDIO_GAMING_15, "content/gaming/leg3.ogg", PIPELINE_OK, |
| 287 | PIPELINE_OK, kNullHash, "25730f36ed51ba07eacca9c2b6235e6c"); |
| 288 | FFMPEG_TEST_CASE(AUDIO_GAMING_16, "content/gaming/lock_on.ogg", PIPELINE_OK, |
| 289 | PIPELINE_OK, kNullHash, "92a3af2fc3597e7aaf5b06748daf5d6a"); |
| 290 | FFMPEG_TEST_CASE(AUDIO_GAMING_17, "content/gaming/enemy_lock_on.ogg", |
| 291 | PIPELINE_OK, PIPELINE_OK, kNullHash, |
| 292 | "9670d8f5a668cf85f8ae8d6f8e0fdcdc"); |
| 293 | FFMPEG_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. |
| 298 | FFMPEG_TEST_CASE(BIG_MEM_1, "security/bigmem1.mov", |
| 299 | DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, |
| 300 | kNullHash, kNullHash); |
| 301 | FFMPEG_TEST_CASE(BIG_MEM_2, "security/looping1.mov", |
| 302 | DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, |
| 303 | kNullHash, kNullHash); |
| 304 | FFMPEG_TEST_CASE(BIG_MEM_5, "security/looping5.mov", |
| 305 | DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, |
| 306 | kNullHash, kNullHash); |
| 307 | FLAKY_FFMPEG_TEST_CASE(BIG_MEM_3, "security/looping3.mov"); |
| 308 | FLAKY_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. |
| 313 | FLAKY_FFMPEG_TEST_CASE(Cr99652, "security/99652.webm"); |
| 314 | FLAKY_FFMPEG_TEST_CASE(Cr100464, "security/100464.webm"); |
| 315 | FLAKY_FFMPEG_TEST_CASE(Cr111342, "security/111342.ogm"); |
| 316 | FLAKY_FFMPEG_TEST_CASE(OGV_0, "security/big_dims.ogv"); |
| 317 | FLAKY_FFMPEG_TEST_CASE(OGV_3, "security/smclock_1_0.ogv"); |
| 318 | FLAKY_FFMPEG_TEST_CASE(OGV_4, "security/smclock.ogv.1.0.ogv"); |
| 319 | FLAKY_FFMPEG_TEST_CASE(OGV_6, "security/smclocktheora_1_10000.ogv"); |
| 320 | FLAKY_FFMPEG_TEST_CASE(OGV_13, "security/smclocktheora_1_790.ogv"); |
| 321 | FLAKY_FFMPEG_TEST_CASE(MP4_3, "security/clockh264aac_300413969.mp4"); |
| 322 | FLAKY_FFMPEG_TEST_CASE(MP4_4, "security/clockh264aac_301350139.mp4"); |
| 323 | FLAKY_FFMPEG_TEST_CASE(MP4_12, "security/assert1.mov"); |
| 324 | // Not really flaky, but can't pass the seek test. |
| 325 | FLAKY_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 | |
| 336 | TEST_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 | |
| 360 | TEST_P(FlakyFFmpegRegressionTest, BasicPlayback) { |
| 361 | if (Start(GetTestDataFilePath(GetParam().filename))) { |
| 362 | Play(); |
| 363 | WaitUntilEndedOrError(); |
| 364 | } |
| 365 | } |
| 366 | |
| 367 | } // namespace media |