summaryrefslogtreecommitdiffstats
path: root/chromecast
diff options
context:
space:
mode:
authoryucliu <yucliu@chromium.org>2015-10-23 13:21:56 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-23 20:22:32 +0000
commit072cee8f7ca1c6f239d362249c4196552cbff01a (patch)
tree17312a174c88f9b1a9e8841b7ad3ce4faca35214 /chromecast
parentbaac911f63e05df2eab5adf8544781ffd3ec01ca (diff)
downloadchromium_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.cc16
-rw-r--r--chromecast/media/cma/pipeline/media_pipeline_impl.h4
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);