Chromium Code Reviews| Index: media/renderers/video_renderer_impl.cc |
| diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc |
| index 2b662c65f264318900524d15e4234134ccd6e745..c6902976272cad8a0a1d0c3e88d49c994559e292 100644 |
| --- a/media/renderers/video_renderer_impl.cc |
| +++ b/media/renderers/video_renderer_impl.cc |
| @@ -316,8 +316,10 @@ void VideoRendererImpl::OnTimeStateChanged(bool time_progressing) { |
| // otherwise playback may hang indefinitely. Note: There are no effective |
| // frames queued at this point, otherwise FrameReady() would have canceled |
| // the underflow state before reaching this point. |
| - if (buffering_state_ == BUFFERING_HAVE_NOTHING) |
| + if (buffering_state_ == BUFFERING_HAVE_NOTHING) { |
| + base::AutoLock al(lock_); |
|
watk
2016/09/26 23:12:43
I just noticed this. The comment on l.292 says not
DaleCurtis
2016/09/26 23:23:42
I think the comment is out of date since we no lon
|
| RemoveFramesForUnderflowOrBackgroundRendering(); |
| + } |
| } |
| } |
| @@ -456,6 +458,14 @@ void VideoRendererImpl::TransitionToHaveNothing() { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| base::AutoLock auto_lock(lock_); |
| + TransitionToHaveNothing_Locked(); |
| +} |
| + |
| +void VideoRendererImpl::TransitionToHaveNothing_Locked() { |
| + DVLOG(3) << __func__; |
| + DCHECK(task_runner_->BelongsToCurrentThread()); |
| + lock_.AssertAcquired(); |
| + |
| if (buffering_state_ != BUFFERING_HAVE_ENOUGH || HaveEnoughData_Locked()) |
| return; |
| @@ -657,6 +667,12 @@ void VideoRendererImpl::RemoveFramesForUnderflowOrBackgroundRendering() { |
| frames_dropped_ += algorithm_->frames_queued(); |
| algorithm_->Reset( |
| VideoRendererAlgorithm::ResetFlag::kPreserveNextFrameEstimates); |
| + |
| + // It's possible in the background rendering case for us to expire enough |
| + // frames that we need to transition from HAVE_ENOUGH => HAVE_NOTHING. Just |
| + // calling this function will check if we need to transition or not. |
| + if (buffering_state_ == BUFFERING_HAVE_ENOUGH) |
| + TransitionToHaveNothing_Locked(); |
| } |
| } |