| Index: chromecast/renderer/media/cma_renderer.cc
|
| diff --git a/chromecast/renderer/media/cma_renderer.cc b/chromecast/renderer/media/cma_renderer.cc
|
| index 19e06b099f557f6c9c0cc73c731b1f858fbc1b0a..cb2191dfa8a5e2ea38b05326066c432778cb9764 100644
|
| --- a/chromecast/renderer/media/cma_renderer.cc
|
| +++ b/chromecast/renderer/media/cma_renderer.cc
|
| @@ -26,6 +26,7 @@
|
| #include "media/base/bind_to_current_loop.h"
|
| #include "media/base/demuxer_stream_provider.h"
|
| #include "media/base/pipeline_status.h"
|
| +#include "media/base/renderer_client.h"
|
| #include "media/base/time_delta_interpolator.h"
|
| #include "media/base/video_renderer_sink.h"
|
| #include "media/renderers/gpu_video_accelerator_factories.h"
|
| @@ -86,21 +87,12 @@ CmaRenderer::~CmaRenderer() {
|
|
|
| void CmaRenderer::Initialize(
|
| ::media::DemuxerStreamProvider* demuxer_stream_provider,
|
| - const ::media::PipelineStatusCB& init_cb,
|
| - const ::media::StatisticsCB& statistics_cb,
|
| - const ::media::BufferingStateCB& buffering_state_cb,
|
| - const base::Closure& ended_cb,
|
| - const ::media::PipelineStatusCB& error_cb,
|
| - const base::Closure& waiting_for_decryption_key_cb) {
|
| + ::media::RendererClient* client,
|
| + const ::media::PipelineStatusCB& init_cb) {
|
| CMALOG(kLogControl) << __FUNCTION__;
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| DCHECK_EQ(state_, kUninitialized) << state_;
|
| DCHECK(!init_cb.is_null());
|
| - DCHECK(!statistics_cb.is_null());
|
| - DCHECK(!ended_cb.is_null());
|
| - DCHECK(!error_cb.is_null());
|
| - DCHECK(!buffering_state_cb.is_null());
|
| - DCHECK(!waiting_for_decryption_key_cb.is_null());
|
| DCHECK(demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO) ||
|
| demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO));
|
|
|
| @@ -110,14 +102,11 @@ void CmaRenderer::Initialize(
|
| BeginStateTransition();
|
|
|
| demuxer_stream_provider_ = demuxer_stream_provider;
|
| - statistics_cb_ = statistics_cb;
|
| - buffering_state_cb_ = buffering_state_cb;
|
| - ended_cb_ = ended_cb;
|
| - error_cb_ = error_cb;
|
| - waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb;
|
| + client_ = client;
|
|
|
| MediaPipelineClient media_pipeline_client;
|
| - media_pipeline_client.error_cb = ::media::BindToCurrentLoop(error_cb_);
|
| + media_pipeline_client.error_cb =
|
| + ::media::BindToCurrentLoop(base::Bind(&CmaRenderer::OnError, weak_this_));
|
| media_pipeline_client.buffering_state_cb = ::media::BindToCurrentLoop(
|
| base::Bind(&CmaRenderer::OnBufferingNotification, weak_this_));
|
| media_pipeline_client.time_update_cb = ::media::BindToCurrentLoop(
|
| @@ -161,7 +150,7 @@ void CmaRenderer::StartPlayingFrom(base::TimeDelta time) {
|
| BeginStateTransition();
|
|
|
| if (state_ == kError) {
|
| - error_cb_.Run(::media::PIPELINE_ERROR_ABORT);
|
| + client_->OnError(::media::PIPELINE_ERROR_ABORT);
|
| CompleteStateTransition(kError);
|
| return;
|
| }
|
| @@ -372,7 +361,7 @@ void CmaRenderer::OnVideoPipelineInitializeDone(
|
| }
|
|
|
| void CmaRenderer::OnWaitForKey(bool is_audio) {
|
| - waiting_for_decryption_key_cb_.Run();
|
| + client_->OnWaitingForDecryptionKey();
|
| }
|
|
|
| void CmaRenderer::OnEosReached(bool is_audio) {
|
| @@ -395,13 +384,13 @@ void CmaRenderer::OnEosReached(bool is_audio) {
|
| CMALOG(kLogControl) << __FUNCTION__ << " audio_finished=" << audio_finished
|
| << " video_finished=" << video_finished;
|
| if (audio_finished && video_finished)
|
| - ended_cb_.Run();
|
| + client_->OnEnded();
|
| }
|
|
|
| void CmaRenderer::OnStatisticsUpdated(
|
| const ::media::PipelineStatistics& stats) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - statistics_cb_.Run(stats);
|
| + client_->OnStatisticsUpdate(stats);
|
| }
|
|
|
| void CmaRenderer::OnNaturalSizeChanged(const gfx::Size& size) {
|
| @@ -433,7 +422,8 @@ void CmaRenderer::OnBufferingNotification(
|
| ::media::BufferingState buffering_state) {
|
| CMALOG(kLogControl) << __FUNCTION__ << ": state=" << state_
|
| << ", buffering=" << buffering_state;
|
| - buffering_state_cb_.Run(buffering_state);
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + client_->OnBufferingStateChange(buffering_state);
|
| }
|
|
|
| void CmaRenderer::OnFlushDone() {
|
| @@ -463,7 +453,7 @@ void CmaRenderer::OnError(::media::PipelineStatus error) {
|
| base::ResetAndReturn(&init_cb_).Run(error);
|
| return;
|
| }
|
| - error_cb_.Run(error);
|
| + client_->OnError(error);
|
| }
|
|
|
| // After OnError() returns, the pipeline may destroy |this|.
|
|
|