From da06bf057a230293c8fb7f06cbfba71df8c4b5b1 Mon Sep 17 00:00:00 2001 From: michaelkatz Date: Tue, 3 Oct 2023 08:34:34 -0700 Subject: [PATCH] Disable offload scheduling at set up for track transition While sleeping for offload, position is estimated based on time playing. If asleep and AudioTrack is reused, then the position will keep incrementing as the subsequent item plays. That is until wakeup when playing position is updated to the timestamp of the second item. Offload scheduling should be disabled until track transitions fully. PiperOrigin-RevId: 570397140 --- .../androidx/media3/exoplayer/ExoPlayerImplInternal.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java index c6f58130a3..50bfd793fe 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java @@ -2251,6 +2251,11 @@ import java.util.concurrent.atomic.AtomicBoolean; readingPeriodHolder.getStartPositionRendererTime(), readingPeriodHolder.getRendererOffset(), readingPeriodHolder.info.id); + if (offloadSchedulingEnabled) { + // Prevent sleeping across offload track transition else position won't get updated. + // TODO: (b/183635183) Optimize Offload End-Of-Stream: Sleep to just before end of track + setOffloadSchedulingEnabled(false); + } } else if (renderer.isEnded()) { // The renderer has finished playback, so we can disable it now. disableRenderer(renderer);