Chromium Code Reviews| Index: content/renderer/render_frame_impl.cc |
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
| index ecd8707fdb398239efb7a16e8ed86330f0641b04..f541429795cb20cd704f61305194345624ec5869 100644 |
| --- a/content/renderer/render_frame_impl.cc |
| +++ b/content/renderer/render_frame_impl.cc |
| @@ -250,6 +250,12 @@ |
| #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck |
| #endif |
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
| +#include "media/remoting/remoting_cdm_factory.h" |
| +#include "media/remoting/remoting_controller.h" |
| +#include "media/remoting/remoting_renderer_factory.h" |
| +#endif |
| + |
| using base::Time; |
| using base::TimeDelta; |
| using blink::WebCachePolicy; |
| @@ -2645,6 +2651,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 +2703,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 +2724,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 +2744,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 +2764,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; |
| @@ -6289,11 +6326,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_) |
| @@ -6312,6 +6351,13 @@ media::CdmFactory* RenderFrameImpl::GetCdmFactory() { |
| new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); |
| #endif // defined(ENABLE_PEPPER_CDMS) |
| +#if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
|
miu
2016/10/08 01:06:15
This needs to go inside the #if...#endif section a
xjz
2016/10/20 21:25:27
Done.
|
| + cdm_factory_.reset(new media::RemotingCdmFactory( |
| + base::MakeUnique<RenderCdmFactory>( |
| + base::Bind(&PepperCdmWrapperImpl::Create, frame_)), |
| + GetRemoterFactory())); |
| +#endif |
| + |
| return cdm_factory_.get(); |
| } |