From a1083d360ad3ed77facf2ce543c4440363b37daf Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Fri, 8 May 2015 17:03:05 +0100 Subject: [PATCH] Prevent wrapping detection on new passthrough AudioTracks. --- .../google/android/exoplayer/audio/AudioTrack.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java b/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java index fc1e3125bc..75bf3bcf5f 100644 --- a/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java +++ b/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java @@ -790,9 +790,15 @@ public final class AudioTrack { public long getPlaybackHeadPosition() { long rawPlaybackHeadPosition = 0xFFFFFFFFL & audioTrack.getPlaybackHeadPosition(); if (Util.SDK_INT <= 22 && isPassthrough) { - // Work around an issue on platform API versions 21/22 where the playback head position - // jumps back to zero on paused passthrough/direct audio tracks. See [Internal: b/19187573]. - if (audioTrack.getPlayState() == android.media.AudioTrack.PLAYSTATE_PAUSED + // Work around issues with passthrough/direct AudioTracks on platform API versions 21/22: + // - After resetting, the new AudioTrack's playback position continues to increase for a + // short time from the old AudioTrack's position, while in the PLAYSTATE_STOPPED state. + // - The playback head position jumps back to zero on paused passthrough/direct audio + // tracks. See [Internal: b/19187573]. + if (audioTrack.getPlayState() == android.media.AudioTrack.PLAYSTATE_STOPPED) { + // Prevent detecting a wrapped position. + lastRawPlaybackHeadPosition = rawPlaybackHeadPosition; + } else if (audioTrack.getPlayState() == android.media.AudioTrack.PLAYSTATE_PAUSED && rawPlaybackHeadPosition == 0) { passthroughWorkaroundPauseOffset = lastRawPlaybackHeadPosition; }