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 deec2d1d543e3663bd45ac08e04f55eda27e9c76..bf6846834d95dbb7b056f9a2ef4153ad124f5676 100644 |
--- a/media/mojo/services/mojo_renderer_service.cc |
+++ b/media/mojo/services/mojo_renderer_service.cc |
@@ -7,6 +7,7 @@ |
#include <utility> |
#include "base/bind.h" |
+#include "base/optional.h" |
#include "media/base/audio_renderer_sink.h" |
#include "media/base/media_keys.h" |
#include "media/base/media_url_demuxer.h" |
@@ -20,17 +21,40 @@ namespace media { |
// Time interval to update media time. |
const int kTimeUpdateIntervalMs = 50; |
+// static |
+mojo::StrongBindingPtr<mojom::Renderer> MojoRendererService::Create( |
+ base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
+ scoped_refptr<AudioRendererSink> audio_sink, |
+ std::unique_ptr<VideoRendererSink> video_sink, |
+ std::unique_ptr<media::Renderer> renderer, |
+ InitiateSurfaceRequestCB initiate_surface_request_cb, |
+ mojo::InterfaceRequest<mojom::Renderer> request) { |
+ MojoRendererService* service = new MojoRendererService( |
+ mojo_cdm_service_context, std::move(audio_sink), std::move(video_sink), |
+ std::move(renderer), initiate_surface_request_cb); |
+ |
+ mojo::StrongBindingPtr<mojom::Renderer> binding = |
+ mojo::MakeStrongBinding<mojom::Renderer>(base::WrapUnique(service), |
+ std::move(request)); |
+ |
+ service->binding_ = binding; |
+ |
+ return binding; |
+} |
+ |
MojoRendererService::MojoRendererService( |
base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
scoped_refptr<AudioRendererSink> audio_sink, |
std::unique_ptr<VideoRendererSink> video_sink, |
- std::unique_ptr<media::Renderer> renderer) |
+ std::unique_ptr<media::Renderer> renderer, |
+ InitiateSurfaceRequestCB initiate_surface_request_cb) |
: mojo_cdm_service_context_(mojo_cdm_service_context), |
state_(STATE_UNINITIALIZED), |
playback_rate_(0), |
audio_sink_(std::move(audio_sink)), |
video_sink_(std::move(video_sink)), |
renderer_(std::move(renderer)), |
+ initiate_surface_request_cb_(initiate_surface_request_cb), |
weak_factory_(this) { |
DVLOG(1) << __FUNCTION__; |
DCHECK(renderer_); |
@@ -238,4 +262,16 @@ void MojoRendererService::OnCdmAttached( |
callback.Run(success); |
} |
+void MojoRendererService::InitiateScopedSurfaceRequest( |
+ const InitiateScopedSurfaceRequestCallback& callback) { |
+ if (initiate_surface_request_cb_.is_null()) { |
+ // |renderer_| is likely not of type MediaPlayerRenderer. |
+ // This is an unexpected call, and the connection should be closed. |
+ mojo::ReportBadMessage("Unexpected call to InitiateScopedSurfaceRequest."); |
+ binding_->Close(); |
+ return; |
+ } |
+ |
+ callback.Run(initiate_surface_request_cb_.Run()); |
+} |
} // namespace media |