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

Side by Side Diff: media/mojo/clients/mojo_renderer.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
« no previous file with comments | « media/mojo/clients/mojo_renderer.h ('k') | media/mojo/clients/mojo_renderer_unittest.cc » ('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"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 if (encountered_error_) { 58 if (encountered_error_) {
59 task_runner_->PostTask( 59 task_runner_->PostTask(
60 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INITIALIZATION_FAILED)); 60 FROM_HERE, base::Bind(init_cb, PIPELINE_ERROR_INITIALIZATION_FAILED));
61 return; 61 return;
62 } 62 }
63 63
64 media_resource_ = media_resource; 64 media_resource_ = media_resource;
65 init_cb_ = init_cb; 65 init_cb_ = init_cb;
66 66
67 switch (media_resource_->GetType()) { 67 switch (media_resource_->GetType()) {
68 case MediaResource::Type::REMOTE:
69 InitializeRendererFromRemoteId(client);
70 break;
68 case MediaResource::Type::STREAM: 71 case MediaResource::Type::STREAM:
69 InitializeRendererFromStreams(client); 72 InitializeRendererFromStreams(client);
70 break; 73 break;
71 case MediaResource::Type::URL: 74 case MediaResource::Type::URL:
72 InitializeRendererFromUrl(client); 75 InitializeRendererFromUrl(client);
73 break; 76 break;
74 } 77 }
75 } 78 }
76 79
77 void MojoRenderer::InitializeRendererFromStreams( 80 void MojoRenderer::InitializeRendererFromStreams(
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 137
135 BindRemoteRendererIfNeeded(); 138 BindRemoteRendererIfNeeded();
136 139
137 mojom::RendererClientAssociatedPtrInfo client_ptr_info; 140 mojom::RendererClientAssociatedPtrInfo client_ptr_info;
138 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group()); 141 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group());
139 142
140 // Using base::Unretained(this) is safe because |this| owns 143 // Using base::Unretained(this) is safe because |this| owns
141 // |remote_renderer_|, and the callback won't be dispatched if 144 // |remote_renderer_|, and the callback won't be dispatched if
142 // |remote_renderer_| is destroyed. 145 // |remote_renderer_| is destroyed.
143 remote_renderer_->Initialize( 146 remote_renderer_->Initialize(
144 std::move(client_ptr_info), std::move(streams), 147 std::move(client_ptr_info), MediaResource::kInvalidRemoteId,
145 std::move(audio_renderer_sink_ptr), std::move(video_renderer_sink_ptr), 148 std::move(streams), std::move(audio_renderer_sink_ptr),
146 base::nullopt, base::nullopt, 149 std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
147 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); 150 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
148 } 151 }
149 152
150 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) { 153 void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) {
151 DVLOG(2) << __func__; 154 DVLOG(2) << __func__;
152 DCHECK(task_runner_->BelongsToCurrentThread()); 155 DCHECK(task_runner_->BelongsToCurrentThread());
153 156
154 BindRemoteRendererIfNeeded(); 157 BindRemoteRendererIfNeeded();
155 158
156 mojom::RendererClientAssociatedPtrInfo client_ptr_info; 159 mojom::RendererClientAssociatedPtrInfo client_ptr_info;
157 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group()); 160 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group());
158 161
159 MediaUrlParams url_params = media_resource_->GetMediaUrlParams(); 162 MediaUrlParams url_params = media_resource_->GetMediaUrlParams();
160 163
161 // Using base::Unretained(this) is safe because |this| owns 164 // Using base::Unretained(this) is safe because |this| owns
162 // |remote_renderer_|, and the callback won't be dispatched if 165 // |remote_renderer_|, and the callback won't be dispatched if
163 // |remote_renderer_| is destroyed. 166 // |remote_renderer_| is destroyed.
164 std::vector<mojom::DemuxerStreamPtr> streams; 167 std::vector<mojom::DemuxerStreamPtr> streams;
165 remote_renderer_->Initialize( 168 remote_renderer_->Initialize(
166 std::move(client_ptr_info), std::move(streams), 169 std::move(client_ptr_info), MediaResource::kInvalidRemoteId,
167 mojom::AudioRendererSinkPtr(), mojom::VideoRendererSinkPtr(), 170 std::move(streams), mojom::AudioRendererSinkPtr(),
168 url_params.media_url, url_params.first_party_for_cookies, 171 mojom::VideoRendererSinkPtr(), url_params.media_url,
172 url_params.first_party_for_cookies,
169 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client)); 173 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
170 } 174 }
171 175
176 void MojoRenderer::InitializeRendererFromRemoteId(
177 media::RendererClient* client) {
178 DVLOG(2) << __func__;
179 DCHECK(task_runner_->BelongsToCurrentThread());
180
181 mojom::AudioRendererSinkPtr audio_renderer_sink_ptr;
182 mojo_audio_renderer_sink_.reset(
183 new MojoAudioRendererSinkImpl(task_runner_, audio_renderer_sink_,
184 MakeRequest(&audio_renderer_sink_ptr)));
185 mojo_audio_renderer_sink_->set_connection_error_handler(
186 base::Bind(&MojoRenderer::OnAudioRendererSinkConnectionError,
187 base::Unretained(this)));
188
189 mojom::VideoRendererSinkPtr video_renderer_sink_ptr;
190 mojo_video_renderer_sink_.reset(
191 new MojoVideoRendererSinkImpl(task_runner_, video_renderer_sink_,
192 MakeRequest(&video_renderer_sink_ptr)));
193 // Using base::Unretained(this) is safe because |this| owns
194 // |mojo_video_renderer_sink|, and the error handler can't be invoked once
195 // |mojo_video_renderer_sink| is destroyed.
196 mojo_video_renderer_sink_->set_connection_error_handler(
197 base::Bind(&MojoRenderer::OnVideoRendererSinkConnectionError,
198 base::Unretained(this)));
199
200 BindRemoteRendererIfNeeded();
201
202 mojom::RendererClientAssociatedPtrInfo client_ptr_info;
203 client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group());
204
205 // Using base::Unretained(this) is safe because |this| owns
206 // |remote_renderer_|, and the callback won't be dispatched if
207 // |remote_renderer_| is destroyed.
208 std::vector<mojom::DemuxerStreamPtr> streams;
209 remote_renderer_->Initialize(
210 std::move(client_ptr_info), media_resource_->GetRemoteId(),
211 std::move(streams), std::move(audio_renderer_sink_ptr),
212 std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
213 base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
214 }
215
172 void MojoRenderer::SetCdm(CdmContext* cdm_context, 216 void MojoRenderer::SetCdm(CdmContext* cdm_context,
173 const CdmAttachedCB& cdm_attached_cb) { 217 const CdmAttachedCB& cdm_attached_cb) {
174 DVLOG(1) << __func__; 218 DVLOG(1) << __func__;
175 DCHECK(task_runner_->BelongsToCurrentThread()); 219 DCHECK(task_runner_->BelongsToCurrentThread());
176 DCHECK(cdm_context); 220 DCHECK(cdm_context);
177 DCHECK(!cdm_attached_cb.is_null()); 221 DCHECK(!cdm_attached_cb.is_null());
178 DCHECK(cdm_attached_cb_.is_null()); 222 DCHECK(cdm_attached_cb_.is_null());
179 223
180 if (encountered_error_) { 224 if (encountered_error_) {
181 task_runner_->PostTask(FROM_HERE, base::Bind(cdm_attached_cb, false)); 225 task_runner_->PostTask(FROM_HERE, base::Bind(cdm_attached_cb, false));
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); 478 base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED);
435 479
436 if (!flush_cb_.is_null()) 480 if (!flush_cb_.is_null())
437 base::ResetAndReturn(&flush_cb_).Run(); 481 base::ResetAndReturn(&flush_cb_).Run();
438 482
439 if (!cdm_attached_cb_.is_null()) 483 if (!cdm_attached_cb_.is_null())
440 base::ResetAndReturn(&cdm_attached_cb_).Run(false); 484 base::ResetAndReturn(&cdm_attached_cb_).Run(false);
441 } 485 }
442 486
443 } // namespace media 487 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/clients/mojo_renderer.h ('k') | media/mojo/clients/mojo_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698