diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a234c0a0d6..b06cdf2c94 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -35,6 +35,10 @@ * Audio: * Fix DTS:X Profile 2 encoding attributes for passthrough playback ([#1299](https://github.com/androidx/media/pull/1299)). + * For offloaded playback, reset the tracking field for stream completion + in `DefaultAudioSink` prior to calling `AudioTrack.stop()` so that + `AudioTrack.StreamEventCallback#onPresentationEnded` correctly + identifies when all pending data has been played. * Video: * Text: * Fix issue where subtitles starting before a seek position are skipped. 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 19f321741c..c9000e69ce 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 @@ -1869,6 +1869,11 @@ public final class DefaultAudioSink implements AudioSink { if (!stoppedAudioTrack) { stoppedAudioTrack = true; audioTrackPositionTracker.handleEndOfStream(getWrittenFrames()); + if (isOffloadedPlayback(audioTrack)) { + // Reset handledOffloadOnPresentationEnded to track completion after + // this following stop call. + handledOffloadOnPresentationEnded = false; + } audioTrack.stop(); bytesUntilNextAvSync = 0; }