| Index: media/mojo/clients/mojo_renderer.cc
|
| diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
|
| index a8b1fd35bbcbcf853ed1d0f26990c8e3bef149aa..3f64ad9a79c555c78cecd77fd41e0c487d31d021 100644
|
| --- a/media/mojo/clients/mojo_renderer.cc
|
| +++ b/media/mojo/clients/mojo_renderer.cc
|
| @@ -15,6 +15,8 @@
|
| #include "media/base/renderer_client.h"
|
| #include "media/base/video_renderer_sink.h"
|
| #include "media/mojo/clients/mojo_demuxer_stream_impl.h"
|
| +#include "media/mojo/clients/mojo_video_renderer_sink_impl.h"
|
| +#include "media/mojo/interfaces/video_renderer_sink.mojom.h"
|
| #include "media/renderers/video_overlay_factory.h"
|
|
|
| namespace media {
|
| @@ -29,7 +31,8 @@ MojoRenderer::MojoRenderer(
|
| video_renderer_sink_(video_renderer_sink),
|
| remote_renderer_info_(remote_renderer.PassInterface()),
|
| client_binding_(this),
|
| - media_time_interpolator_(&media_clock_) {
|
| + media_time_interpolator_(&media_clock_),
|
| + mojo_video_renderer_sink_(nullptr) {
|
| DVLOG(1) << __func__;
|
| }
|
|
|
| @@ -105,6 +108,17 @@ void MojoRenderer::InitializeRendererFromStreams(
|
| streams.push_back(std::move(video_stream));
|
| }
|
|
|
| + 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;
|
| @@ -114,8 +128,8 @@ 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), base::nullopt,
|
| - base::nullopt,
|
| + std::move(client_ptr_info), std::move(streams),
|
| + std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
|
| base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
|
| }
|
|
|
| @@ -135,7 +149,8 @@ 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), url_params.media_url,
|
| + std::move(client_ptr_info), std::move(streams),
|
| + mojom::VideoRendererSinkPtr(), url_params.media_url,
|
| url_params.first_party_for_cookies,
|
| base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
|
| }
|
| @@ -332,6 +347,13 @@ void MojoRenderer::OnDemuxerStreamConnectionError(
|
| NOTREACHED() << "Unrecognized demuxer stream=" << stream;
|
| }
|
|
|
| +void MojoRenderer::OnVideoRendererSinkConnectionError() {
|
| + DVLOG(1) << __func__;
|
| + CHECK(task_runner_->BelongsToCurrentThread());
|
| +
|
| + mojo_video_renderer_sink_.reset();
|
| +}
|
| +
|
| void MojoRenderer::BindRemoteRendererIfNeeded() {
|
| DVLOG(2) << __func__;
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
|
|