Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index c00eba35c504f2609f199177843aaef8a30f67d5..5aead0f6ac08e24b1cd4912a879c6a01cc829075 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -160,6 +160,7 @@ |
#include "media/base/media.h" |
#include "media/base/media_log.h" |
#include "media/base/media_switches.h" |
+#include "media/base/renderer_factory_selector.h" |
#include "media/blink/url_index.h" |
#include "media/blink/webencryptedmediaclient_impl.h" |
#include "media/blink/webmediaplayer_impl.h" |
@@ -2898,6 +2899,7 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
#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>( |
@@ -2912,6 +2914,12 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
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) |
@@ -2921,6 +2929,8 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
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) { |
@@ -2928,12 +2938,16 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
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) |
} |
@@ -2941,11 +2955,18 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
media_renderer_factory = |
base::MakeUnique<media::remoting::AdaptiveRendererFactory>( |
std::move(media_renderer_factory), std::move(remoting_controller)); |
+ |
+ factory_type = media::RendererFactorySelector::FactoryType::ADAPTIVE; |
#endif |
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); |
+ |
std::unique_ptr<media::WebMediaPlayerParams> params( |
new media::WebMediaPlayerParams( |
std::move(media_log), |
@@ -2967,7 +2988,7 @@ blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( |
media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( |
frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), |
- std::move(media_renderer_factory), url_index_, std::move(params)); |
+ std::move(factory_selector), url_index_, std::move(params)); |
#if defined(OS_ANDROID) // WMPI_CAST |
media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |