diff options
author | yucliu <yucliu@chromium.org> | 2015-10-23 13:21:56 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-23 20:22:32 +0000 |
commit | 072cee8f7ca1c6f239d362249c4196552cbff01a (patch) | |
tree | 17312a174c88f9b1a9e8841b7ad3ce4faca35214 /chromecast | |
parent | baac911f63e05df2eab5adf8544781ffd3ec01ca (diff) | |
download | chromium_src-072cee8f7ca1c6f239d362249c4196552cbff01a.zip chromium_src-072cee8f7ca1c6f239d362249c4196552cbff01a.tar.gz chromium_src-072cee8f7ca1c6f239d362249c4196552cbff01a.tar.bz2 |
[Chromecast] stop backend after flush
After MediaPipelineBackend::Stop, no buffer should be pushed. So we need
to do the Flush first, then Stop.
BUG=internal b/23751784
Review URL: https://codereview.chromium.org/1419243002
Cr-Commit-Position: refs/heads/master@{#355869}
Diffstat (limited to 'chromecast')
-rw-r--r-- | chromecast/media/cma/pipeline/media_pipeline_impl.cc | 16 | ||||
-rw-r--r-- | chromecast/media/cma/pipeline/media_pipeline_impl.h | 4 |
2 files changed, 10 insertions, 10 deletions
diff --git a/chromecast/media/cma/pipeline/media_pipeline_impl.cc b/chromecast/media/cma/pipeline/media_pipeline_impl.cc index 970afe4..e741470 100644 --- a/chromecast/media/cma/pipeline/media_pipeline_impl.cc +++ b/chromecast/media/cma/pipeline/media_pipeline_impl.cc @@ -267,12 +267,6 @@ void MediaPipelineImpl::Flush(const ::media::PipelineStatusCB& status_cb) { buffering_controller_->Reset(); - // Stop the backend - if (!media_pipeline_backend_->Stop()) { - status_cb.Run(::media::PIPELINE_ERROR_ABORT); - return; - } - // Flush both the audio and video pipeline. ::media::SerialRunner::Queue bound_fns; if (audio_pipeline_) { @@ -286,7 +280,7 @@ void MediaPipelineImpl::Flush(const ::media::PipelineStatusCB& status_cb) { base::Unretained(video_pipeline_.get()))); } ::media::PipelineStatusCB transition_cb = - base::Bind(&MediaPipelineImpl::StateTransition, weak_this_, status_cb); + base::Bind(&MediaPipelineImpl::OnFlushDone, weak_this_, status_cb); pending_flush_callbacks_ = ::media::SerialRunner::Run(bound_fns, transition_cb); } @@ -342,9 +336,15 @@ void MediaPipelineImpl::SetVolume(float volume) { audio_pipeline_->SetVolume(volume); } -void MediaPipelineImpl::StateTransition( +void MediaPipelineImpl::OnFlushDone( const ::media::PipelineStatusCB& status_cb, ::media::PipelineStatus status) { + // Stop the backend + if (!media_pipeline_backend_->Stop()) { + status_cb.Run(::media::PIPELINE_ERROR_ABORT); + return; + } + pending_flush_callbacks_.reset(); status_cb.Run(status); } diff --git a/chromecast/media/cma/pipeline/media_pipeline_impl.h b/chromecast/media/cma/pipeline/media_pipeline_impl.h index c59b63d..ac84e84 100644 --- a/chromecast/media/cma/pipeline/media_pipeline_impl.h +++ b/chromecast/media/cma/pipeline/media_pipeline_impl.h @@ -69,8 +69,8 @@ class MediaPipelineImpl : public MediaPipelineBackend::Delegate { void SetCdm(BrowserCdmCast* cdm); private: - void StateTransition(const ::media::PipelineStatusCB& status_cb, - ::media::PipelineStatus status); + void OnFlushDone(const ::media::PipelineStatusCB& status_cb, + ::media::PipelineStatus status); // Invoked to notify about a change of buffering state. void OnBufferingNotification(bool is_buffering); |