Chromium Code Reviews| 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(); |
|
wolenetz
2016/08/25 18:56:14
Would this be better integrated with how the MSE p
DaleCurtis
2016/08/29 21:14:58
Good point. I think we just need to add AbortPendi
wolenetz
2016/08/30 18:52:12
Acknowledged.
|
| + |
| // 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_)); |
| } |