From 5d0d30a2807faf99dbe58538f86bff879b581a87 Mon Sep 17 00:00:00 2001 From: michaelkatz Date: Fri, 6 Oct 2023 07:43:11 -0700 Subject: [PATCH] Allow pause if in offload mode after writing all buffers In offload mode, `AudioTrack#stop()` will put the track in `PLAYSTATE_STOPPING` rather than `PLAYSTATE_STOPPED`. The difference in state means that `AudioTrack` can be paused and played during this 'stopping' period. Currently, if `AudioTrackPositionTracker#handleEndOfStream()` has been called then `DefaultAudioSink` in `pause()` won't call `AudioTrack#pause()`. `AudioTrack#pause()` should be called in this case if in offload mode. #minor-release PiperOrigin-RevId: 571335108 (cherry picked from commit ab42d64d6d5f1859f1c45aebfe26060978b864bd) --- .../java/androidx/media3/exoplayer/audio/DefaultAudioSink.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java index 62c202849f..19166aec9c 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java @@ -1407,7 +1407,8 @@ public final class DefaultAudioSink implements AudioSink { @Override public void pause() { playing = false; - if (isAudioTrackInitialized() && audioTrackPositionTracker.pause()) { + if (isAudioTrackInitialized() + && (audioTrackPositionTracker.pause() || isOffloadedPlayback(audioTrack))) { audioTrack.pause(); } }