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

Unified Diff: media/mojo/clients/mojo_renderer_impl.cc

Issue 2075303002: [DO NOT COMMIT] Initial MediaPlayerRenderer plumbing and basic features (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
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

Powered by Google App Engine
This is Rietveld 408576698