Commit 9ca5b72d authored by gunsch's avatar gunsch Committed by Commit bot

Chromecast buildfix: update CmaRenderer for Initialize API change.

See: https://codereview.chromium.org/870693002

R=erickung@chromium.org,dalecurtis@chromium.org
BUG=450764

Review URL: https://codereview.chromium.org/869283003

Cr-Commit-Position: refs/heads/master@{#313195}
parent 9b5a14df
...@@ -62,12 +62,15 @@ CmaRenderer::CmaRenderer(scoped_ptr<MediaPipeline> media_pipeline) ...@@ -62,12 +62,15 @@ CmaRenderer::CmaRenderer(scoped_ptr<MediaPipeline> media_pipeline)
CmaRenderer::~CmaRenderer() { CmaRenderer::~CmaRenderer() {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
FireAllPendingCallbacks(); if (!init_cb_.is_null())
base::ResetAndReturn(&init_cb_).Run(::media::PIPELINE_ERROR_ABORT);
else if (!flush_cb_.is_null())
base::ResetAndReturn(&flush_cb_).Run();
} }
void CmaRenderer::Initialize( void CmaRenderer::Initialize(
::media::DemuxerStreamProvider* demuxer_stream_provider, ::media::DemuxerStreamProvider* demuxer_stream_provider,
const base::Closure& init_cb, const ::media::PipelineStatusCB& init_cb,
const ::media::StatisticsCB& statistics_cb, const ::media::StatisticsCB& statistics_cb,
const ::media::BufferingStateCB& buffering_state_cb, const ::media::BufferingStateCB& buffering_state_cb,
const PaintCB& paint_cb, const PaintCB& paint_cb,
...@@ -259,12 +262,16 @@ void CmaRenderer::InitializeAudioPipeline() { ...@@ -259,12 +262,16 @@ void CmaRenderer::InitializeAudioPipeline() {
void CmaRenderer::OnAudioPipelineInitializeDone( void CmaRenderer::OnAudioPipelineInitializeDone(
::media::PipelineStatus status) { ::media::PipelineStatus status) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
// OnError() may be fired at any time, even before initialization is complete.
if (state_ == kError)
return;
DCHECK_EQ(state_, kUninitialized) << state_; DCHECK_EQ(state_, kUninitialized) << state_;
DCHECK(!init_cb_.is_null()); DCHECK(!init_cb_.is_null());
if (status != ::media::PIPELINE_OK) { if (status != ::media::PIPELINE_OK) {
has_audio_ = false; has_audio_ = false;
OnError(status); base::ResetAndReturn(&init_cb_).Run(status);
return; return;
} }
...@@ -321,17 +328,21 @@ void CmaRenderer::InitializeVideoPipeline() { ...@@ -321,17 +328,21 @@ void CmaRenderer::InitializeVideoPipeline() {
void CmaRenderer::OnVideoPipelineInitializeDone( void CmaRenderer::OnVideoPipelineInitializeDone(
::media::PipelineStatus status) { ::media::PipelineStatus status) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
// OnError() may be fired at any time, even before initialization is complete.
if (state_ == kError)
return;
DCHECK_EQ(state_, kUninitialized) << state_; DCHECK_EQ(state_, kUninitialized) << state_;
DCHECK(!init_cb_.is_null()); DCHECK(!init_cb_.is_null());
if (status != ::media::PIPELINE_OK) { if (status != ::media::PIPELINE_OK) {
has_video_ = false; has_video_ = false;
OnError(status); base::ResetAndReturn(&init_cb_).Run(status);
return; return;
} }
CompleteStateTransition(kFlushed); CompleteStateTransition(kFlushed);
base::ResetAndReturn(&init_cb_).Run(); base::ResetAndReturn(&init_cb_).Run(::media::PIPELINE_OK);
} }
void CmaRenderer::OnEosReached(bool is_audio) { void CmaRenderer::OnEosReached(bool is_audio) {
...@@ -423,18 +434,18 @@ void CmaRenderer::OnError(::media::PipelineStatus error) { ...@@ -423,18 +434,18 @@ void CmaRenderer::OnError(::media::PipelineStatus error) {
DCHECK_NE(::media::PIPELINE_OK, error) << "PIPELINE_OK isn't an error!"; DCHECK_NE(::media::PIPELINE_OK, error) << "PIPELINE_OK isn't an error!";
LOG(ERROR) << "CMA error encountered: " << error; LOG(ERROR) << "CMA error encountered: " << error;
// Pipeline will destroy |this| as the result of error. State old_state = state_;
if (state_ != kError)
error_cb_.Run(error);
CompleteStateTransition(kError); CompleteStateTransition(kError);
FireAllPendingCallbacks();
}
void CmaRenderer::FireAllPendingCallbacks() { if (old_state != kError) {
DCHECK(thread_checker_.CalledOnValidThread()); if (!init_cb_.is_null()) {
if (!init_cb_.is_null()) base::ResetAndReturn(&init_cb_).Run(error);
base::ResetAndReturn(&init_cb_).Run(); return;
}
error_cb_.Run(error);
}
// After OnError() returns, the pipeline may destroy |this|.
if (!flush_cb_.is_null()) if (!flush_cb_.is_null())
base::ResetAndReturn(&flush_cb_).Run(); base::ResetAndReturn(&flush_cb_).Run();
} }
......
...@@ -40,7 +40,7 @@ class CmaRenderer : public ::media::Renderer { ...@@ -40,7 +40,7 @@ class CmaRenderer : public ::media::Renderer {
// ::media::Renderer implementation: // ::media::Renderer implementation:
void Initialize( void Initialize(
::media::DemuxerStreamProvider* demuxer_stream_provider, ::media::DemuxerStreamProvider* demuxer_stream_provider,
const base::Closure& init_cb, const ::media::PipelineStatusCB& init_cb,
const ::media::StatisticsCB& statistics_cb, const ::media::StatisticsCB& statistics_cb,
const ::media::BufferingStateCB& buffering_state_cb, const ::media::BufferingStateCB& buffering_state_cb,
const PaintCB& paint_cb, const PaintCB& paint_cb,
...@@ -86,8 +86,6 @@ class CmaRenderer : public ::media::Renderer { ...@@ -86,8 +86,6 @@ class CmaRenderer : public ::media::Renderer {
void OnFlushDone(::media::PipelineStatus status); void OnFlushDone(::media::PipelineStatus status);
void OnError(::media::PipelineStatus status); void OnError(::media::PipelineStatus status);
void FireAllPendingCallbacks();
// Begin a state transition. // Begin a state transition.
// Return true if delayed because of a pending state transition. // Return true if delayed because of a pending state transition.
void BeginStateTransition(); void BeginStateTransition();
...@@ -104,7 +102,7 @@ class CmaRenderer : public ::media::Renderer { ...@@ -104,7 +102,7 @@ class CmaRenderer : public ::media::Renderer {
// Set of callbacks. // Set of callbacks.
PaintCB paint_cb_; PaintCB paint_cb_;
base::Closure init_cb_; ::media::PipelineStatusCB init_cb_;
::media::StatisticsCB statistics_cb_; ::media::StatisticsCB statistics_cb_;
base::Closure ended_cb_; base::Closure ended_cb_;
::media::PipelineStatusCB error_cb_; ::media::PipelineStatusCB error_cb_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment