Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(487)

Unified Diff: media/filters/ffmpeg_video_decoder.cc

Issue 10990039: Enforce Stop() is always called before dtor in FFmepgVideoDecoder. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: check more in dtor Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698