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 |