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

Side by Side Diff: media/mojo/services/interface_factory_impl.cc

Issue 2643743002: Mojify demuxers and allow running {Chunk/FFmpeg}Demuxer in a Utility Process (Closed)
Patch Set: Rebase and make sure to unbind mojom::DemuxerPtr on the bound thread during termination Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/mojo/services/interface_factory_impl.h" 5 #include "media/mojo/services/interface_factory_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "media/base/media_log.h" 10 #include "media/base/media_log.h"
(...skipping 15 matching lines...) Expand all
26 #include "media/base/renderer_factory.h" 26 #include "media/base/renderer_factory.h"
27 #include "media/base/video_renderer_sink.h" 27 #include "media/base/video_renderer_sink.h"
28 #include "media/mojo/services/mojo_renderer_service.h" 28 #include "media/mojo/services/mojo_renderer_service.h"
29 #endif // defined(ENABLE_MOJO_RENDERER) 29 #endif // defined(ENABLE_MOJO_RENDERER)
30 30
31 #if defined(ENABLE_MOJO_CDM) 31 #if defined(ENABLE_MOJO_CDM)
32 #include "media/base/cdm_factory.h" 32 #include "media/base/cdm_factory.h"
33 #include "media/mojo/services/mojo_cdm_service.h" 33 #include "media/mojo/services/mojo_cdm_service.h"
34 #endif // defined(ENABLE_MOJO_CDM) 34 #endif // defined(ENABLE_MOJO_CDM)
35 35
36 #if defined(ENABLE_MOJO_DEMUXER)
37 #include "media/base/demuxer_factory.h"
38 #include "media/mojo/services/mojo_demuxer_service.h"
39 #include "media/mojo/services/mojo_source_buffer_service.h"
40 #endif // defined(ENABLE_MOJO_DEMUXER)
41
36 namespace media { 42 namespace media {
37 43
38 InterfaceFactoryImpl::InterfaceFactoryImpl( 44 InterfaceFactoryImpl::InterfaceFactoryImpl(
39 service_manager::mojom::InterfaceProviderPtr interfaces, 45 service_manager::mojom::InterfaceProviderPtr interfaces,
40 scoped_refptr<MediaLog> media_log, 46 scoped_refptr<MediaLog> media_log,
41 std::unique_ptr<service_manager::ServiceContextRef> connection_ref, 47 std::unique_ptr<service_manager::ServiceContextRef> connection_ref,
42 MojoMediaClient* mojo_media_client) 48 MojoMediaClient* mojo_media_client)
43 : 49 :
44 #if defined(ENABLE_MOJO_CDM) 50 #if defined(ENABLE_MOJO_CDM) || defined(ENABLE_MOJO_DEMUXER)
45 interfaces_(std::move(interfaces)), 51 interfaces_(std::move(interfaces)),
46 #endif 52 #endif
47 media_log_(media_log), 53 media_log_(media_log),
48 connection_ref_(std::move(connection_ref)), 54 connection_ref_(std::move(connection_ref)),
49 mojo_media_client_(mojo_media_client) { 55 mojo_media_client_(mojo_media_client) {
50 DVLOG(1) << __func__; 56 DVLOG(1) << __func__;
51 DCHECK(mojo_media_client_); 57 DCHECK(mojo_media_client_);
52 } 58 }
53 59
54 InterfaceFactoryImpl::~InterfaceFactoryImpl() { 60 InterfaceFactoryImpl::~InterfaceFactoryImpl() {
55 DVLOG(1) << __func__; 61 DVLOG(1) << __func__;
56 } 62 }
57 63
58 // mojom::InterfaceFactory implementation. 64 // mojom::InterfaceFactory implementation.
59 65
66 void InterfaceFactoryImpl::CreateDemuxer(mojom::DemuxerRequest request) {
67 #if defined(ENABLE_MOJO_DEMUXER)
68 DemuxerFactory* demuxer_factory = GetDemuxerFactory();
69 if (!demuxer_factory)
70 return;
71
72 demuxer_bindings_.AddBinding(
73 base::MakeUnique<MojoDemuxerService>(
74 demuxer_service_context_.GetWeakPtr(), demuxer_factory),
75 std::move(request));
76 #endif // defined(ENABLE_MOJO_DEMUXER)
77 }
78
79 void InterfaceFactoryImpl::CreateSourceBuffer(
80 mojom::SourceBufferRequest request) {
81 #if defined(ENABLE_MOJO_DEMUXER)
82 source_buffer_bindings_.AddBinding(base::MakeUnique<MojoSourceBufferService>(
83 demuxer_service_context_.GetWeakPtr()),
84 std::move(request));
85 #endif // defined(ENABLE_MOJO_DEMUXER)
86 }
87
60 void InterfaceFactoryImpl::CreateAudioDecoder( 88 void InterfaceFactoryImpl::CreateAudioDecoder(
61 mojo::InterfaceRequest<mojom::AudioDecoder> request) { 89 mojo::InterfaceRequest<mojom::AudioDecoder> request) {
62 #if defined(ENABLE_MOJO_AUDIO_DECODER) 90 #if defined(ENABLE_MOJO_AUDIO_DECODER)
63 scoped_refptr<base::SingleThreadTaskRunner> task_runner( 91 scoped_refptr<base::SingleThreadTaskRunner> task_runner(
64 base::ThreadTaskRunnerHandle::Get()); 92 base::ThreadTaskRunnerHandle::Get());
65 93
66 std::unique_ptr<AudioDecoder> audio_decoder = 94 std::unique_ptr<AudioDecoder> audio_decoder =
67 mojo_media_client_->CreateAudioDecoder(task_runner); 95 mojo_media_client_->CreateAudioDecoder(task_runner);
68 if (!audio_decoder) { 96 if (!audio_decoder) {
69 LOG(ERROR) << "AudioDecoder creation failed."; 97 LOG(ERROR) << "AudioDecoder creation failed.";
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 auto renderer = renderer_factory->CreateRenderer( 130 auto renderer = renderer_factory->CreateRenderer(
103 task_runner, task_runner, audio_sink.get(), video_sink.get(), 131 task_runner, task_runner, audio_sink.get(), video_sink.get(),
104 RequestSurfaceCB()); 132 RequestSurfaceCB());
105 if (!renderer) { 133 if (!renderer) {
106 LOG(ERROR) << "Renderer creation failed."; 134 LOG(ERROR) << "Renderer creation failed.";
107 return; 135 return;
108 } 136 }
109 137
110 std::unique_ptr<MojoRendererService> mojo_renderer_service = 138 std::unique_ptr<MojoRendererService> mojo_renderer_service =
111 base::MakeUnique<MojoRendererService>( 139 base::MakeUnique<MojoRendererService>(
140 demuxer_service_context_.GetWeakPtr(),
112 cdm_service_context_.GetWeakPtr(), std::move(audio_sink), 141 cdm_service_context_.GetWeakPtr(), std::move(audio_sink),
113 std::move(video_sink), std::move(renderer), 142 std::move(video_sink), std::move(renderer),
114 MojoRendererService::InitiateSurfaceRequestCB()); 143 MojoRendererService::InitiateSurfaceRequestCB());
115 144
116 MojoRendererService* mojo_renderer_service_ptr = mojo_renderer_service.get(); 145 MojoRendererService* mojo_renderer_service_ptr = mojo_renderer_service.get();
117 146
118 StrongBindingSet<mojom::Renderer>::BindingId binding_id = 147 StrongBindingSet<mojom::Renderer>::BindingId binding_id =
119 renderer_bindings_.AddBinding(std::move(mojo_renderer_service), 148 renderer_bindings_.AddBinding(std::move(mojo_renderer_service),
120 std::move(request)); 149 std::move(request));
121 150
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 #if defined(ENABLE_MOJO_CDM) 182 #if defined(ENABLE_MOJO_CDM)
154 CdmFactory* InterfaceFactoryImpl::GetCdmFactory() { 183 CdmFactory* InterfaceFactoryImpl::GetCdmFactory() {
155 if (!cdm_factory_) { 184 if (!cdm_factory_) {
156 cdm_factory_ = mojo_media_client_->CreateCdmFactory(interfaces_.get()); 185 cdm_factory_ = mojo_media_client_->CreateCdmFactory(interfaces_.get());
157 LOG_IF(ERROR, !cdm_factory_) << "CdmFactory not available."; 186 LOG_IF(ERROR, !cdm_factory_) << "CdmFactory not available.";
158 } 187 }
159 return cdm_factory_.get(); 188 return cdm_factory_.get();
160 } 189 }
161 #endif // defined(ENABLE_MOJO_CDM) 190 #endif // defined(ENABLE_MOJO_CDM)
162 191
192 #if defined(ENABLE_MOJO_DEMUXER)
193 DemuxerFactory* InterfaceFactoryImpl::GetDemuxerFactory() {
194 if (!demuxer_factory_) {
195 demuxer_factory_ = mojo_media_client_->CreateDemuxerFactory(media_log_);
196 LOG_IF(ERROR, !demuxer_factory_) << "DemuxerFactory not available.";
197 }
198 return demuxer_factory_.get();
199 }
200 #endif // defined(ENABLE_MOJO_CDM)
201
163 } // namespace media 202 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/interface_factory_impl.h ('k') | media/mojo/services/media_resource_shim.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698