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()); |