Index: media/base/renderer_factory_selector.cc |
diff --git a/media/base/renderer_factory_selector.cc b/media/base/renderer_factory_selector.cc |
index 49e3fce042ca9071af8622fd6d7b3f294434f939..3eb41fced272095dd0f017d5f20e22767959930b 100644 |
--- a/media/base/renderer_factory_selector.cc |
+++ b/media/base/renderer_factory_selector.cc |
@@ -23,22 +23,38 @@ void RendererFactorySelector::AddFactory( |
void RendererFactorySelector::SetBaseFactoryType(FactoryType type) { |
DCHECK(factories_[type]); |
base_factory_type_ = type; |
+ current_factory_needs_update_ = true; |
} |
-RendererFactory* RendererFactorySelector::GetCurrentFactory() { |
+// For the moment, this method should only be called once or twice. |
+// This method will be regularly called whenever the logic in choosing a |
+// renderer type is moved out of the AdaptiveRendererFactory, into this method. |
+void RendererFactorySelector::UpdateCurrentFactory() { |
DCHECK(base_factory_type_); |
FactoryType next_factory_type = base_factory_type_.value(); |
- RendererFactory* factory = factories_[next_factory_type].get(); |
+ if (use_media_player_) |
+ next_factory_type = FactoryType::MEDIA_PLAYER; |
+ |
+ DVLOG(1) << __func__ << " Selecting factory type: " << next_factory_type; |
+ |
+ current_factory_ = factories_[next_factory_type].get(); |
+ current_factory_needs_update_ = false; |
+} |
- if (factory == nullptr) { |
- NOTREACHED(); |
- return nullptr; |
- } |
+RendererFactory* RendererFactorySelector::GetCurrentFactory() { |
+ if (current_factory_needs_update_) |
+ UpdateCurrentFactory(); |
- DVLOG(1) << __func__ << " Selected factory type: " << next_factory_type; |
+ DCHECK(current_factory_); |
+ return current_factory_; |
+} |
- return factory; |
+#if defined(OS_ANDROID) |
+void RendererFactorySelector::SetUseMediaPlayer(bool use_media_player) { |
+ use_media_player_ = use_media_player; |
+ current_factory_needs_update_ = true; |
} |
+#endif |
} // namespace media |