Index: media/filters/video_renderer_base.cc |
=================================================================== |
--- media/filters/video_renderer_base.cc (revision 184730) |
+++ media/filters/video_renderer_base.cc (working copy) |
@@ -116,7 +116,12 @@ |
return; |
} |
- decoder_->Stop(callback); |
+ if (decoder_) { |
+ decoder_->Stop(callback); |
+ return; |
+ } |
+ |
+ callback.Run(); |
} |
void VideoRendererBase::StopDecoder(const base::Closure& callback) { |
@@ -178,6 +183,7 @@ |
error_cb_ = error_cb; |
get_time_cb_ = get_time_cb; |
get_duration_cb_ = get_duration_cb; |
+ state_ = kInitializing; |
scoped_ptr<VideoDecoderSelector> decoder_selector( |
new VideoDecoderSelector(base::MessageLoopProxy::current(), |
@@ -205,6 +211,8 @@ |
if (state_ == kStopped) |
return; |
+ DCHECK_EQ(state_, kInitializing); |
+ |
if (!selected_decoder) { |
state_ = kUninitialized; |
base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED); |
@@ -613,6 +621,7 @@ |
return; |
case kUninitialized: |
+ case kInitializing: |
case kPrerolled: |
case kFlushingDecoder: |
case kFlushed: |
@@ -625,6 +634,9 @@ |
void VideoRendererBase::OnDecoderResetDone() { |
base::AutoLock auto_lock(lock_); |
+ if (state_ == kStopped) |
+ return; |
+ |
DCHECK_EQ(kFlushingDecoder, state_); |
DCHECK(!pending_read_); |