Chromium Code Reviews| 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_); |