| Index: media/base/pipeline_impl.cc
|
| diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
|
| index 43fdf5eb951113bab49777c1f94e89b3dc55434e..08817780663251f95d48e6abc0afc65e12c65b0a 100644
|
| --- a/media/base/pipeline_impl.cc
|
| +++ b/media/base/pipeline_impl.cc
|
| @@ -311,6 +311,9 @@ void PipelineImpl::RendererWrapper::Seek(base::TimeDelta time) {
|
| DCHECK(!pending_callbacks_);
|
| SerialRunner::Queue bound_fns;
|
|
|
| + // Abort any reads the renderer may be blocked on.
|
| + demuxer_->AbortPendingReads();
|
| +
|
| // Pause.
|
| if (text_renderer_) {
|
| bound_fns.Push(base::Bind(&TextRenderer::Pause,
|
| @@ -352,8 +355,7 @@ void PipelineImpl::RendererWrapper::Suspend() {
|
|
|
| SetState(kSuspending);
|
|
|
| - // Freeze playback and record the media time before flushing. (Flushing clears
|
| - // the value.)
|
| + // Freeze playback and record the media time before destroying the renderer.
|
| shared_state_.renderer->SetPlaybackRate(0.0);
|
| {
|
| base::AutoLock auto_lock(shared_state_lock_);
|
| @@ -361,6 +363,9 @@ void PipelineImpl::RendererWrapper::Suspend() {
|
| DCHECK(shared_state_.suspend_timestamp != kNoTimestamp);
|
| }
|
|
|
| + // Abort any reads the renderer may be blocked on.
|
| + demuxer_->AbortPendingReads();
|
| +
|
| // Queue the asynchronous actions required to stop playback.
|
| SerialRunner::Queue fns;
|
|
|
| @@ -369,14 +374,7 @@ void PipelineImpl::RendererWrapper::Suspend() {
|
| base::Unretained(text_renderer_.get())));
|
| }
|
|
|
| - fns.Push(base::Bind(&Renderer::Flush,
|
| - base::Unretained(shared_state_.renderer.get())));
|
| -
|
| - if (text_renderer_) {
|
| - fns.Push(base::Bind(&TextRenderer::Flush,
|
| - base::Unretained(text_renderer_.get())));
|
| - }
|
| -
|
| + // No need to flush the renderer since it's going to be destroyed.
|
| pending_callbacks_ = SerialRunner::Run(
|
| fns, base::Bind(&RendererWrapper::CompleteSuspend, weak_this_));
|
| }
|
|
|