| Index: media/mojo/clients/mojo_renderer.cc
|
| diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
|
| index 95ee0c67d725255c45c467a17b984fcd1bec1573..2f229b95c2da763520e9ed44fdc3d962e12853ff 100644
|
| --- a/media/mojo/clients/mojo_renderer.cc
|
| +++ b/media/mojo/clients/mojo_renderer.cc
|
| @@ -14,6 +14,7 @@
|
| #include "media/base/pipeline_status.h"
|
| #include "media/base/renderer_client.h"
|
| #include "media/base/video_renderer_sink.h"
|
| +#include "media/media_features.h"
|
| #include "media/mojo/clients/mojo_demuxer_stream_impl.h"
|
| #include "media/renderers/video_overlay_factory.h"
|
|
|
| @@ -55,6 +56,21 @@ void MojoRenderer::Initialize(DemuxerStreamProvider* demuxer_stream_provider,
|
| demuxer_stream_provider_ = demuxer_stream_provider;
|
| init_cb_ = init_cb;
|
|
|
| + switch (demuxer_stream_provider_->GetType()) {
|
| + case DemuxerStreamProvider::Type::STREAM:
|
| + InitializeRendererFromStreams(client);
|
| + break;
|
| + case DemuxerStreamProvider::Type::URL:
|
| + InitializeRendererFromUrl(client);
|
| + break;
|
| + }
|
| +}
|
| +
|
| +void MojoRenderer::InitializeRendererFromStreams(
|
| + media::RendererClient* client) {
|
| + DVLOG(1) << __FUNCTION__;
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| +
|
| // Create audio and video mojom::DemuxerStream and bind its lifetime to
|
| // the pipe.
|
| DemuxerStream* const audio =
|
| @@ -93,7 +109,28 @@ void MojoRenderer::Initialize(DemuxerStreamProvider* demuxer_stream_provider,
|
| // |remote_renderer_| is destroyed.
|
| remote_renderer_->Initialize(
|
| binding_.CreateInterfacePtrAndBind(), std::move(audio_stream),
|
| - std::move(video_stream),
|
| + std::move(video_stream), mojo::String(), -1,
|
| + base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
|
| +}
|
| +
|
| +void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) {
|
| + DVLOG(2) << __FUNCTION__;
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| +
|
| + BindRemoteRendererIfNeeded();
|
| +
|
| + // TODO(tguilbert): Register and Send the proper surface ID. See
|
| + // crbug.com/627658
|
| + const int kFakeSurfaceId = 123;
|
| +
|
| + // Using base::Unretained(this) is safe because |this| owns
|
| + // |remote_renderer_|, and the callback won't be dispatched if
|
| + // |remote_renderer_| is destroyed.
|
| + remote_renderer_->Initialize(
|
| + binding_.CreateInterfacePtrAndBind(), mojom::DemuxerStreamPtr(),
|
| + mojom::DemuxerStreamPtr(),
|
| + mojo::String::From(demuxer_stream_provider_->GetUrl().spec()),
|
| + kFakeSurfaceId,
|
| base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
|
| }
|
|
|
| @@ -182,6 +219,7 @@ bool MojoRenderer::HasAudio() {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| DCHECK(remote_renderer_.is_bound());
|
|
|
| + // TODO(tguilbert): Update for the URL case.
|
| return !!demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO);
|
| }
|
|
|
| @@ -190,6 +228,7 @@ bool MojoRenderer::HasVideo() {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| DCHECK(remote_renderer_.is_bound());
|
|
|
| + // TODO(tguilbert): Update for the URL case.
|
| return !!demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO);
|
| }
|
|
|
| @@ -229,11 +268,21 @@ void MojoRenderer::OnVideoNaturalSizeChange(const gfx::Size& size) {
|
| DVLOG(2) << __FUNCTION__ << ": " << size.ToString();
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
|
|
| +#if !BUILDFLAG(FORCE_MOJO_MEDIA_PLAYER_RENDERER)
|
| + // TODO(tguilbert): Investigate why this line crashes when using the
|
| + // MediaPlayerRenderer.
|
| video_renderer_sink_->PaintSingleFrame(
|
| video_overlay_factory_->CreateFrame(size));
|
| +#endif
|
| +
|
| client_->OnVideoNaturalSizeChange(size);
|
| }
|
|
|
| +void MojoRenderer::OnDurationChange(int64_t duration_usec) {
|
| + DVLOG(2) << __FUNCTION__ << ": duration" << duration_usec;
|
| + client_->OnDurationChange(base::TimeDelta::FromMicroseconds(duration_usec));
|
| +}
|
| +
|
| void MojoRenderer::OnVideoOpacityChange(bool opaque) {
|
| DVLOG(2) << __FUNCTION__ << ": " << opaque;
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
|
|