Index: media/mojo/services/service_factory_impl.cc |
diff --git a/media/mojo/services/service_factory_impl.cc b/media/mojo/services/service_factory_impl.cc |
index 76a0389404ab407840a548fd92a82c6e9b02e32f..4bdf49055ca016762a9e476f3839dc01d44028dc 100644 |
--- a/media/mojo/services/service_factory_impl.cc |
+++ b/media/mojo/services/service_factory_impl.cc |
@@ -19,7 +19,9 @@ |
#endif // defined(ENABLE_MOJO_VIDEO_DECODER) |
#if defined(ENABLE_MOJO_RENDERER) |
+#include "media/base/audio_renderer_sink.h" |
#include "media/base/renderer_factory.h" |
+#include "media/base/video_renderer_sink.h" |
#include "media/mojo/services/mojo_renderer_service.h" |
#endif // defined(ENABLE_MOJO_RENDERER) |
@@ -82,19 +84,26 @@ void ServiceFactoryImpl::CreateRenderer( |
const mojo::String& audio_device_id, |
mojo::InterfaceRequest<mojom::Renderer> request) { |
#if defined(ENABLE_MOJO_RENDERER) |
- // The created object is owned by the pipe. |
- // The audio and video sinks are owned by the client. |
+ RendererFactory* renderer_factory = GetRendererFactory(); |
+ if (!renderer_factory) |
+ return; |
+ |
scoped_refptr<base::SingleThreadTaskRunner> task_runner( |
base::ThreadTaskRunnerHandle::Get()); |
- |
- std::unique_ptr<Renderer> renderer = mojo_media_client_->CreateRenderer( |
- task_runner, media_log_, audio_device_id); |
+ auto audio_sink = |
+ mojo_media_client_->CreateAudioRendererSink(audio_device_id); |
+ auto video_sink = mojo_media_client_->CreateVideoRendererSink(task_runner); |
+ auto renderer = renderer_factory->CreateRenderer( |
+ task_runner, task_runner, audio_sink.get(), video_sink.get(), |
+ RequestSurfaceCB()); |
if (!renderer) { |
LOG(ERROR) << "Renderer creation failed."; |
return; |
} |
+ // The created object is owned by the pipe. |
new MojoRendererService(cdm_service_context_.GetWeakPtr(), |
+ std::move(audio_sink), std::move(video_sink), |
std::move(renderer), std::move(request)); |
#endif // defined(ENABLE_MOJO_RENDERER) |
} |
@@ -112,6 +121,16 @@ void ServiceFactoryImpl::CreateCdm( |
#endif // defined(ENABLE_MOJO_CDM) |
} |
+#if defined(ENABLE_MOJO_RENDERER) |
+RendererFactory* ServiceFactoryImpl::GetRendererFactory() { |
+ if (!renderer_factory_) { |
+ renderer_factory_ = mojo_media_client_->CreateRendererFactory(media_log_); |
+ LOG_IF(ERROR, !renderer_factory_) << "RendererFactory not available."; |
+ } |
+ return renderer_factory_.get(); |
+} |
+#endif // defined(ENABLE_MOJO_RENDERER) |
+ |
#if defined(ENABLE_MOJO_CDM) |
CdmFactory* ServiceFactoryImpl::GetCdmFactory() { |
if (!cdm_factory_) { |