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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/mojo/clients/mojo_renderer.cc
diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
index 794a70875a45f8ff266cf79ed288c9f6a38a72ab..99df61866f76d2f984e796feb40331f368308d32 100644
--- a/media/mojo/clients/mojo_renderer.cc
+++ b/media/mojo/clients/mojo_renderer.cc
@@ -65,6 +65,9 @@ void MojoRenderer::Initialize(MediaResource* media_resource,
init_cb_ = init_cb;
switch (media_resource_->GetType()) {
+ case MediaResource::Type::REMOTE:
+ InitializeRendererFromRemoteId(client);
+ break;
case MediaResource::Type::STREAM:
InitializeRendererFromStreams(client);
break;
@@ -141,9 +144,9 @@ void MojoRenderer::InitializeRendererFromStreams(
// |remote_renderer_|, and the callback won't be dispatched if
// |remote_renderer_| is destroyed.
remote_renderer_->Initialize(
- std::move(client_ptr_info), std::move(streams),
- std::move(audio_renderer_sink_ptr), std::move(video_renderer_sink_ptr),
- base::nullopt, base::nullopt,
+ std::move(client_ptr_info), MediaResource::kInvalidRemoteId,
+ std::move(streams), std::move(audio_renderer_sink_ptr),
+ std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
}
@@ -163,9 +166,50 @@ void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) {
// |remote_renderer_| is destroyed.
std::vector<mojom::DemuxerStreamPtr> streams;
remote_renderer_->Initialize(
- std::move(client_ptr_info), std::move(streams),
- mojom::AudioRendererSinkPtr(), mojom::VideoRendererSinkPtr(),
- url_params.media_url, url_params.first_party_for_cookies,
+ std::move(client_ptr_info), MediaResource::kInvalidRemoteId,
+ std::move(streams), mojom::AudioRendererSinkPtr(),
+ mojom::VideoRendererSinkPtr(), url_params.media_url,
+ url_params.first_party_for_cookies,
+ base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
+}
+
+void MojoRenderer::InitializeRendererFromRemoteId(
+ media::RendererClient* client) {
+ DVLOG(2) << __func__;
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ mojom::AudioRendererSinkPtr audio_renderer_sink_ptr;
+ mojo_audio_renderer_sink_.reset(
+ new MojoAudioRendererSinkImpl(task_runner_, audio_renderer_sink_,
+ MakeRequest(&audio_renderer_sink_ptr)));
+ mojo_audio_renderer_sink_->set_connection_error_handler(
+ base::Bind(&MojoRenderer::OnAudioRendererSinkConnectionError,
+ base::Unretained(this)));
+
+ mojom::VideoRendererSinkPtr video_renderer_sink_ptr;
+ mojo_video_renderer_sink_.reset(
+ new MojoVideoRendererSinkImpl(task_runner_, video_renderer_sink_,
+ MakeRequest(&video_renderer_sink_ptr)));
+ // Using base::Unretained(this) is safe because |this| owns
+ // |mojo_video_renderer_sink|, and the error handler can't be invoked once
+ // |mojo_video_renderer_sink| is destroyed.
+ mojo_video_renderer_sink_->set_connection_error_handler(
+ base::Bind(&MojoRenderer::OnVideoRendererSinkConnectionError,
+ base::Unretained(this)));
+
+ BindRemoteRendererIfNeeded();
+
+ mojom::RendererClientAssociatedPtrInfo client_ptr_info;
+ client_binding_.Bind(&client_ptr_info, remote_renderer_.associated_group());
+
+ // Using base::Unretained(this) is safe because |this| owns
+ // |remote_renderer_|, and the callback won't be dispatched if
+ // |remote_renderer_| is destroyed.
+ std::vector<mojom::DemuxerStreamPtr> streams;
+ remote_renderer_->Initialize(
+ std::move(client_ptr_info), media_resource_->GetRemoteId(),
+ std::move(streams), std::move(audio_renderer_sink_ptr),
+ std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
}
« 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