Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 5aead0f6ac08e24b1cd4912a879c6a01cc829075..662e33b24dbe1a3def5c7a162ee295dfaaccfa34 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -2893,63 +2893,62 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
std::unique_ptr<media::MediaLog> media_log( |
new RenderMediaLog(url::Origin(security_origin).GetURL())); |
- bool use_fallback_path = false; |
+ auto factory_selector = base::MakeUnique<media::RendererFactorySelector>(); |
+ |
#if defined(OS_ANDROID) |
- use_fallback_path = UseMediaPlayerRenderer(url); |
+ // The only MojoRendererService that is registered at the RenderFrameHost |
+ // level uses the MediaPlayerRenderer as its underlying media::Renderer. |
+ auto mojo_media_player_renderer_factory = |
+ base::MakeUnique<media::MojoRendererFactory>( |
+ media::MojoRendererFactory::GetGpuFactoriesCB(), |
+ GetRemoteInterfaces()->get()); |
+ |
+ // Always give |factory_selector| a MediaPlayerRendererClient factory. WMPI |
+ // might fallback to it if the final redirected URL is an HLS url. |
+ factory_selector->AddFactory( |
+ media::RendererFactorySelector::FactoryType::MEDIA_PLAYER, |
+ base::MakeUnique<MediaPlayerRendererClientFactory>( |
+ render_thread->compositor_task_runner(), |
+ std::move(mojo_media_player_renderer_factory), |
+ base::Bind(&StreamTextureWrapperImpl::Create, |
+ render_thread->EnableStreamTextureCopy(), |
+ render_thread->GetStreamTexureFactory(), |
+ base::ThreadTaskRunnerHandle::Get()))); |
+ |
+ factory_selector->SetUseMediaPlayer(UseMediaPlayerRenderer(url)); |
#endif // defined(OS_ANDROID) |
std::unique_ptr<media::RendererFactory> media_renderer_factory; |
media::RendererFactorySelector::FactoryType factory_type; |
- if (use_fallback_path) { |
-#if defined(OS_ANDROID) |
- auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
- media::MojoRendererFactory::GetGpuFactoriesCB(), |
- GetRemoteInterfaces()->get()); |
- |
- media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( |
- render_thread->compositor_task_runner(), |
- std::move(mojo_renderer_factory), |
- base::Bind(&StreamTextureWrapperImpl::Create, |
- render_thread->EnableStreamTextureCopy(), |
- render_thread->GetStreamTexureFactory(), |
- base::ThreadTaskRunnerHandle::Get())); |
-#endif // defined(OS_ANDROID) |
- // TODO(tguilbert): Move this line back into an #if defined(OS_ANDROID). |
- // This will never be reached, unless we are on Android. Moving this line |
- // outside of the #if/#endif block fixes a "sometimes-uninitialized" error |
- // on desktop. This will be fixed with the next CL for crbug.com/663503. |
- factory_type = media::RendererFactorySelector::FactoryType::MEDIA_PLAYER; |
- } else { |
#if defined(ENABLE_MOJO_RENDERER) |
#if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kDisableMojoRenderer)) { |
- media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
- media_log.get(), GetDecoderFactory(), |
- base::Bind(&RenderThreadImpl::GetGpuFactories, |
- base::Unretained(render_thread))); |
- |
- factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
- } |
-#endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
- if (!media_renderer_factory) { |
- media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
- base::Bind(&RenderThreadImpl::GetGpuFactories, |
- base::Unretained(render_thread)), |
- GetMediaInterfaceProvider()); |
- |
- factory_type = media::RendererFactorySelector::FactoryType::MOJO; |
- } |
-#else |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kDisableMojoRenderer)) { |
media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
media_log.get(), GetDecoderFactory(), |
base::Bind(&RenderThreadImpl::GetGpuFactories, |
base::Unretained(render_thread))); |
factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
-#endif // defined(ENABLE_MOJO_RENDERER) |
} |
+#endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
+ if (!media_renderer_factory) { |
+ media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
+ base::Bind(&RenderThreadImpl::GetGpuFactories, |
+ base::Unretained(render_thread)), |
+ GetMediaInterfaceProvider()); |
+ |
+ factory_type = media::RendererFactorySelector::FactoryType::MOJO; |
+ } |
+#else |
+ media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
+ media_log.get(), GetDecoderFactory(), |
+ base::Bind(&RenderThreadImpl::GetGpuFactories, |
+ base::Unretained(render_thread))); |
+ |
+ factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
+#endif // defined(ENABLE_MOJO_RENDERER) |
#if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
media_renderer_factory = |
@@ -2962,8 +2961,6 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
if (!url_index_.get() || url_index_->frame() != frame_) |
url_index_.reset(new media::UrlIndex(frame_)); |
- auto factory_selector = base::MakeUnique<media::RendererFactorySelector>(); |
- |
factory_selector->AddFactory(factory_type, std::move(media_renderer_factory)); |
factory_selector->SetBaseFactoryType(factory_type); |
@@ -2993,7 +2990,6 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
#if defined(OS_ANDROID) // WMPI_CAST |
media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |
media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); |
- media_player->SetUseFallbackPath(use_fallback_path); |
#endif // defined(OS_ANDROID) |
return media_player; |