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

Unified Diff: media/renderers/renderer_impl.cc

Issue 1027553002: Change the TimeSource interface to return wallclock time for video. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment. Created 5 years, 9 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
Index: media/renderers/renderer_impl.cc
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index 936718512a029f93072ba81a4ed6123ec3683323..b78a36d84ed9f7a1356ff751b9fb38cd95805442 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -202,16 +202,17 @@ void RendererImpl::EnableClocklessVideoPlaybackForTesting() {
clockless_video_playback_enabled_for_testing_ = true;
}
-base::TimeDelta RendererImpl::GetMediaTimeForSyncingVideo() {
+base::TimeTicks RendererImpl::GetWallclockTimeForMediaTime(
+ base::TimeDelta time) {
// No BelongsToCurrentThread() checking because this can be called from other
// threads.
//
// TODO(scherkus): Currently called from VideoRendererImpl's internal thread,
// which should go away at some point http://crbug.com/110814
if (clockless_video_playback_enabled_for_testing_)
- return base::TimeDelta::Max();
+ return base::TimeTicks::Now();
- return time_source_->CurrentMediaTimeForSyncingVideo();
+ return time_source_->GetWallclockTimeForMediaTime(time);
}
void RendererImpl::SetDecryptorReadyCallback(
@@ -310,7 +311,7 @@ void RendererImpl::InitializeVideoRenderer() {
base::ResetAndReturn(&paint_cb_),
base::Bind(&RendererImpl::OnVideoRendererEnded, weak_this_),
base::Bind(&RendererImpl::OnError, weak_this_),
- base::Bind(&RendererImpl::GetMediaTimeForSyncingVideo,
+ base::Bind(&RendererImpl::GetWallclockTimeForMediaTime,
base::Unretained(this)),
waiting_for_decryption_key_cb_);
}
@@ -456,6 +457,12 @@ bool RendererImpl::WaitingForEnoughData() const {
DCHECK(task_runner_->BelongsToCurrentThread());
if (state_ != STATE_PLAYING)
return false;
+ // If playback has started and we have both an audio and video renderer,
+ // prefer the buffering state of the audio renderer.
+ if (time_ticking_ && audio_renderer_ && video_renderer_ &&
+ audio_buffering_state_ == BUFFERING_HAVE_ENOUGH) {
+ return false;
+ }
xhwang 2015/03/23 22:20:14 So for a audio/video content, if the video is way
DaleCurtis 2015/03/25 00:31:45 Correct, though in a meeting yesterday strobe@ bro
xhwang 2015/03/25 04:10:50 I can think of some corner cases where we want to
DaleCurtis 2015/03/26 18:32:56 Actually it turns out I misunderstood the code her
if (audio_renderer_ && audio_buffering_state_ != BUFFERING_HAVE_ENOUGH)
return true;
if (video_renderer_ && video_buffering_state_ != BUFFERING_HAVE_ENOUGH)

Powered by Google App Engine
This is Rietveld 408576698