Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(665)

Unified Diff: media/mojo/services/service_factory_impl.cc

Issue 2281843003: Move ownership of audio/video sinks to MojoRendererService. (Closed)
Patch Set: rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/mojo/services/service_factory_impl.h ('k') | media/mojo/services/test_mojo_media_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_) {
« no previous file with comments | « media/mojo/services/service_factory_impl.h ('k') | media/mojo/services/test_mojo_media_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698