From 240faaf618d2247aa7da87fab9360cac95c3ba38 Mon Sep 17 00:00:00 2001 From: "fbarchard@chromium.org" Date: Wed, 7 Apr 2010 02:03:59 +0000 Subject: media disable threads for ogg to avoid shutdown crash BUG=40458 TEST=ffmpeg_tests still2.ogv Review URL: http://codereview.chromium.org/1539022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43800 0039d316-1c4b-4281-b951-d872f2087c98 --- media/filters/ffmpeg_video_decode_engine.cc | 7 ++++++- media/test/ffmpeg_tests/ffmpeg_tests.cc | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'media') diff --git a/media/filters/ffmpeg_video_decode_engine.cc b/media/filters/ffmpeg_video_decode_engine.cc index 916890b..568e322 100644 --- a/media/filters/ffmpeg_video_decode_engine.cc +++ b/media/filters/ffmpeg_video_decode_engine.cc @@ -48,8 +48,13 @@ void FFmpegVideoDecodeEngine::Initialize(AVStream* stream, Task* done_cb) { codec_context_->error_recognition = FF_ER_CAREFUL; AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); + + // TODO(fbarchard): On next ffmpeg roll, retest Theora multi-threading. + int decode_threads = (codec_context_->codec_id == CODEC_ID_THEORA) + ? 1 : kDecodeThreads; + if (codec && - avcodec_thread_init(codec_context_, kDecodeThreads) >= 0 && + avcodec_thread_init(codec_context_, decode_threads) >= 0 && avcodec_open(codec_context_, codec) >= 0) { state_ = kNormal; } else { diff --git a/media/test/ffmpeg_tests/ffmpeg_tests.cc b/media/test/ffmpeg_tests/ffmpeg_tests.cc index 9dd7277..ff130d1 100644 --- a/media/test/ffmpeg_tests/ffmpeg_tests.cc +++ b/media/test/ffmpeg_tests/ffmpeg_tests.cc @@ -207,6 +207,13 @@ int main(int argc, const char** argv) { return 1; } + // TODO(fbarchard): On next ffmpeg roll, retest if this work around is needed. + if (codec_context->codec_id == CODEC_ID_THEORA) { + std::cerr << "Warning: Disabling threads to avoid Theora bug " + << in_path << std::endl; + video_threads = 1; + } + codec_context->flags2 |= CODEC_FLAG2_FAST; // Initialize threaded decode. -- cgit v1.1