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

Unified Diff: media/mojo/services/mojo_renderer_service.cc

Issue 2239243002: Interpolate media time for mojo rendering pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moves media-time clamping to PipelineImpl Created 4 years, 3 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/mojo/services/mojo_renderer_service.h ('k') | media/renderers/audio_renderer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..729ce955f6fdcf36ddbc64d1ebe95a2d106819d3 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),
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,32 @@ 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;
+ // Allow some slop to account for delays in scheduling time update tasks.
+ if (time_update_timer_.IsRunning() && (playback_rate_ > 0))
+ max_time += base::TimeDelta::FromMilliseconds(2 * kTimeUpdateIntervalMs);
+
+ 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));
}
« no previous file with comments | « media/mojo/services/mojo_renderer_service.h ('k') | media/renderers/audio_renderer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698