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 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()); |