| Index: media/filters/video_renderer_base.cc
|
| diff --git a/media/filters/video_renderer_base.cc b/media/filters/video_renderer_base.cc
|
| index ffd942bbea602eca34e172b867853eea58c7278a..9f23d7d5b70ae6b2ee8bf3d01f67b3f18510f920 100644
|
| --- a/media/filters/video_renderer_base.cc
|
| +++ b/media/filters/video_renderer_base.cc
|
| @@ -59,6 +59,11 @@ void VideoRendererBase::Flush(const base::Closure& callback) {
|
| }
|
|
|
| void VideoRendererBase::Stop(const base::Closure& callback) {
|
| + if (state_ == kStopped) {
|
| + callback.Run();
|
| + return;
|
| + }
|
| +
|
| base::PlatformThreadHandle thread_to_join = base::kNullThreadHandle;
|
| {
|
| base::AutoLock auto_lock(lock_);
|
| @@ -81,7 +86,7 @@ void VideoRendererBase::Stop(const base::Closure& callback) {
|
| if (thread_to_join != base::kNullThreadHandle)
|
| base::PlatformThread::Join(thread_to_join);
|
|
|
| - callback.Run();
|
| + decoder_->Stop(callback);
|
| }
|
|
|
| void VideoRendererBase::SetPlaybackRate(float playback_rate) {
|
| @@ -101,7 +106,7 @@ void VideoRendererBase::Seek(base::TimeDelta time, const FilterStatusCB& cb) {
|
| AttemptRead_Locked();
|
| }
|
|
|
| -void VideoRendererBase::Initialize(VideoDecoder* decoder,
|
| +void VideoRendererBase::Initialize(const scoped_refptr<VideoDecoder>& decoder,
|
| const PipelineStatusCB& pipeline_status_cb,
|
| const StatisticsCB& statistics_cb,
|
| const VideoTimeCB& video_time_cb) {
|
| @@ -452,7 +457,10 @@ void VideoRendererBase::AttemptFlush_Locked() {
|
| if (!pending_paint_ && !pending_read_) {
|
| state_ = kFlushed;
|
| current_frame_ = NULL;
|
| - ResetAndRunCB(&flush_callback_);
|
| +
|
| + base::Closure flush_cb = flush_callback_;
|
| + flush_callback_.Reset();
|
| + decoder_->Flush(flush_cb);
|
| }
|
| }
|
|
|
|
|