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..21db803dd72cb834814807cdc37e1e800a981f09 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" |
@@ -2681,26 +2683,37 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
base::Bind(&RenderThreadImpl::GetGpuFactories, |
base::Unretained(render_thread)), |
GetMediaInterfaceProvider())); |
+ media::MediaPlayerObserver* player_observer = nullptr; |
+ media::RemotingController* remoting_controller_ptr = nullptr; |
#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::RemotingController> remoting_controller( |
+ new media::RemotingController(GetRemoterFactory())); |
+ media::MediaPlayerObserver* player_observer = remoting_controller.get(); |
+ 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))); |
#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); |
+ std::move(media_renderer_factory), url_index_, player_observer, 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()); |