Chromium Code Reviews| 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) |