| 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..b4da5901d55d5cada9f42a796e69533cd4b0aaf2 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 defined(ENABLE_MEDIA_REMOTING)
|
| +#include "media/remoting/remoting_controller.h"
|
| +#include "media/remoting/remoting_renderer_factory.h"
|
| +#endif
|
| +
|
| using blink::WebCachePolicy;
|
| using blink::WebContentDecryptionModule;
|
| using blink::WebContextMenuData;
|
| @@ -2618,6 +2623,20 @@ blink::WebPlugin* RenderFrameImpl::createPlugin(
|
| #endif // defined(ENABLE_PLUGINS)
|
| }
|
|
|
| +#if defined(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,
|
| @@ -2656,7 +2675,17 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| #if defined(OS_ANDROID)
|
| if (UseWebMediaPlayerImpl(url) && !media_surface_manager_)
|
| media_surface_manager_ = new RendererSurfaceViewManager(this);
|
| -#endif
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| +#if defined(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 // defined(ENABLE_MEDIA_REMOTING)
|
| +
|
| media::WebMediaPlayerParams params(
|
| base::Bind(&ContentRendererClient::DeferMediaLoad,
|
| base::Unretained(GetContentClient()->renderer()),
|
| @@ -2667,7 +2696,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)) {
|
| @@ -2681,22 +2710,28 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| base::Bind(&RenderThreadImpl::GetGpuFactories,
|
| base::Unretained(render_thread)),
|
| GetMediaInterfaceProvider()));
|
| +#elif defined(ENABLE_MEDIA_REMOTING)
|
| + std::unique_ptr<media::RendererFactory> default_renderer_factory(
|
| + new media::DefaultRendererFactory(
|
| + media_log, GetDecoderFactory(),
|
| + base::Bind(&RenderThreadImpl::GetGpuFactories,
|
| + base::Unretained(render_thread))));
|
| + media::RemotingController* remoting_controller_ptr =
|
| + remoting_controller.get();
|
| + std::unique_ptr<media::RendererFactory> media_renderer_factory(
|
| + new media::RemotingRendererFactory(std::move(default_renderer_factory),
|
| + std::move(remoting_controller)));
|
| #else
|
| std::unique_ptr<media::RendererFactory> media_renderer_factory(
|
| new media::DefaultRendererFactory(
|
| media_log, GetDecoderFactory(),
|
| base::Bind(&RenderThreadImpl::GetGpuFactories,
|
| base::Unretained(render_thread))));
|
| -#endif // defined(ENABLE_MOJO_RENDERER)
|
| +#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(),
|
| @@ -2705,7 +2740,12 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
|
| #if defined(OS_ANDROID) // WMPI_CAST
|
| media_player->SetMediaPlayerManager(GetMediaPlayerManager());
|
| media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor());
|
| -#endif
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| +#if defined(ENABLE_MEDIA_REMOTING)
|
| + remoting_controller_ptr->SetSwitchRendererCallback(base::Bind(
|
| + &media::WebMediaPlayerImpl::ScheduleRestart, media_player->AsWeakPtr()));
|
| +#endif // defined(ENABLE_MEDIA_REMOTING)
|
|
|
| return media_player;
|
| }
|
|
|