| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 096178bc478602062e296a870d92c7a362397750..e38df5765143bdb55d98b7d4da75a5f095ac594f 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -250,6 +250,11 @@
|
| #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck
|
| #endif
|
|
|
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
|
| +#include "media/remoting/remoting_controller.h" // nogncheck
|
| +#include "media/remoting/remoting_renderer_factory.h" // nogncheck
|
| +#endif
|
| +
|
| using base::Time;
|
| using base::TimeDelta;
|
| using blink::WebCachePolicy;
|
| @@ -2645,6 +2650,20 @@ blink::WebPlugin* RenderFrameImpl::createPlugin(
|
| #endif // defined(ENABLE_PLUGINS)
|
| }
|
|
|
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
|
| +std::unique_ptr<media::RemotingController>
|
| +RenderFrameImpl::CreateRemotingController() {
|
| + 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));
|
| + return base::MakeUnique<media::RemotingController>(
|
| + std::move(remoting_source_request), std::move(remoter));
|
| +}
|
| +#endif
|
| +
|
| blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| const blink::WebMediaPlayerSource& source,
|
| WebMediaPlayerClient* client,
|
| @@ -2683,7 +2702,17 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| #if defined(OS_ANDROID)
|
| if (UseWebMediaPlayerImpl(url) && !media_surface_manager_)
|
| media_surface_manager_ = new RendererSurfaceViewManager(this);
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
|
| + std::unique_ptr<media::RemotingController> remoting_controller =
|
| + CreateRemotingController();
|
| + base::WeakPtr<media::MediaObserver> media_observer =
|
| + remoting_controller->GetWeakPtr();
|
| +#else
|
| + base::WeakPtr<media::MediaObserver> media_observer = nullptr;
|
| #endif
|
| +
|
| media::WebMediaPlayerParams params(
|
| base::Bind(&ContentRendererClient::DeferMediaLoad,
|
| base::Unretained(GetContentClient()->renderer()),
|
| @@ -2694,7 +2723,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)) {
|
| @@ -2714,16 +2743,18 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| media_log, GetDecoderFactory(),
|
| base::Bind(&RenderThreadImpl::GetGpuFactories,
|
| base::Unretained(render_thread))));
|
| -#endif // defined(ENABLE_MOJO_RENDERER)
|
| +#endif
|
| +
|
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
|
| + media::RemotingController* remoting_controller_ptr =
|
| + remoting_controller.get();
|
| + media_renderer_factory = base::MakeUnique<media::RemotingRendererFactory>(
|
| + std::move(media_renderer_factory), std::move(remoting_controller));
|
| +#endif
|
|
|
| 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(),
|
| @@ -2732,6 +2763,11 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| #if defined(OS_ANDROID) // WMPI_CAST
|
| media_player->SetMediaPlayerManager(GetMediaPlayerManager());
|
| media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor());
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
|
| + remoting_controller_ptr->SetSwitchRendererCallback(base::Bind(
|
| + &media::WebMediaPlayerImpl::ScheduleRestart, media_player->AsWeakPtr()));
|
| #endif
|
|
|
| return media_player;
|
| @@ -6282,11 +6318,13 @@ bool RenderFrameImpl::AreSecureCodecsSupported() {
|
| #endif // defined(OS_ANDROID)
|
| }
|
|
|
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING)
|
| media::mojom::RemoterFactory* RenderFrameImpl::GetRemoterFactory() {
|
| if (!remoter_factory_)
|
| GetRemoteInterfaces()->GetInterface(&remoter_factory_);
|
| return remoter_factory_.get();
|
| }
|
| +#endif
|
|
|
| media::CdmFactory* RenderFrameImpl::GetCdmFactory() {
|
| if (cdm_factory_)
|
|
|