Chromium Code Reviews| Index: media/mojo/services/mojo_renderer_service.cc |
| diff --git a/media/mojo/services/mojo_renderer_service.cc b/media/mojo/services/mojo_renderer_service.cc |
| index d4d2c9aec29e32aeb2c16e37d51261a256e3e430..bd3da14ef1da9f2d21a5438565a19cb6636407c3 100644 |
| --- a/media/mojo/services/mojo_renderer_service.cc |
| +++ b/media/mojo/services/mojo_renderer_service.cc |
| @@ -11,6 +11,7 @@ |
| #include "media/base/audio_decoder.h" |
| #include "media/base/audio_renderer.h" |
| #include "media/base/audio_renderer_sink.h" |
| +#include "media/base/cdm_context.h" |
| #include "media/base/decryptor.h" |
| #include "media/base/media_log.h" |
| #include "media/base/video_renderer.h" |
| @@ -33,8 +34,10 @@ static void LogMediaSourceError(const scoped_refptr<MediaLog>& media_log, |
| static void PaintNothing(const scoped_refptr<VideoFrame>& frame) { |
| } |
| -MojoRendererService::MojoRendererService() |
| - : state_(STATE_UNINITIALIZED), |
| +MojoRendererService::MojoRendererService( |
| + CdmContextProvider* cdm_context_provider) |
| + : cdm_context_provider_(cdm_context_provider), |
| + state_(STATE_UNINITIALIZED), |
| last_media_time_usec_(0), |
| weak_factory_(this) { |
| weak_this_ = weak_factory_.GetWeakPtr(); |
| @@ -109,6 +112,25 @@ void MojoRendererService::SetVolume(float volume) { |
| renderer_->SetVolume(volume); |
| } |
| +void MojoRendererService::SetCdm(int32_t cdm_id, |
| + const mojo::Callback<void(bool)>& callback) { |
| + if (!cdm_context_provider_) { |
| + LOG(ERROR) << "CDM context provider not available."; |
|
ddorwin
2015/05/15 19:10:07
Should this be more helpful? For example, it wasn'
|
| + callback.Run(false); |
| + return; |
| + } |
| + |
| + CdmContext* cdm_context = cdm_context_provider_->GetCdmContext(cdm_id); |
| + if (!cdm_context) { |
| + LOG(ERROR) << "CDM context not found: " << cdm_id; |
|
ddorwin
2015/05/15 19:10:07
Not DLOG? Same above.
suggestion: s/: / for /
|
| + callback.Run(false); |
| + return; |
| + } |
| + |
| + renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached, |
| + weak_this_, callback)); |
| +} |
| + |
| void MojoRendererService::OnStreamReady(const mojo::Closure& callback) { |
| DCHECK_EQ(state_, STATE_INITIALIZING); |
| @@ -168,7 +190,7 @@ void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { |
| void MojoRendererService::OnBufferingStateChanged( |
| BufferingState new_buffering_state) { |
| - DVLOG(2) << __FUNCTION__ << "(" << new_buffering_state << ") "; |
| + DVLOG(2) << __FUNCTION__ << "(" << new_buffering_state << ")"; |
| client_->OnBufferingStateChange( |
| static_cast<mojo::BufferingState>(new_buffering_state)); |
| } |
| @@ -180,7 +202,7 @@ void MojoRendererService::OnRendererEnded() { |
| } |
| void MojoRendererService::OnError(PipelineStatus error) { |
| - DVLOG(1) << __FUNCTION__; |
| + DVLOG(1) << __FUNCTION__ << "(" << error << ")"; |
| state_ = STATE_ERROR; |
| client_->OnError(); |
| } |
| @@ -192,4 +214,11 @@ void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { |
| callback.Run(); |
| } |
| +void MojoRendererService::OnCdmAttached( |
| + const mojo::Callback<void(bool)>& callback, |
| + bool success) { |
| + DVLOG(1) << __FUNCTION__ << "(" << success << ")"; |
| + callback.Run(success); |
| +} |
| + |
| } // namespace media |