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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2389473002: Media Remoting: Add RemotingController. (Closed)
Patch Set: Fix bug on Android. Created 4 years, 2 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: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b15731cc3614963ced8c7dd7a64cbe1dd3390b5f..2002e1225ef19eaf095be9d11239a66fe192e47f 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -146,6 +146,8 @@
#include "media/blink/url_index.h"
#include "media/blink/webencryptedmediaclient_impl.h"
#include "media/blink/webmediaplayer_impl.h"
+#include "media/remoting/remoting_controller.h"
+#include "media/remoting/remoting_renderer_factory.h"
#include "media/renderers/gpu_video_accelerator_factories.h"
#include "mojo/edk/js/core.h"
#include "mojo/edk/js/support.h"
@@ -2653,6 +2655,26 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
scoped_refptr<media::MediaLog> media_log(new RenderMediaLog(
blink::WebStringToGURL(frame_->getSecurityOrigin().toString())));
+#if defined(OS_ANDROID) || defined(ENABLE_MOJO_RENDERER)
+ std::unique_ptr<media::RemotingController> remoting_controller = nullptr;
+ base::WeakPtr<media::MediaObserver> media_observer = nullptr;
+ media::RemotingController* remoting_controller_ptr = nullptr;
+#else
+ media::mojom::RemotingSourcePtr remoting_source;
+ media::mojom::RemotingSourceRequest remoting_source_request =
+ mojo::GetProxy(&remoting_source);
+ media::mojom::RemoterPtr remoter;
+ GetRemoterFactory()->Create(std::move(remoting_source),
+ mojo::GetProxy(&remoter));
+ std::unique_ptr<media::RemotingController> remoting_controller =
+ base::MakeUnique<media::RemotingController>(
+ std::move(remoting_source_request), std::move(remoter));
+ base::WeakPtr<media::MediaObserver> media_observer =
+ remoting_controller->GetWeakPtr();
+ media::RemotingController* remoting_controller_ptr =
+ remoting_controller.get();
+#endif // defined(OS_ANDROID) || defined(ENABLE_MOJO_RENDERER)
xhwang 2016/10/04 06:30:29 nit: Is it possible to move this whole block to a
xjz 2016/10/04 19:21:29 Added a helper to create the RemotingController.
+
#if defined(OS_ANDROID)
if (UseWebMediaPlayerImpl(url) && !media_surface_manager_)
media_surface_manager_ = new RendererSurfaceViewManager(this);
@@ -2667,7 +2689,7 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
render_thread->compositor_task_runner(), context_3d_cb,
base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
base::Unretained(blink::mainThreadIsolate())),
- initial_cdm, media_surface_manager_);
+ initial_cdm, media_surface_manager_, media_observer);
#if defined(OS_ANDROID)
if (!UseWebMediaPlayerImpl(url)) {
@@ -2682,26 +2704,30 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
base::Unretained(render_thread)),
GetMediaInterfaceProvider()));
#else
- std::unique_ptr<media::RendererFactory> media_renderer_factory(
+ std::unique_ptr<media::RendererFactory> default_renderer_factory(
new media::DefaultRendererFactory(
media_log, GetDecoderFactory(),
base::Bind(&RenderThreadImpl::GetGpuFactories,
base::Unretained(render_thread))));
+ std::unique_ptr<media::RendererFactory> media_renderer_factory(
+ new media::RemotingRendererFactory(std::move(default_renderer_factory),
+ std::move(remoting_controller)));
xhwang 2016/10/04 06:30:29 +miu I am not sure whether the remoting sink has
xhwang 2016/10/04 06:30:29 Should we not use media::RemotingRendererFactory o
xjz 2016/10/04 19:21:29 |remoting_controller| will be nullptr on Android.
xjz 2016/10/04 19:21:29 |is_sink_available_| will not be true until the ch
xjz 2016/10/04 22:13:02 As discussed offline, now used the DefaultRenderer
#endif // defined(ENABLE_MOJO_RENDERER)
if (!url_index_.get() || url_index_->frame() != frame_)
url_index_.reset(new media::UrlIndex(frame_));
- // TODO(miu): In a soon-upcoming change, call GetRemoterFactory()->Create() to
- // allow the local media pipeline to receive notifications about when Media
- // Remoting can take place. Control logic in/around WebMediaPlayerImpl will
- // implement media.mojom.RemotingSource. http://crbug.com/643964
-
media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl(
frame_, client, encrypted_client,
GetWebMediaPlayerDelegate()->AsWeakPtr(),
std::move(media_renderer_factory), url_index_, params);
+ if (remoting_controller_ptr) {
+ remoting_controller_ptr->SetSwitchRenderCallback(
+ base::Bind(&media::WebMediaPlayerImpl::ScheduleRestart,
+ media_player->AsWeakPtr()));
+ }
+
#if defined(OS_ANDROID) // WMPI_CAST
media_player->SetMediaPlayerManager(GetMediaPlayerManager());
media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor());
« no previous file with comments | « content/renderer/BUILD.gn ('k') | media/base/BUILD.gn » ('j') | media/base/media_observer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698