| Index: media/mojo/clients/mojo_renderer_impl.cc
|
| diff --git a/media/mojo/clients/mojo_renderer_impl.cc b/media/mojo/clients/mojo_renderer_impl.cc
|
| index f407b89c57c7a98bcfa6b465b0911ad4d7631049..acb1c67c46f8681061de6e41f5ec090055545ea9 100644
|
| --- a/media/mojo/clients/mojo_renderer_impl.cc
|
| +++ b/media/mojo/clients/mojo_renderer_impl.cc
|
| @@ -13,8 +13,10 @@
|
| #include "media/base/demuxer_stream_provider.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"
|
| +#include "mojo/common/url_type_converters.h"
|
|
|
| namespace media {
|
|
|
| @@ -27,7 +29,8 @@ MojoRendererImpl::MojoRendererImpl(
|
| video_overlay_factory_(std::move(video_overlay_factory)),
|
| video_renderer_sink_(video_renderer_sink),
|
| remote_renderer_info_(remote_renderer.PassInterface()),
|
| - binding_(this) {
|
| + binding_(this),
|
| + surface_id_(-1) {
|
| DVLOG(1) << __FUNCTION__;
|
| }
|
|
|
| @@ -48,6 +51,20 @@ void MojoRendererImpl::Initialize(
|
| client_ = client;
|
| init_cb_ = init_cb;
|
|
|
| + if (!request_surface_cb_.is_null()) {
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(request_surface_cb_,
|
| + base::Bind(&MojoRendererImpl::OnSurfaceCreated,
|
| + base::Unretained(this))));
|
| + } else {
|
| + InitializeRenderer();
|
| + }
|
| +}
|
| +
|
| +void MojoRendererImpl::InitializeRenderer() {
|
| + DVLOG(1) << __FUNCTION__;
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| +
|
| // Create audio and video mojom::DemuxerStream and bind its lifetime to
|
| // the pipe.
|
| DemuxerStream* const audio =
|
| @@ -70,10 +87,20 @@ void MojoRendererImpl::Initialize(
|
| // |remote_renderer_| is destroyed.
|
| remote_renderer_->Initialize(
|
| binding_.CreateInterfacePtrAndBind(), std::move(audio_stream),
|
| - std::move(video_stream),
|
| + std::move(video_stream), mojo::String::From(url_), surface_id_,
|
| base::Bind(&MojoRendererImpl::OnInitialized, base::Unretained(this)));
|
| }
|
|
|
| +void MojoRendererImpl::OnSurfaceCreated(int surface_id) {
|
| + DVLOG(2) << __FUNCTION__;
|
| +
|
| + surface_id_ = surface_id;
|
| +
|
| + task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&MojoRendererImpl::InitializeRenderer,
|
| + base::Unretained(this)));
|
| +}
|
| +
|
| void MojoRendererImpl::SetCdm(CdmContext* cdm_context,
|
| const CdmAttachedCB& cdm_attached_cb) {
|
| DVLOG(1) << __FUNCTION__;
|
| @@ -179,11 +206,21 @@ void MojoRendererImpl::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 MojoRendererImpl::OnDurationChange(int64_t duration_usec) {
|
| + DVLOG(2) << __FUNCTION__ << ": duration" << duration_usec;
|
| + client_->OnDurationChange(base::TimeDelta::FromMicroseconds(duration_usec));
|
| +}
|
| +
|
| void MojoRendererImpl::OnVideoOpacityChange(bool opaque) {
|
| DVLOG(2) << __FUNCTION__ << ": " << opaque;
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| @@ -230,4 +267,15 @@ void MojoRendererImpl::OnInitialized(bool success) {
|
| success ? PIPELINE_OK : PIPELINE_ERROR_INITIALIZATION_FAILED);
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +void MojoRendererImpl::SetUrl(const GURL& url) {
|
| + url_ = url;
|
| +}
|
| +
|
| +void MojoRendererImpl::SetRequestSurfaceCB(
|
| + const RequestSurfaceCB& request_surface_cb) {
|
| + request_surface_cb_ = request_surface_cb;
|
| +}
|
| +#endif
|
| +
|
| } // namespace media
|
|
|