Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 7eb3e70716f3e7c643380e70a44f5200f8df484d..a9d9429bdd3dd0b344135411c18d1ff65947d2b6 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -28,6 +28,7 @@ |
#include "cc/blink/web_layer_impl.h" |
#include "cc/layers/video_layer.h" |
#include "media/audio/null_audio_sink.h" |
+#include "media/base/android/media_url_demuxer.h" |
#include "media/base/bind_to_current_loop.h" |
#include "media/base/cdm_context.h" |
#include "media/base/limits.h" |
@@ -45,6 +46,7 @@ |
#include "media/blink/webmediasource_impl.h" |
#include "media/filters/chunk_demuxer.h" |
#include "media/filters/ffmpeg_demuxer.h" |
+#include "media/media_features.h" |
#include "third_party/WebKit/public/platform/WebEncryptedMediaTypes.h" |
#include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" |
#include "third_party/WebKit/public/platform/WebMediaPlayerEncryptedMediaClient.h" |
@@ -207,7 +209,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
surface_manager_(params.surface_manager()), |
fullscreen_surface_id_(SurfaceManager::kNoSurfaceID), |
suppress_destruction_errors_(false), |
- can_suspend_state_(CanSuspendState::UNKNOWN) { |
+ can_suspend_state_(CanSuspendState::UNKNOWN), |
+ use_fallback_path_(false) { |
DCHECK(!adjust_allocated_memory_cb_.is_null()); |
DCHECK(renderer_factory_); |
DCHECK(client_); |
@@ -1016,8 +1019,10 @@ void WebMediaPlayerImpl::OnMetadata(PipelineMetadata metadata) { |
surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); |
DCHECK(!video_weblayer_); |
+ |
video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( |
compositor_, pipeline_metadata_.video_rotation))); |
+ |
video_weblayer_->layer()->SetContentsOpaque(opaque_); |
video_weblayer_->SetContentsOpaqueIsFixed(true); |
client_->setWebLayer(video_weblayer_.get()); |
@@ -1250,6 +1255,11 @@ void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) { |
void WebMediaPlayerImpl::setPoster(const blink::WebURL& poster) { |
cast_impl_.setPoster(poster); |
} |
+ |
+void WebMediaPlayerImpl::EnableFallbackMediaPlayer(GURL url) { |
+ fallback_url_ = url; |
+ use_fallback_path_ = true; |
+} |
#endif // defined(OS_ANDROID) // WMPI_CAST |
void WebMediaPlayerImpl::DataSourceInitialized(bool success) { |
@@ -1309,6 +1319,7 @@ void WebMediaPlayerImpl::OnSurfaceRequested( |
const SurfaceCreatedCB& surface_created_cb) { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
DCHECK(surface_manager_); |
+ DCHECK(!use_fallback_path_); |
// A null callback indicates that the decoder is going away. |
if (surface_created_cb.is_null()) { |
@@ -1353,6 +1364,12 @@ void WebMediaPlayerImpl::StartPipeline() { |
Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = |
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnEncryptedMediaInitData); |
+ if (use_fallback_path_) { |
+ demuxer_.reset(new MediaUrlDemuxer(media_task_runner_, fallback_url_)); |
+ pipeline_controller_.Start(demuxer_.get(), this, true, true); |
+ return; |
Julien Isorce Samsung
2016/08/08 12:58:01
Hi, sorry for the short introduction, I was thinki
|
+ } |
+ |
// Figure out which demuxer to use. |
if (load_type_ != LoadTypeMediaSource) { |
DCHECK(!chunk_demuxer_); |