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

Unified Diff: media/renderers/renderer_impl_unittest.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 | « media/renderers/renderer_impl.cc ('k') | media/renderers/video_renderer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/renderer_impl_unittest.cc
diff --git a/media/renderers/renderer_impl_unittest.cc b/media/renderers/renderer_impl_unittest.cc
index df4c8cca40684fb16ac2a2982101bd4f75b7c985..e4396580aa91e71d4e01a5f2c3d627be2e73e4ec 100644
--- a/media/renderers/renderer_impl_unittest.cc
+++ b/media/renderers/renderer_impl_unittest.cc
@@ -564,4 +564,42 @@ TEST_F(RendererImplTest, VideoAndAudioUnderflow) {
base::RunLoop().RunUntilIdle();
}
+TEST_F(RendererImplTest, VideoUnderflowWithAudioFlush) {
+ InitializeWithAudioAndVideo();
+ Play();
+
+ // Set a massive threshold such that it shouldn't fire within this test.
+ renderer_impl_->set_video_underflow_threshold_for_testing(
+ base::TimeDelta::FromSeconds(100));
+
+ // Simulate the cases where audio underflows and then video underflows.
+ EXPECT_CALL(time_source_, StopTicking());
+ audio_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ video_buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING);
+ Mock::VerifyAndClearExpectations(&time_source_);
+
+ // Flush the audio and video renderers, both think they're in an underflow
+ // state, but if the video renderer underflow was deferred, RendererImpl would
+ // think it still has enough data.
+ EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce(RunClosure<0>());
+ EXPECT_CALL(*video_renderer_, Flush(_)).WillOnce(RunClosure<0>());
+ EXPECT_CALL(callbacks_, OnFlushed());
+ renderer_impl_->Flush(
+ base::Bind(&CallbackHelper::OnFlushed, base::Unretained(&callbacks_)));
+ base::RunLoop().RunUntilIdle();
+
+ // Start playback after the flush, but never return BUFFERING_HAVE_ENOUGH from
+ // the video renderer (which simulates spool up time for the video renderer).
+ const base::TimeDelta kStartTime;
+ EXPECT_CALL(time_source_, SetMediaTime(kStartTime));
+ EXPECT_CALL(*audio_renderer_, StartPlaying())
+ .WillOnce(
+ SetBufferingState(&audio_buffering_state_cb_, BUFFERING_HAVE_ENOUGH));
+ EXPECT_CALL(*video_renderer_, StartPlayingFrom(kStartTime));
+ renderer_impl_->StartPlayingFrom(kStartTime);
+
+ // Nothing else should primed on the message loop.
+ base::RunLoop().RunUntilIdle();
+}
+
} // namespace media
« no previous file with comments | « media/renderers/renderer_impl.cc ('k') | media/renderers/video_renderer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698