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 27f44224fb4d3b53eb9890e38c8dea5a7c2011b3..3e49e455230aca1bc71cd0ca44680ea9d91812f6 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" |
@@ -27,8 +28,10 @@ namespace media { |
const int kTimeUpdateIntervalMs = 50; |
MojoRendererService::MojoRendererService( |
+ CdmContextProvider* cdm_context_provider, |
mojo::InterfaceRequest<mojo::MediaRenderer> request) |
: binding_(this, request.Pass()), |
+ cdm_context_provider_(cdm_context_provider), |
state_(STATE_UNINITIALIZED), |
last_media_time_usec_(0), |
weak_factory_(this) { |
@@ -105,6 +108,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."; |
+ callback.Run(false); |
+ return; |
+ } |
+ |
+ CdmContext* cdm_context = cdm_context_provider_->GetCdmContext(cdm_id); |
+ if (!cdm_context) { |
+ LOG(ERROR) << "CDM context not found: " << cdm_id; |
+ 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); |
@@ -163,7 +185,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)); |
} |
@@ -175,7 +197,7 @@ void MojoRendererService::OnRendererEnded() { |
} |
void MojoRendererService::OnError(PipelineStatus error) { |
- DVLOG(1) << __FUNCTION__; |
+ DVLOG(1) << __FUNCTION__ << "(" << error << ")"; |
state_ = STATE_ERROR; |
client_->OnError(); |
} |
@@ -187,4 +209,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 |