| Index: media/filters/ffmpeg_video_decoder.cc
|
| diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc
|
| index f05fa3f98e36b743b761173552a35f7a85c8defa..ff44bf8a70c6cca00dc561e181d98736767bcabe 100644
|
| --- a/media/filters/ffmpeg_video_decoder.cc
|
| +++ b/media/filters/ffmpeg_video_decoder.cc
|
| @@ -207,6 +207,11 @@ void FFmpegVideoDecoder::Stop(const base::Closure& closure) {
|
| return;
|
| }
|
|
|
| + if (state_ == kUninitialized) {
|
| + closure.Run();
|
| + return;
|
| + }
|
| +
|
| if (decryptor_)
|
| decryptor_->CancelDecrypt();
|
|
|
| @@ -226,7 +231,9 @@ void FFmpegVideoDecoder::DoStop() {
|
| }
|
|
|
| FFmpegVideoDecoder::~FFmpegVideoDecoder() {
|
| - ReleaseFFmpegResources();
|
| + DCHECK_EQ(kUninitialized, state_);
|
| + DCHECK(!codec_context_);
|
| + DCHECK(!av_frame_);
|
| }
|
|
|
| void FFmpegVideoDecoder::DoRead(const ReadCB& read_cb) {
|
| @@ -528,11 +535,10 @@ bool FFmpegVideoDecoder::ConfigureDecoder() {
|
| codec_context_->release_buffer = ReleaseVideoBufferImpl;
|
|
|
| AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
| - if (!codec)
|
| - return false;
|
| -
|
| - if (avcodec_open2(codec_context_, codec, NULL) < 0)
|
| + if (!codec || avcodec_open2(codec_context_, codec, NULL) < 0) {
|
| + ReleaseFFmpegResources();
|
| return false;
|
| + }
|
|
|
| av_frame_ = avcodec_alloc_frame();
|
| return true;
|
|
|