Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: media/renderers/renderer_impl.cc

Issue 1148473003: Fix deferred video underflow if audio underflows first. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove CHECK. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | media/renderers/renderer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/renderer_impl.cc
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index c06553a0d7dc9f955352b26b57cd066208df6fa7..8efe432a7ccd64f8fb5dc982ff2a17b415fbe05d 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -405,6 +405,10 @@ void RendererImpl::OnAudioRendererFlushDone() {
DCHECK_EQ(state_, STATE_FLUSHING);
DCHECK(!flush_cb_.is_null());
+ // If we had a deferred video renderer underflow prior to the flush, it should
+ // have been cleared by the audio renderer changing to BUFFERING_HAVE_NOTHING.
+ DCHECK(deferred_underflow_cb_.IsCancelled());
+
DCHECK_EQ(audio_buffering_state_, BUFFERING_HAVE_NOTHING);
audio_ended_ = false;
FlushVideoRenderer();
@@ -457,10 +461,12 @@ void RendererImpl::OnBufferingStateChanged(BufferingState* buffering_state,
bool was_waiting_for_enough_data = WaitingForEnoughData();
- // When audio is present, defer underflow callbacks for some time to avoid
- // unnecessary glitches in audio; see http://crbug.com/144683#c53.
+ // When audio is present and has enough data, defer video underflow callbacks
+ // for some time to avoid unnecessary glitches in audio; see
+ // http://crbug.com/144683#c53.
if (audio_renderer_ && !is_audio && state_ == STATE_PLAYING) {
if (video_buffering_state_ == BUFFERING_HAVE_ENOUGH &&
+ audio_buffering_state_ == BUFFERING_HAVE_ENOUGH &&
new_buffering_state == BUFFERING_HAVE_NOTHING &&
deferred_underflow_cb_.IsCancelled()) {
deferred_underflow_cb_.Reset(base::Bind(
« no previous file with comments | « no previous file | media/renderers/renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698