Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index d1f0b448102d3dcb861b90c76ab7e71195487153..fb081b50fae8f5ee7647a5be2c40ce74934f92d5 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -1121,6 +1121,10 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_updated) { |
// Reset underflow count upon seek; this prevents looping videos and user |
// actions from artificially inflating the underflow count. |
underflow_count_ = 0; |
+ |
+ // Background video optimizations are delayed when shown/hidden if pipeline |
+ // is seeking. |
+ UpdateBackgroundVideoOptimizationState(); |
} |
void WebMediaPlayerImpl::OnPipelineSuspended() { |
@@ -1160,11 +1164,7 @@ void WebMediaPlayerImpl::OnBeforePipelineResume() { |
void WebMediaPlayerImpl::OnPipelineResumed() { |
is_pipeline_resuming_ = false; |
- if (IsHidden()) { |
- DisableVideoTrackIfNeeded(); |
- } else { |
- EnableVideoTrackIfNeeded(); |
- } |
+ UpdateBackgroundVideoOptimizationState(); |
} |
void WebMediaPlayerImpl::OnDemuxerOpened() { |
@@ -1411,13 +1411,8 @@ void WebMediaPlayerImpl::OnFrameHidden() { |
watch_time_reporter_->OnHidden(); |
if (ShouldPauseVideoWhenHidden()) { |
sandersd (OOO until July 31)
2017/01/20 22:57:00
Should just call UpdateBackgroundVideoOptimization
whywhat
2017/01/20 23:24:45
Hm, here we already know we're hidden.
We also wan
sandersd (OOO until July 31)
2017/01/20 23:29:42
Ah I see, I missed the early return when comparing
|
- if (!paused_when_hidden_) { |
- // OnPause() will set |paused_when_hidden_| to false and call |
- // UpdatePlayState(), so set the flag to true after and then return. |
- OnPause(); |
- paused_when_hidden_ = true; |
- return; |
- } |
+ PauseVideoIfNeeded(); |
+ return; |
} else { |
DisableVideoTrackIfNeeded(); |
} |
@@ -2182,9 +2177,35 @@ bool WebMediaPlayerImpl::IsBackgroundOptimizationCandidate() const { |
max_keyframe_distance_to_disable_background_video_; |
} |
+void WebMediaPlayerImpl::UpdateBackgroundVideoOptimizationState() { |
+ if (IsHidden()) { |
+ if (ShouldPauseVideoWhenHidden()) |
+ PauseVideoIfNeeded(); |
+ else |
+ DisableVideoTrackIfNeeded(); |
+ } else { |
+ EnableVideoTrackIfNeeded(); |
+ } |
+} |
+ |
+void WebMediaPlayerImpl::PauseVideoIfNeeded() { |
+ DCHECK(IsHidden()); |
+ |
+ // Don't pause video while the pipeline is stopped, resuming or seeking. |
+ // Also if the video is paused already. |
+ if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_ || paused_) |
+ return; |
+ |
+ // OnPause() will set |paused_when_hidden_| to false and call |
+ // UpdatePlayState(), so set the flag to true after and then return. |
+ OnPause(); |
+ paused_when_hidden_ = true; |
+} |
+ |
void WebMediaPlayerImpl::EnableVideoTrackIfNeeded() { |
- // Don't change video track while the pipeline is resuming or seeking. |
- if (is_pipeline_resuming_ || seeking_) |
+ // Don't change video track while the pipeline is stopped, resuming or |
+ // seeking. |
+ if (!pipeline_.IsRunning() || is_pipeline_resuming_ || seeking_) |
return; |
if (video_track_disabled_) { |