Index: media/filters/video_renderer_base.cc |
diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc |
index 37a24edd7b1fb6890baa7eeb8119f64c6faafb21..b2624240645cb9f65ca785f3085597f4a15c0173 100644 |
--- a/media/filters/video_renderer_base.cc |
+++ b/media/filters/video_renderer_base.cc |
@@ -45,7 +45,7 @@ VideoRendererBase::VideoRendererBase( |
VideoRendererBase::~VideoRendererBase() { |
base::AutoLock auto_lock(lock_); |
- CHECK(state_ == kUninitialized || state_ == kStopped) << state_; |
+ CHECK(state_ == kStopped || state_ == kUninitialized) << state_; |
CHECK_EQ(thread_, base::kNullThreadHandle); |
} |
@@ -92,7 +92,7 @@ void VideoRendererBase::ResetDecoder() { |
void VideoRendererBase::Stop(const base::Closure& callback) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
base::AutoLock auto_lock(lock_); |
- if (state_ == kUninitialized || state_ == kStopped) { |
+ if (state_ == kStopped) { |
acolwell GONE FROM CHROMIUM
2013/02/21 21:07:16
Do we still want to fall through if called in kUni
scherkus (not reviewing)
2013/02/22 01:45:49
GAH I forgot to fix this
|
callback.Run(); |
return; |
} |
@@ -126,7 +126,12 @@ void VideoRendererBase::Stop(const base::Closure& callback) { |
return; |
} |
- decoder_->Stop(callback); |
+ if (decoder_) { |
+ decoder_->Stop(callback); |
+ return; |
+ } |
+ |
+ callback.Run(); |
} |
void VideoRendererBase::StopDecoder(const base::Closure& callback) { |
@@ -189,6 +194,7 @@ void VideoRendererBase::Initialize(const scoped_refptr<DemuxerStream>& stream, |
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(), |
@@ -216,6 +222,8 @@ void VideoRendererBase::OnDecoderSelected( |
if (state_ == kStopped) |
return; |
+ DCHECK_EQ(state_, kInitializing); |
+ |
if (!selected_decoder) { |
state_ = kUninitialized; |
base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED); |
@@ -515,6 +523,7 @@ void VideoRendererBase::AttemptRead_Locked() { |
return; |
case kUninitialized: |
+ case kInitializing: |
case kPrerolled: |
case kFlushingDecoder: |
case kFlushed: |
@@ -527,6 +536,9 @@ void VideoRendererBase::AttemptRead_Locked() { |
void VideoRendererBase::OnDecoderResetDone() { |
base::AutoLock auto_lock(lock_); |
+ if (state_ == kStopped) |
+ return; |
+ |
DCHECK_EQ(kFlushingDecoder, state_); |
DCHECK(!pending_read_); |