| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index a195bbffe433dd586df6ba14be3dffe79a5891dd..22382e9825d840a02aacb698e82f4e973a29c8a3 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -267,6 +267,9 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861
|
| audio_source_provider_ =
|
| new WebAudioSourceProviderImpl(params.audio_renderer_sink(), media_log_);
|
| +
|
| + if (observer_)
|
| + observer_->SetClient(this);
|
| }
|
|
|
| WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
| @@ -1835,16 +1838,16 @@ void WebMediaPlayerImpl::UpdatePlayState() {
|
|
|
| #if defined(OS_ANDROID) // WMPI_CAST
|
| bool is_remote = isRemote();
|
| - bool is_streaming = false;
|
| + bool can_auto_suspend = true;
|
| #else
|
| bool is_remote = false;
|
| - bool is_streaming = IsStreaming();
|
| + bool can_auto_suspend = !disable_pipeline_auto_suspend_ && !IsStreaming();
|
| #endif
|
|
|
| bool is_suspended = pipeline_controller_.IsSuspended();
|
| bool is_backgrounded = IsBackgroundedSuspendEnabled() && IsHidden();
|
| PlayState state = UpdatePlayState_ComputePlayState(
|
| - is_remote, is_streaming, is_suspended, is_backgrounded);
|
| + is_remote, can_auto_suspend, is_suspended, is_backgrounded);
|
| SetDelegateState(state.delegate_state, state.is_idle);
|
| SetMemoryReportingState(state.is_memory_reporting_enabled);
|
| SetSuspendState(state.is_suspended || pending_suspend_resume_cycle_);
|
| @@ -1935,7 +1938,7 @@ void WebMediaPlayerImpl::SetSuspendState(bool is_suspended) {
|
|
|
| WebMediaPlayerImpl::PlayState
|
| WebMediaPlayerImpl::UpdatePlayState_ComputePlayState(bool is_remote,
|
| - bool is_streaming,
|
| + bool can_auto_suspend,
|
| bool is_suspended,
|
| bool is_backgrounded) {
|
| PlayState result;
|
| @@ -1963,10 +1966,10 @@ WebMediaPlayerImpl::UpdatePlayState_ComputePlayState(bool is_remote,
|
| bool can_play_backgrounded = is_backgrounded_video && !is_remote &&
|
| hasAudio() && IsResumeBackgroundVideosEnabled();
|
| bool is_background_playing = delegate_->IsBackgroundVideoPlaybackUnlocked();
|
| - bool background_suspended = !is_streaming && is_backgrounded_video &&
|
| + bool background_suspended = can_auto_suspend && is_backgrounded_video &&
|
| !(can_play_backgrounded && is_background_playing);
|
| bool background_pause_suspended =
|
| - !is_streaming && is_backgrounded && paused_ && have_future_data;
|
| + can_auto_suspend && is_backgrounded && paused_ && have_future_data;
|
|
|
| // Idle suspension is allowed prior to have future data since there exist
|
| // mechanisms to exit the idle state when the player is capable of reaching
|
| @@ -1975,7 +1978,7 @@ WebMediaPlayerImpl::UpdatePlayState_ComputePlayState(bool is_remote,
|
| // TODO(sandersd): Make the delegate suspend idle players immediately when
|
| // hidden.
|
| bool idle_suspended =
|
| - !is_streaming && is_stale && paused_ && !seeking_ && !overlay_enabled_;
|
| + can_auto_suspend && is_stale && paused_ && !seeking_ && !overlay_enabled_;
|
|
|
| // If we're already suspended, see if we can wait for user interaction. Prior
|
| // to HaveFutureData, we require |is_stale| to remain suspended. |is_stale|
|
| @@ -2287,4 +2290,10 @@ void WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame(
|
| }
|
| }
|
|
|
| +void WebMediaPlayerImpl::SwitchRenderer(bool disable_pipeline_auto_suspend) {
|
| + DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| + disable_pipeline_auto_suspend_ = disable_pipeline_auto_suspend;
|
| + ScheduleRestart();
|
| +}
|
| +
|
| } // namespace media
|
|
|