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

Side by Side Diff: media/mojo/clients/mojo_renderer.cc

Issue 2643713003: Allow to use the DefaultRendererFactory from a Utility Process (Closed)
Patch Set: Rebase 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
« no previous file with comments | « media/mojo/clients/mojo_renderer.h ('k') | media/mojo/clients/mojo_video_renderer_sink_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/clients/mojo_renderer.h" 5 #include "media/mojo/clients/mojo_renderer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/single_thread_task_runner.h"
13 #include "media/base/media_resource.h" 13 #include "media/base/media_resource.h"
14 #include "media/base/pipeline_status.h" 14 #include "media/base/pipeline_status.h"
15 #include "media/base/renderer_client.h" 15 #include "media/base/renderer_client.h"
16 #include "media/base/video_renderer_sink.h" 16 #include "media/base/video_renderer_sink.h"
17 #include "media/mojo/clients/mojo_demuxer_stream_impl.h" 17 #include "media/mojo/clients/mojo_demuxer_stream_impl.h"
18 #include "media/mojo/clients/mojo_video_renderer_sink_impl.h"
19 #include "media/mojo/interfaces/video_renderer_sink.mojom.h"
18 #include "media/renderers/video_overlay_factory.h" 20 #include "media/renderers/video_overlay_factory.h"
19 21
20 namespace media { 22 namespace media {
21 23
22 MojoRenderer::MojoRenderer( 24 MojoRenderer::MojoRenderer(
23 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 25 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
24 std::unique_ptr<VideoOverlayFactory> video_overlay_factory, 26 std::unique_ptr<VideoOverlayFactory> video_overlay_factory,
25 VideoRendererSink* video_renderer_sink, 27 VideoRendererSink* video_renderer_sink,
26 mojom::RendererPtr remote_renderer) 28 mojom::RendererPtr remote_renderer)
27 : task_runner_(task_runner), 29 : task_runner_(task_runner),
28 video_overlay_factory_(std::move(video_overlay_factory)), 30 video_overlay_factory_(std::move(video_overlay_factory)),
29 video_renderer_sink_(video_renderer_sink), 31 video_renderer_sink_(video_renderer_sink),
30 remote_renderer_info_(remote_renderer.PassInterface()), 32 remote_renderer_info_(remote_renderer.PassInterface()),
31 client_binding_(this), 33 client_binding_(this),
32 media_time_interpolator_(&media_clock_) { 34 media_time_interpolator_(&media_clock_),
35 mojo_video_renderer_sink_(nullptr) {
33 DVLOG(1) << __func__; 36 DVLOG(1) << __func__;
34 } 37 }
35 38
36 MojoRenderer::~MojoRenderer() { 39 MojoRenderer::~MojoRenderer() {
37 DVLOG(1) << __func__; 40 DVLOG(1) << __func__;
38 DCHECK(task_runner_->BelongsToCurrentThread()); 41 DCHECK(task_runner_->BelongsToCurrentThread());
39 42
40 CancelPendingCallbacks(); 43 CancelPendingCallbacks();
41 } 44 }
42 45
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 MakeRequest(&video_stream)); 101 MakeRequest(&video_stream));
99 // Using base::Unretained(this) is safe because |this| owns |mojo_stream|, 102 // Using base::Unretained(this) is safe because |this| owns |mojo_stream|,
100 // and the error handler can't be invoked once |mojo_stream| is destroyed. 103 // and the error handler can't be invoked once |mojo_stream| is destroyed.
101 mojo_stream->set_connection_error_handler( 104 mojo_stream->set_connection_error_handler(
102 base::Bind(&MojoRenderer::OnDemuxerStreamConnectionError, 105 base::Bind(&MojoRenderer::OnDemuxerStreamConnectionError,
103 base::Unretained(this), mojo_stream.get())); 106 base::Unretained(this), mojo_stream.get()));
104 streams_.push_back(std::move(mojo_stream)); 107 streams_.push_back(std::move(mojo_stream));
105 streams.push_back(std::move(video_stream)); 108 streams.push_back(std::move(video_stream));
106 } 109 }
107 110
111 mojom::VideoRendererSinkPtr video_renderer_sink_ptr;
112 mojo_video_renderer_sink_.reset(
113 new MojoVideoRendererSinkImpl(task_runner_, video_renderer_sink_,
114 MakeRequest(&video_renderer_sink_ptr)));
115 // Using base::Unretained(this) is safe because |this| owns
116 // |mojo_video_renderer_sink|, and the error handler can't be invoked once
117 // |mojo_video_renderer_sink| is destroyed.
118 mojo_video_renderer_sink_->set_connection_error_handler(
119 base::Bind(&MojoRenderer::OnVideoRendererSinkConnectionError,
120 base::Unretained(this)));
121
108 BindRemoteRendererIfNeeded(); 122 BindRemoteRendererIfNeeded();
109 123
110 mojom::RendererClientAssociatedPtrInfo client_ptr_info; 124 mojom::RendererClientAssociatedPtrInfo client_ptr_info;
111 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group()); 125 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group());
112 126
113 // Using base::Unretained(this) is safe because |this| owns 127 // Using base::Unretained(this) is safe because |this| owns
114 // |remote_renderer_|, and the callback won't be dispatched if 128 // |remote_renderer_|, and the callback won't be dispatched if
115 // |remote_renderer_| is destroyed. 129 // |remote_renderer_| is destroyed.
116 remote_renderer_->Initialize( 130 remote_renderer_->Initialize(
117 std::move(client_ptr_info), std::move(streams), base::nullopt, 131 std::move(client_ptr_info), std::move(streams),
118 base::nullopt, 132 std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
119 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); 133 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
120 } 134 }
121 135
122 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) { 136 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) {
123 DVLOG(2) << __func__; 137 DVLOG(2) << __func__;
124 DCHECK(task_runner_->BelongsToCurrentThread()); 138 DCHECK(task_runner_->BelongsToCurrentThread());
125 139
126 BindRemoteRendererIfNeeded(); 140 BindRemoteRendererIfNeeded();
127 141
128 mojom::RendererClientAssociatedPtrInfo client_ptr_info; 142 mojom::RendererClientAssociatedPtrInfo client_ptr_info;
129 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group()); 143 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group());
130 144
131 MediaUrlParams url_params = media_resource_->GetMediaUrlParams(); 145 MediaUrlParams url_params = media_resource_->GetMediaUrlParams();
132 146
133 // Using base::Unretained(this) is safe because |this| owns 147 // Using base::Unretained(this) is safe because |this| owns
134 // |remote_renderer_|, and the callback won't be dispatched if 148 // |remote_renderer_|, and the callback won't be dispatched if
135 // |remote_renderer_| is destroyed. 149 // |remote_renderer_| is destroyed.
136 std::vector<mojom::DemuxerStreamPtr> streams; 150 std::vector<mojom::DemuxerStreamPtr> streams;
137 remote_renderer_->Initialize( 151 remote_renderer_->Initialize(
138 std::move(client_ptr_info), std::move(streams), url_params.media_url, 152 std::move(client_ptr_info), std::move(streams),
153 mojom::VideoRendererSinkPtr(), url_params.media_url,
139 url_params.first_party_for_cookies, 154 url_params.first_party_for_cookies,
140 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); 155 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
141 } 156 }
142 157
143 void MojoRenderer::SetCdm(CdmContext* cdm_context, 158 void MojoRenderer::SetCdm(CdmContext* cdm_context,
144 const CdmAttachedCB& cdm_attached_cb) { 159 const CdmAttachedCB& cdm_attached_cb) {
145 DVLOG(1) << __func__; 160 DVLOG(1) << __func__;
146 DCHECK(task_runner_->BelongsToCurrentThread()); 161 DCHECK(task_runner_->BelongsToCurrentThread());
147 DCHECK(cdm_context); 162 DCHECK(cdm_context);
148 DCHECK(!cdm_attached_cb.is_null()); 163 DCHECK(!cdm_attached_cb.is_null());
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 340
326 for (auto& s : streams_) { 341 for (auto& s : streams_) {
327 if (s.get() == stream) { 342 if (s.get() == stream) {
328 s.reset(); 343 s.reset();
329 return; 344 return;
330 } 345 }
331 } 346 }
332 NOTREACHED() << "Unrecognized demuxer stream=" << stream; 347 NOTREACHED() << "Unrecognized demuxer stream=" << stream;
333 } 348 }
334 349
350 void MojoRenderer::OnVideoRendererSinkConnectionError() {
351 DVLOG(1) << __func__;
352 CHECK(task_runner_->BelongsToCurrentThread());
353
354 mojo_video_renderer_sink_.reset();
355 }
356
335 void MojoRenderer::BindRemoteRendererIfNeeded() { 357 void MojoRenderer::BindRemoteRendererIfNeeded() {
336 DVLOG(2) << __func__; 358 DVLOG(2) << __func__;
337 DCHECK(task_runner_->BelongsToCurrentThread()); 359 DCHECK(task_runner_->BelongsToCurrentThread());
338 360
339 // If |remote_renderer_| has already been bound, do nothing. 361 // If |remote_renderer_| has already been bound, do nothing.
340 // Note that after Bind() is called, |remote_renderer_| is always bound even 362 // Note that after Bind() is called, |remote_renderer_| is always bound even
341 // after connection error. 363 // after connection error.
342 if (remote_renderer_.is_bound()) 364 if (remote_renderer_.is_bound())
343 return; 365 return;
344 366
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); 413 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED);
392 414
393 if (!flush_cb_.is_null()) 415 if (!flush_cb_.is_null())
394 base::ResetAndReturn(&flush_cb_).Run(); 416 base::ResetAndReturn(&flush_cb_).Run();
395 417
396 if (!cdm_attached_cb_.is_null()) 418 if (!cdm_attached_cb_.is_null())
397 base::ResetAndReturn(&cdm_attached_cb_).Run(false); 419 base::ResetAndReturn(&cdm_attached_cb_).Run(false);
398 } 420 }
399 421
400 } // namespace media 422 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/clients/mojo_renderer.h ('k') | media/mojo/clients/mojo_video_renderer_sink_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698