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 deec2d1d543e3663bd45ac08e04f55eda27e9c76..e1ae612dc987cebd6463302e58f43ecbc968b3f4 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* mojo_renderer_service = new MojoRendererService( |
|
dcheng
2016/10/05 22:37:12
Nit: auto service = base::MakeUnique<MojoRendererS
tguilbert
2016/10/05 23:46:21
I saw your follow up comment. I changed it for a m
|
| + 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(mojo_renderer_service), std::move(request)); |
| + |
| + mojo_renderer_service->SetBinding(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,21 @@ 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()); |
| +} |
| + |
| +void MojoRendererService::SetBinding( |
| + mojo::StrongBindingPtr<mojom::Renderer> binding) { |
| + binding_ = binding; |
| +} |
| } // namespace media |