Chromium Code Reviews| Index: media/mojo/services/mojo_renderer_service.cc |
| diff --git a/media/mojo/services/mojo_renderer_service.cc b/media/mojo/services/mojo_renderer_service.cc |
| index 40c7006c1f10d6dfa8373197958cd537d86c6ec2..851c04d3f2f35ee8153564147d43e7f24a05a673 100644 |
| --- a/media/mojo/services/mojo_renderer_service.cc |
| +++ b/media/mojo/services/mojo_renderer_service.cc |
| @@ -29,6 +29,7 @@ MojoRendererService::MojoRendererService( |
| : binding_(this, std::move(request)), |
| mojo_cdm_service_context_(mojo_cdm_service_context), |
| state_(STATE_UNINITIALIZED), |
| + playback_rate_(0.0), |
|
DaleCurtis
2016/09/06 19:21:25
Can just use zero.
alokp
2016/09/07 16:46:21
Done.
|
| audio_sink_(std::move(audio_sink)), |
| video_sink_(std::move(video_sink)), |
| renderer_(std::move(renderer)), |
| @@ -87,6 +88,7 @@ void MojoRendererService::StartPlayingFrom(base::TimeDelta time_delta) { |
| void MojoRendererService::SetPlaybackRate(double playback_rate) { |
| DVLOG(2) << __FUNCTION__ << ": " << playback_rate; |
| DCHECK(state_ == STATE_PLAYING || state_ == STATE_ERROR); |
| + playback_rate_ = playback_rate; |
| renderer_->SetPlaybackRate(playback_rate); |
| } |
| @@ -188,26 +190,33 @@ void MojoRendererService::OnRendererInitializeDone( |
| } |
| void MojoRendererService::UpdateMediaTime(bool force) { |
| - base::TimeDelta media_time = renderer_->GetMediaTime(); |
| + const base::TimeDelta media_time = renderer_->GetMediaTime(); |
| if (!force && media_time == last_media_time_) |
| return; |
| - client_->OnTimeUpdate(media_time, media_time); |
| + base::TimeDelta max_time = media_time; |
| + if (time_update_timer_.IsRunning() && (playback_rate_ > 0)) { |
|
DaleCurtis
2016/09/06 19:21:25
Drop unnecessary parens.
alokp
2016/09/07 16:46:21
Done.
|
| + // Allow some slop to account for delays in scheduling time update tasks. |
| + max_time += base::TimeDelta::FromMilliseconds(2 * kTimeUpdateIntervalMs); |
|
DaleCurtis
2016/09/06 19:21:25
Hmm, seems like something that may be implementati
alokp
2016/09/07 16:46:21
Are you referring to kTimeUpdateIntervalMs? This p
DaleCurtis
2016/09/08 16:58:23
No I meant the choice of 2*interval as the allowed
alokp
2016/09/08 17:01:42
I just used whatever was being used for the cma pi
DaleCurtis
2016/09/08 17:09:01
100ms just seems like a lot of wiggle room for a t
alokp
2016/09/08 17:36:28
This is not accurate. We always send a time-update
|
| + } |
| + |
| + client_->OnTimeUpdate(media_time, max_time, base::TimeTicks::Now()); |
| last_media_time_ = media_time; |
| } |
| void MojoRendererService::CancelPeriodicMediaTimeUpdates() { |
| DVLOG(2) << __FUNCTION__; |
| - UpdateMediaTime(false); |
| + |
| time_update_timer_.Stop(); |
| + UpdateMediaTime(false); |
| } |
| void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { |
| DVLOG(2) << __FUNCTION__; |
| + |
| UpdateMediaTime(true); |
| time_update_timer_.Start( |
| - FROM_HERE, |
| - base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), |
| + FROM_HERE, base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), |
| base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); |
| } |