Home | History | Annotate | Download | only in ffmpeg
      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