From 2564c11834363c0f2cbe65f3a9cf2f8b3f8a8d2d 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 (cherry picked from commit da06bf057a230293c8fb7f06cbfba71df8c4b5b1) --- .../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);