From 57cbebd3efc80ebd8f474514d721f9df79496484 Mon Sep 17 00:00:00 2001 From: "wolenetz@chromium.org" Date: Thu, 16 May 2013 06:25:05 +0000 Subject: Roll FFmpeg for M29 Chrome-side changes: 1. Use AVCodecID instead of CodecID. 2. Accomodate FFmpeg's new internal refcounted buffers: * Use av_free_packet() instead of av_destruct_packet() in FFmpegH264ToAnnexBBitstreamConverterTests (http://crbug.com/238543) * Add TSAN suppressions (http://crbug.com/239350) * Copy from data[] in FFmpegCdmVideoDecoder. (http://crbug.com/240573) 3. Update ffmpeg_regression_tests: * Rebaseline expectations (http://crbug.com/237363) * Mark some flaky (http://crbug.com/237371) * Change disabled to flaky (http://crbug.com/236979) * Add new tests. (http://crbug.com/234630) R=dalecurtis BUG=238543,239350,237363,237371,236979,234630,123426,223295,236611,234630,240573,241212 Review URL: https://chromiumcodereview.appspot.com/15078005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@200467 0039d316-1c4b-4281-b951-d872f2087c98 --- DEPS | 4 +- media/ffmpeg/ffmpeg_regression_tests.cc | 267 +++++++++++---------- ...h264_to_annex_b_bitstream_converter_unittest.cc | 28 +-- media/filters/pipeline_integration_test_base.cc | 3 +- media/filters/pipeline_integration_test_base.h | 7 +- tools/valgrind/tsan/suppressions.txt | 9 + tools/valgrind/tsan/suppressions_win32.txt | 11 + .../media/crypto/ppapi/ffmpeg_cdm_audio_decoder.cc | 2 +- .../media/crypto/ppapi/ffmpeg_cdm_video_decoder.cc | 8 +- 9 files changed, 187 insertions(+), 152 deletions(-) diff --git a/DEPS b/DEPS index a403dc4..1f4e600 100644 --- a/DEPS +++ b/DEPS @@ -25,8 +25,8 @@ vars = { # These two FFmpeg variables must be updated together. One is used for SVN # checkouts and the other for Git checkouts. - "ffmpeg_revision": "198257", - "ffmpeg_hash": "04db474e52bae0eef2cd22341aca1caf427411de", + "ffmpeg_revision": "200366", + "ffmpeg_hash": "c5c56fa61a9bf2916cbd734c201e099a6500845f", "sfntly_revision": "134", "skia_revision": "9130", diff --git a/media/ffmpeg/ffmpeg_regression_tests.cc b/media/ffmpeg/ffmpeg_regression_tests.cc index 7b66813..0d27ac8 100644 --- a/media/ffmpeg/ffmpeg_regression_tests.cc +++ b/media/ffmpeg/ffmpeg_regression_tests.cc @@ -86,254 +86,273 @@ class FlakyFFmpegRegressionTest video_md5, \ audio_md5))); -#define DISABLED_FFMPEG_TEST_CASE(name, fn) \ - INSTANTIATE_TEST_CASE_P(DISABLED_##name, FlakyFFmpegRegressionTest, \ +#define FLAKY_FFMPEG_TEST_CASE(name, fn) \ + INSTANTIATE_TEST_CASE_P(FLAKY_##name, FlakyFFmpegRegressionTest, \ testing::Values(FlakyRegressionTestData(fn))); // Test cases from issues. FFMPEG_TEST_CASE(Cr47325, "security/47325.mp4", PIPELINE_OK, PIPELINE_OK, "2a7a938c6b5979621cec998f02d9bbb6", - "efbc63a850c9f8f51942f6a6029eb00f"); + "3.61,1.64,-3.24,0.12,1.50,-0.86,"); FFMPEG_TEST_CASE(Cr47761, "content/crbug47761.ogg", PIPELINE_OK, PIPELINE_OK, - kNullHash, - "f45b9d7556f39dd811700ec72cb71483"); + kNullVideoHash, + "8.89,8.55,8.88,8.01,8.23,7.69,"); FFMPEG_TEST_CASE(Cr50045, "content/crbug50045.mp4", PIPELINE_OK, PIPELINE_OK, "c345e9ef9ebfc6bfbcbe3f0ddc3125ba", - "73d65d9cc6ce25060b7510bd74678c26"); -FFMPEG_TEST_CASE(Cr62127, "content/crbug62127.webm", PIPELINE_ERROR_DECODE, - PIPELINE_ERROR_DECODE, "d41d8cd98f00b204e9800998ecf8427e", - kNullHash); + "2.72,-6.27,-6.11,-3.17,-5.58,1.26,"); +FFMPEG_TEST_CASE(Cr62127, "content/crbug62127.webm", PIPELINE_OK, + PIPELINE_OK, "a064b2776fc5aef3e9cba47967a75db9", + kNullAudioHash); FFMPEG_TEST_CASE(Cr93620, "security/93620.ogg", PIPELINE_OK, PIPELINE_OK, - kNullHash, - "0cff252cd46867d26c42a96e6a2e2376"); + kNullVideoHash, + "-10.55,-10.10,-10.42,-10.35,-10.29,-10.72,"); FFMPEG_TEST_CASE(Cr100492, "security/100492.webm", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr100543, "security/100543.webm", PIPELINE_OK, PIPELINE_OK, "c16691cc9178db3adbf7e562cadcd6e6", - "816d9a772a449bc29f65f58244ee04c9"); + "1211.73,304.89,1311.54,371.34,1283.06,299.63,"); FFMPEG_TEST_CASE(Cr101458, "security/101458.webm", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr108416, "security/108416.webm", PIPELINE_OK, PIPELINE_OK, "5cb3a934795cd552753dec7687928291", - "3e576c21f83f3c00719dbe62998d71cb"); + "-17.87,-37.20,-23.33,45.57,8.13,-9.92,"); FFMPEG_TEST_CASE(Cr110849, "security/110849.mkv", DEMUXER_ERROR_COULD_NOT_OPEN, - DEMUXER_ERROR_NO_SUPPORTED_STREAMS, kNullHash, kNullHash); + DEMUXER_ERROR_NO_SUPPORTED_STREAMS, + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr112384, "security/112384.webm", DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, - kNullHash, kNullHash); -FFMPEG_TEST_CASE(Cr112670, "security/112670.mp4", PIPELINE_ERROR_DECODE, - PIPELINE_ERROR_DECODE, kNullHash, - "59adb24ef3cdbe0297f05b395827453f"); -FFMPEG_TEST_CASE(Cr112976, "security/112976.ogg", PIPELINE_OK, - PIPELINE_ERROR_DECODE, kNullHash, - "ef79f7c5805561908805eb0bb7097bb4"); -FFMPEG_TEST_CASE(Cr116927, "security/116927.ogv", DEMUXER_ERROR_COULD_NOT_OPEN, - DEMUXER_ERROR_COULD_NOT_OPEN, kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); + FFMPEG_TEST_CASE(Cr117912, "security/117912.webm", DEMUXER_ERROR_COULD_NOT_OPEN, - DEMUXER_ERROR_COULD_NOT_OPEN, kNullHash, kNullHash); + DEMUXER_ERROR_COULD_NOT_OPEN, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr123481, "security/123481.ogv", PIPELINE_OK, PIPELINE_OK, "e6dd853fcbd746c8bb2ab2b8fc376fc7", - "c96a166a09061ca94202903d7824cf04"); + "1.28,-0.32,-0.81,0.08,1.66,0.89,"); FFMPEG_TEST_CASE(Cr132779, "security/132779.webm", DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr140165, "security/140165.ogg", PIPELINE_ERROR_DECODE, - PIPELINE_ERROR_DECODE, kNullHash, - "bd42757e42bdada18cb9441ee4ef8313"); + PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr140647, "security/140647.ogv", DEMUXER_ERROR_COULD_NOT_OPEN, - DEMUXER_ERROR_COULD_NOT_OPEN, kNullHash, kNullHash); + DEMUXER_ERROR_COULD_NOT_OPEN, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr142738, "content/crbug142738.ogg", PIPELINE_OK, PIPELINE_OK, - kNullHash, - "03a9591e5b596eb848feeafd7693f371"); + kNullVideoHash, + "-1.22,0.45,1.79,1.80,-0.30,-1.21,"); FFMPEG_TEST_CASE(Cr152691, "security/152691.mp3", PIPELINE_ERROR_DECODE, - PIPELINE_ERROR_DECODE, kNullHash, - "59adb24ef3cdbe0297f05b395827453f"); -FFMPEG_TEST_CASE(Cr161639, "security/161639.m4a", PIPELINE_OK, PIPELINE_OK, - kNullHash, "97ae2fa2a2e9ff3c2cf17be96b08bbe8"); + PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); +FFMPEG_TEST_CASE(Cr161639, "security/161639.m4a", PIPELINE_ERROR_DECODE, + PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(Cr222754, "security/222754.mp4", PIPELINE_ERROR_DECODE, - PIPELINE_ERROR_DECODE, kNullHash, kNullHash); - -// General MKV test cases. -FFMPEG_TEST_CASE(MKV_0, "security/nested_tags_lang.mka.627.628", PIPELINE_OK, - PIPELINE_ERROR_DECODE, kNullHash, - "3fc4e8ef212df08c61acce3db34b2d09"); -FFMPEG_TEST_CASE(MKV_1, "security/nested_tags_lang.mka.667.628", PIPELINE_OK, - PIPELINE_ERROR_DECODE, kNullHash, - "2f5ad3e7dd25fa5c0e8f26879953ef0f"); + PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); +FFMPEG_TEST_CASE(Cr234630a, "security/234630a.mov", PIPELINE_OK, + PIPELINE_OK, kNullVideoHash, + "-15.52,-18.90,-15.33,-16.68,-14.41,-15.89,"); +FFMPEG_TEST_CASE(Cr234630b, "security/234630b.mov", PIPELINE_ERROR_DECODE, + PIPELINE_ERROR_DECODE, kNullVideoHash, kNullAudioHash); // General MP4 test cases. FFMPEG_TEST_CASE(MP4_0, "security/aac.10419.mp4", DEMUXER_ERROR_COULD_NOT_OPEN, - DEMUXER_ERROR_COULD_NOT_OPEN, kNullHash, kNullHash); + DEMUXER_ERROR_COULD_NOT_OPEN, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_1, "security/clockh264aac_200021889.mp4", DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_2, "security/clockh264aac_200701257.mp4", PIPELINE_OK, - PIPELINE_OK, kNullHash, "d41d8cd98f00b204e9800998ecf8427e"); + PIPELINE_OK, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_5, "security/clockh264aac_3022500.mp4", DEMUXER_ERROR_NO_SUPPORTED_STREAMS, - DEMUXER_ERROR_NO_SUPPORTED_STREAMS, kNullHash, kNullHash); + DEMUXER_ERROR_NO_SUPPORTED_STREAMS, + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_6, "security/clockh264aac_344289.mp4", PIPELINE_OK, - PIPELINE_OK, kNullHash, kNullHash); + PIPELINE_OK, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_7, "security/clockh264mp3_187697.mp4", DEMUXER_ERROR_NO_SUPPORTED_STREAMS, DEMUXER_ERROR_NO_SUPPORTED_STREAMS, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_8, "security/h264.705767.mp4", DEMUXER_ERROR_COULD_NOT_PARSE, DEMUXER_ERROR_COULD_NOT_PARSE, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_9, "security/smclockmp4aac_1_0.mp4", DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, - kNullHash, kNullHash); -FFMPEG_TEST_CASE(MP4_11, "security/null1.mp4", PIPELINE_OK, PIPELINE_OK, - kNullHash, "7397188f229211987268f39ef5a45b3c"); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(MP4_16, "security/looping2.mov", DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); // General OGV test cases. FFMPEG_TEST_CASE(OGV_1, "security/out.163.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_2, "security/out.391.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_5, "security/smclocktheora_1_0.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_7, "security/smclocktheora_1_102.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_8, "security/smclocktheora_1_104.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_9, "security/smclocktheora_1_110.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_10, "security/smclocktheora_1_179.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_11, "security/smclocktheora_1_20.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_12, "security/smclocktheora_1_723.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_14, "security/smclocktheora_2_10405.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_15, "security/smclocktheora_2_10619.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_16, "security/smclocktheora_2_1075.ogv", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); -FFMPEG_TEST_CASE(OGV_17, "security/vorbis.482086.ogv", - DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_18, "security/wav.711.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_19, "security/null1.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_20, "security/null2.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_21, "security/assert1.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(OGV_22, "security/assert2.ogv", DECODER_ERROR_NOT_SUPPORTED, - DECODER_ERROR_NOT_SUPPORTED, kNullHash, kNullHash); + DECODER_ERROR_NOT_SUPPORTED, kNullVideoHash, kNullAudioHash); // General WebM test cases. FFMPEG_TEST_CASE(WEBM_1, "security/no-bug.webm", PIPELINE_OK, PIPELINE_OK, - "39e92700cbb77478fd63f49db855e7e5", kNullHash); -FFMPEG_TEST_CASE(WEBM_2, "security/uninitialize.webm", PIPELINE_ERROR_DECODE, - PIPELINE_ERROR_DECODE, kNullHash, kNullHash); + "39e92700cbb77478fd63f49db855e7e5", kNullAudioHash); FFMPEG_TEST_CASE(WEBM_3, "security/out.webm.139771.2965", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(WEBM_4, "security/out.webm.68798.1929", DECODER_ERROR_NOT_SUPPORTED, DECODER_ERROR_NOT_SUPPORTED, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(WEBM_5, "content/frame_size_change.webm", PIPELINE_OK, - PIPELINE_OK, "d8fcf2896b7400a2261bac9e9ea930f8", kNullHash); + PIPELINE_OK, "d8fcf2896b7400a2261bac9e9ea930f8", + kNullAudioHash); // Audio Functional Tests FFMPEG_TEST_CASE(AUDIO_GAMING_0, "content/gaming/a_220_00.mp3", PIPELINE_OK, - PIPELINE_OK, kNullHash, "3c2e03569e2af83415a8f32065425f8c"); + PIPELINE_OK, kNullVideoHash, + "0.36,1.25,2.98,4.29,4.19,2.76,"); FFMPEG_TEST_CASE(AUDIO_GAMING_1, "content/gaming/a_220_00_v2.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "2fa0e9fca48759a7de1c22418fba7ea0"); + PIPELINE_OK, kNullVideoHash, + "2.17,3.31,5.15,6.33,5.97,4.35,"); FFMPEG_TEST_CASE(AUDIO_GAMING_2, "content/gaming/ai_laser1.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "d4f331b0f7f04e94cd70f037a1091c2b"); + PIPELINE_OK, kNullVideoHash, + "7.70,10.81,13.19,10.07,7.39,7.56,"); FFMPEG_TEST_CASE(AUDIO_GAMING_3, "content/gaming/ai_laser2.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "7b0eccb651e5572711f9c8826cc14c3c"); + PIPELINE_OK, kNullVideoHash, + "5.99,8.04,9.71,8.69,7.81,7.52,"); FFMPEG_TEST_CASE(AUDIO_GAMING_4, "content/gaming/ai_laser3.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "cd977a2dd4fa570f1a7392fc9948f184"); + PIPELINE_OK, kNullVideoHash, + "-0.32,1.44,3.75,5.88,6.32,3.22,"); FFMPEG_TEST_CASE(AUDIO_GAMING_5, "content/gaming/ai_laser4.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "155caa85c878abae43428f424cdc8848"); + PIPELINE_OK, kNullVideoHash, + "4.75,4.16,2.21,3.01,5.51,6.11,"); FFMPEG_TEST_CASE(AUDIO_GAMING_6, "content/gaming/ai_laser5.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "c0f7768ac3c72aaf26ac7b6070d2392a"); + PIPELINE_OK, kNullVideoHash, + "6.04,7.46,8.78,7.32,4.16,3.97,"); FFMPEG_TEST_CASE(AUDIO_GAMING_7, "content/gaming/footstep1.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "46fab3db625f0f9b655b9affbb1fff25"); + PIPELINE_OK, kNullVideoHash, + "-0.50,0.29,2.35,4.79,5.14,2.24,"); FFMPEG_TEST_CASE(AUDIO_GAMING_8, "content/gaming/footstep3.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "38b84b04eb3f1993eb97b5d46fa2a444"); + PIPELINE_OK, kNullVideoHash, + "-2.87,-3.05,-4.10,-3.20,-2.20,-2.20,"); FFMPEG_TEST_CASE(AUDIO_GAMING_9, "content/gaming/footstep4.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "7a3927c3026fa96562b6c19950df0be0"); + PIPELINE_OK, kNullVideoHash, + "10.35,10.74,11.60,12.83,12.69,10.67,"); FFMPEG_TEST_CASE(AUDIO_GAMING_10, "content/gaming/laser1.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "d2750f18ffce52f3763daba52117b66b"); + PIPELINE_OK, kNullVideoHash, + "-9.48,-12.94,-1.75,7.66,5.61,-0.58,"); FFMPEG_TEST_CASE(AUDIO_GAMING_11, "content/gaming/laser2.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "bb398db9b2873e03a06d486d0a6f6d3a"); + PIPELINE_OK, kNullVideoHash, + "-7.53,-6.28,3.37,0.73,-5.83,-4.70,"); FFMPEG_TEST_CASE(AUDIO_GAMING_12, "content/gaming/laser3.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "deb996d817e155ecd56766749d856e74"); + PIPELINE_OK, kNullVideoHash, + "-13.62,-6.55,2.52,-10.10,-10.68,-5.43,"); FFMPEG_TEST_CASE(AUDIO_GAMING_13, "content/gaming/leg1.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "556e339fd0d1bdcb2d98f69063614067"); + PIPELINE_OK, kNullVideoHash, + "5.62,5.79,5.81,5.60,6.18,6.15,"); FFMPEG_TEST_CASE(AUDIO_GAMING_14, "content/gaming/leg2.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "313344cc2c02db5b23e336a9523b0c4a"); + PIPELINE_OK, kNullVideoHash, + "-0.88,1.32,2.74,3.07,0.88,-0.03,"); FFMPEG_TEST_CASE(AUDIO_GAMING_15, "content/gaming/leg3.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "25730f36ed51ba07eacca9c2b6235e6c"); + PIPELINE_OK, kNullVideoHash, + "17.77,18.59,19.57,18.84,17.62,17.22,"); FFMPEG_TEST_CASE(AUDIO_GAMING_16, "content/gaming/lock_on.ogg", PIPELINE_OK, - PIPELINE_OK, kNullHash, "92a3af2fc3597e7aaf5b06748daf5d6a"); + PIPELINE_OK, kNullVideoHash, + "3.08,-4.33,-5.04,-0.24,1.83,5.16,"); FFMPEG_TEST_CASE(AUDIO_GAMING_17, "content/gaming/enemy_lock_on.ogg", - PIPELINE_OK, PIPELINE_OK, kNullHash, - "9670d8f5a668cf85f8ae8d6f8e0fdcdc"); + PIPELINE_OK, PIPELINE_OK, kNullVideoHash, + "-2.24,-1.00,-2.75,-0.87,1.11,-0.58,"); FFMPEG_TEST_CASE(AUDIO_GAMING_18, "content/gaming/rocket_launcher.mp3", - PIPELINE_OK, PIPELINE_OK, kNullHash, - "91354320606584f4404514d914d01ee0"); + PIPELINE_OK, PIPELINE_OK, kNullVideoHash, + "-3.08,0.18,2.49,1.98,-2.20,-4.74,"); // Allocate gigabytes of memory, likely can't be run on 32bit machines. FFMPEG_TEST_CASE(BIG_MEM_1, "security/bigmem1.mov", DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(BIG_MEM_2, "security/looping1.mov", DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, - kNullHash, kNullHash); + kNullVideoHash, kNullAudioHash); FFMPEG_TEST_CASE(BIG_MEM_5, "security/looping5.mov", DEMUXER_ERROR_COULD_NOT_OPEN, DEMUXER_ERROR_COULD_NOT_OPEN, - kNullHash, kNullHash); -DISABLED_FFMPEG_TEST_CASE(BIG_MEM_3, "security/looping3.mov"); -DISABLED_FFMPEG_TEST_CASE(BIG_MEM_4, "security/looping4.mov"); + kNullVideoHash, kNullAudioHash); +FLAKY_FFMPEG_TEST_CASE(BIG_MEM_3, "security/looping3.mov"); +FLAKY_FFMPEG_TEST_CASE(BIG_MEM_4, "security/looping4.mov"); // Flaky under threading or for other reasons. Per rbultje, most of these will // never be reliable since FFmpeg does not guarantee consistency in error cases. // We only really care that these don't cause crashes or errors under tooling. -DISABLED_FFMPEG_TEST_CASE(Cr99652, "security/99652.webm"); -DISABLED_FFMPEG_TEST_CASE(Cr100464, "security/100464.webm"); -DISABLED_FFMPEG_TEST_CASE(Cr111342, "security/111342.ogm"); -DISABLED_FFMPEG_TEST_CASE(OGV_0, "security/big_dims.ogv"); -DISABLED_FFMPEG_TEST_CASE(OGV_3, "security/smclock_1_0.ogv"); -DISABLED_FFMPEG_TEST_CASE(OGV_4, "security/smclock.ogv.1.0.ogv"); -DISABLED_FFMPEG_TEST_CASE(OGV_6, "security/smclocktheora_1_10000.ogv"); -DISABLED_FFMPEG_TEST_CASE(OGV_13, "security/smclocktheora_1_790.ogv"); -DISABLED_FFMPEG_TEST_CASE(MP4_3, "security/clockh264aac_300413969.mp4"); -DISABLED_FFMPEG_TEST_CASE(MP4_4, "security/clockh264aac_301350139.mp4"); -DISABLED_FFMPEG_TEST_CASE(MP4_12, "security/assert1.mov"); +FLAKY_FFMPEG_TEST_CASE(Cr99652, "security/99652.webm"); +FLAKY_FFMPEG_TEST_CASE(Cr100464, "security/100464.webm"); +FLAKY_FFMPEG_TEST_CASE(Cr111342, "security/111342.ogm"); +FLAKY_FFMPEG_TEST_CASE(OGV_0, "security/big_dims.ogv"); +FLAKY_FFMPEG_TEST_CASE(OGV_3, "security/smclock_1_0.ogv"); +FLAKY_FFMPEG_TEST_CASE(OGV_4, "security/smclock.ogv.1.0.ogv"); +FLAKY_FFMPEG_TEST_CASE(OGV_6, "security/smclocktheora_1_10000.ogv"); +FLAKY_FFMPEG_TEST_CASE(OGV_13, "security/smclocktheora_1_790.ogv"); +FLAKY_FFMPEG_TEST_CASE(MP4_3, "security/clockh264aac_300413969.mp4"); +FLAKY_FFMPEG_TEST_CASE(MP4_4, "security/clockh264aac_301350139.mp4"); +FLAKY_FFMPEG_TEST_CASE(MP4_12, "security/assert1.mov"); // Not really flaky, but can't pass the seek test. -DISABLED_FFMPEG_TEST_CASE(MP4_10, "security/null1.m4a"); +FLAKY_FFMPEG_TEST_CASE(MP4_10, "security/null1.m4a"); + +// TODO(wolenetz/dalecurtis): The following have flaky audio hash result. +// See http://crbug.com/237371 +FLAKY_FFMPEG_TEST_CASE(Cr112976, "security/112976.ogg"); +FLAKY_FFMPEG_TEST_CASE(MKV_0, "security/nested_tags_lang.mka.627.628"); +FLAKY_FFMPEG_TEST_CASE(MKV_1, "security/nested_tags_lang.mka.667.628"); +FLAKY_FFMPEG_TEST_CASE(MP4_11, "security/null1.mp4"); + +// TODO(wolenetz/dalecurtis): The following have flaky init status: on mac +// ia32 Chrome, observed PIPELINE_OK instead of DECODER_ERROR_NOT_SUPPORTED. +FLAKY_FFMPEG_TEST_CASE(Cr112670, "security/112670.mp4"); +FLAKY_FFMPEG_TEST_CASE(OGV_17, "security/vorbis.482086.ogv"); + +// TODO(wolenetz/dalecurtis): The following have flaky init status: on mac +// ia32 Chrome, observed DUMUXER_ERROR_NO_SUPPORTED_STREAMS instead of +// DECODER_ERROR_NOT_SUPPORTED. +FLAKY_FFMPEG_TEST_CASE(Cr116927, "security/116927.ogv"); +FLAKY_FFMPEG_TEST_CASE(WEBM_2, "security/uninitialize.webm"); // Videos with massive gaps between frame timestamps that result in long hangs // with our pipeline. Should be uncommented when we support clockless playback. // FFMPEG_TEST_CASE(WEBM_0, "security/memcpy.webm", PIPELINE_OK, PIPELINE_OK, -// kNullHash, kNullHash); +// kNullVideoHash, kNullAudioHash); // FFMPEG_TEST_CASE(MP4_17, "security/assert2.mov", PIPELINE_OK, PIPELINE_OK, -// kNullHash, kNullHash); +// kNullVideoHash, kNullAudioHash); // FFMPEG_TEST_CASE(OGV_23, "security/assert2.ogv", PIPELINE_OK, PIPELINE_OK, -// kNullHash, kNullHash); +// kNullVideoHash, kNullAudioHash); TEST_P(FFmpegRegressionTest, BasicPlayback) { if (GetParam().init_status == PIPELINE_OK) { diff --git a/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc b/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc index 5831883..e5a1a64 100644 --- a/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc +++ b/media/filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "media/ffmpeg/ffmpeg_common.h" +#include "media/filters/ffmpeg_demuxer.h" #include "media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.h" #include "testing/gtest/include/gtest/gtest.h" @@ -284,16 +285,13 @@ class FFmpegH264ToAnnexBBitstreamConverterTest : public testing::Test { TEST_F(FFmpegH264ToAnnexBBitstreamConverterTest, Conversion_Success) { FFmpegH264ToAnnexBBitstreamConverter converter(&test_context_); - AVPacket test_packet; - CreatePacket(&test_packet, kPacketDataOkWithFieldLen4, + ScopedAVPacket test_packet(new AVPacket()); + CreatePacket(test_packet.get(), kPacketDataOkWithFieldLen4, sizeof(kPacketDataOkWithFieldLen4)); // Try out the actual conversion (should be successful and allocate new // packet and destroy the old one). - EXPECT_TRUE(converter.ConvertPacket(&test_packet)); - - // Clean-up the test packet. - av_destruct_packet(&test_packet); + EXPECT_TRUE(converter.ConvertPacket(test_packet.get())); // Converter will be automatically cleaned up. } @@ -302,18 +300,15 @@ TEST_F(FFmpegH264ToAnnexBBitstreamConverterTest, Conversion_SuccessBigPacket) { FFmpegH264ToAnnexBBitstreamConverter converter(&test_context_); // Create new packet with 1000 excess bytes. - AVPacket test_packet; + ScopedAVPacket test_packet(new AVPacket()); static uint8 excess_data[sizeof(kPacketDataOkWithFieldLen4) + 1000] = {0}; memcpy(excess_data, kPacketDataOkWithFieldLen4, sizeof(kPacketDataOkWithFieldLen4)); - CreatePacket(&test_packet, excess_data, sizeof(excess_data)); + CreatePacket(test_packet.get(), excess_data, sizeof(excess_data)); // Try out the actual conversion (should be successful and allocate new // packet and destroy the old one as we do NOT support in place transform). - EXPECT_TRUE(converter.ConvertPacket(&test_packet)); - - // Clean-up the test packet. - av_destruct_packet(&test_packet); + EXPECT_TRUE(converter.ConvertPacket(test_packet.get())); // Converter will be automatically cleaned up. } @@ -329,16 +324,13 @@ TEST_F(FFmpegH264ToAnnexBBitstreamConverterTest, Conversion_FailureNullParams) { EXPECT_FALSE(converter.ConvertPacket(NULL)); // Create new packet to test actual conversion. - AVPacket test_packet; - CreatePacket(&test_packet, kPacketDataOkWithFieldLen4, + ScopedAVPacket test_packet(new AVPacket()); + CreatePacket(test_packet.get(), kPacketDataOkWithFieldLen4, sizeof(kPacketDataOkWithFieldLen4)); // Try out the actual conversion (should be successful and allocate new // packet and destroy the old one). This should fail due to missing extradata. - EXPECT_FALSE(converter.ConvertPacket(&test_packet)); - - // Clean-up the test packet. - av_destruct_packet(&test_packet); + EXPECT_FALSE(converter.ConvertPacket(test_packet.get())); // Converted will be automatically cleaned up. } diff --git a/media/filters/pipeline_integration_test_base.cc b/media/filters/pipeline_integration_test_base.cc index 54cd2f8..68fa14a 100644 --- a/media/filters/pipeline_integration_test_base.cc +++ b/media/filters/pipeline_integration_test_base.cc @@ -21,7 +21,8 @@ using ::testing::AtMost; namespace media { -const char kNullHash[] = "d41d8cd98f00b204e9800998ecf8427e"; +const char kNullVideoHash[] = "d41d8cd98f00b204e9800998ecf8427e"; +const char kNullAudioHash[] = "0.00,0.00,0.00,0.00,0.00,0.00,"; PipelineIntegrationTestBase::PipelineIntegrationTestBase() : hashing_enabled_(false), diff --git a/media/filters/pipeline_integration_test_base.h b/media/filters/pipeline_integration_test_base.h index 228a380..ab6b8af 100644 --- a/media/filters/pipeline_integration_test_base.h +++ b/media/filters/pipeline_integration_test_base.h @@ -23,8 +23,11 @@ namespace media { class Decryptor; class Demuxer; -// Empty MD5 hash string. Used to verify empty audio or video tracks. -extern const char kNullHash[]; +// Empty MD5 hash string. Used to verify empty video tracks. +extern const char kNullVideoHash[]; + +// Empty hash string. Used to verify empty audio tracks. +extern const char kNullAudioHash[]; // Integration tests for Pipeline. Real demuxers, real decoders, and // base renderer implementations are used to verify pipeline functionality. The diff --git a/tools/valgrind/tsan/suppressions.txt b/tools/valgrind/tsan/suppressions.txt index 9d20cef..856a8bb 100644 --- a/tools/valgrind/tsan/suppressions.txt +++ b/tools/valgrind/tsan/suppressions.txt @@ -1117,3 +1117,12 @@ ... fun:gfx::GtkInitFromCommandLine } +{ + bug_239350 + ThreadSanitizer:Race + fun:av_buffer_unref + fun:av_frame_unref + fun:avcodec_decode_video2 + ... + fun:media::FFmpegVideoDecoder::Decode +} diff --git a/tools/valgrind/tsan/suppressions_win32.txt b/tools/valgrind/tsan/suppressions_win32.txt index 0126199..634b5b2 100644 --- a/tools/valgrind/tsan/suppressions_win32.txt +++ b/tools/valgrind/tsan/suppressions_win32.txt @@ -252,3 +252,14 @@ ... fun:net::NetworkChangeNotifierWinTest::~NetworkChangeNotifierWinTest } + +{ + bug_239350 + ThreadSanitizer:Race + ... + fun:av_freep + fun:av_buffer_unref + fun:av_frame_unref + ... + fun:media::FFmpegVideoDecoder::Decode +} diff --git a/webkit/media/crypto/ppapi/ffmpeg_cdm_audio_decoder.cc b/webkit/media/crypto/ppapi/ffmpeg_cdm_audio_decoder.cc index 145a379..aff7c75 100644 --- a/webkit/media/crypto/ppapi/ffmpeg_cdm_audio_decoder.cc +++ b/webkit/media/crypto/ppapi/ffmpeg_cdm_audio_decoder.cc @@ -27,7 +27,7 @@ namespace webkit_media { // Maximum number of channels with defined layout in src/media. static const int kMaxChannels = 8; -static CodecID CdmAudioCodecToCodecID( +static AVCodecID CdmAudioCodecToCodecID( cdm::AudioDecoderConfig::AudioCodec audio_codec) { switch (audio_codec) { case cdm::AudioDecoderConfig::kCodecVorbis: diff --git a/webkit/media/crypto/ppapi/ffmpeg_cdm_video_decoder.cc b/webkit/media/crypto/ppapi/ffmpeg_cdm_video_decoder.cc index 54a3bdf..6df16f9 100644 --- a/webkit/media/crypto/ppapi/ffmpeg_cdm_video_decoder.cc +++ b/webkit/media/crypto/ppapi/ffmpeg_cdm_video_decoder.cc @@ -44,7 +44,7 @@ static PixelFormat CdmVideoFormatToPixelFormat(cdm::VideoFormat video_format) { return PIX_FMT_NONE; } -static CodecID CdmVideoCodecToCodecID( +static AVCodecID CdmVideoCodecToCodecID( cdm::VideoDecoderConfig::VideoCodec video_codec) { switch (video_codec) { case cdm::VideoDecoderConfig::kCodecVp8: @@ -282,7 +282,7 @@ bool FFmpegCdmVideoDecoder::CopyAvFrameTo(cdm::VideoFrame* cdm_video_frame) { } cdm_video_frame->FrameBuffer()->SetSize(space_required); - CopyPlane(av_frame_->base[cdm::VideoFrame::kYPlane], + CopyPlane(av_frame_->data[cdm::VideoFrame::kYPlane], av_frame_->linesize[cdm::VideoFrame::kYPlane], av_frame_->width, av_frame_->height, @@ -291,14 +291,14 @@ bool FFmpegCdmVideoDecoder::CopyAvFrameTo(cdm::VideoFrame* cdm_video_frame) { const int uv_stride = av_frame_->width / 2; const int uv_rows = av_frame_->height / 2; - CopyPlane(av_frame_->base[cdm::VideoFrame::kUPlane], + CopyPlane(av_frame_->data[cdm::VideoFrame::kUPlane], av_frame_->linesize[cdm::VideoFrame::kUPlane], uv_stride, uv_rows, uv_stride, cdm_video_frame->FrameBuffer()->Data() + y_size); - CopyPlane(av_frame_->base[cdm::VideoFrame::kVPlane], + CopyPlane(av_frame_->data[cdm::VideoFrame::kVPlane], av_frame_->linesize[cdm::VideoFrame::kVPlane], uv_stride, uv_rows, -- cgit v1.1