Chromium Code Reviews| 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_); |