From fd576d218960d0ee862c9478ea5586a41646a332 Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 29 Sep 2017 18:35:39 -0700 Subject: [PATCH] Smoother PlaybackControlView updates when speed != 1 * If speed <= 0.1, update every second. * If 0.1 < speed < 1, update approximately once per second in real time, aligned so that each second boundary in media time has a corresponding updatae. * If speed == 1, keep existing behavior. * If 1 < speed <= 5, update every second in media time * If speed > 5, update every 200ms. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=170559037 --- .../exoplayer2/ui/PlaybackControlView.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java index f47ac8695c..e2ae1f732b 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java @@ -825,9 +825,19 @@ public class PlaybackControlView extends FrameLayout { if (playbackState != Player.STATE_IDLE && playbackState != Player.STATE_ENDED) { long delayMs; if (player.getPlayWhenReady() && playbackState == Player.STATE_READY) { - delayMs = 1000 - (position % 1000); - if (delayMs < 200) { - delayMs += 1000; + float playbackSpeed = player.getPlaybackParameters().speed; + if (playbackSpeed <= 0.1f) { + delayMs = 1000; + } else if (playbackSpeed <= 5f) { + long mediaTimeUpdatePeriodMs = 1000 / Math.max(1, Math.round(1 / playbackSpeed)); + long mediaTimeDelayMs = mediaTimeUpdatePeriodMs - (position % mediaTimeUpdatePeriodMs); + if (mediaTimeDelayMs < (mediaTimeUpdatePeriodMs / 5)) { + mediaTimeDelayMs += mediaTimeUpdatePeriodMs; + } + delayMs = playbackSpeed == 1 ? mediaTimeDelayMs + : (long) (mediaTimeDelayMs / playbackSpeed); + } else { + delayMs = 200; } } else { delayMs = 1000;