From 0dfc1d3bb799ee2c48b51f9b6b32b0e350161b4d Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Tue, 19 May 2015 14:00:49 +0100 Subject: [PATCH] Don't sample the timestamp/latency for AC-3 passthrough playback. --- .../com/google/android/exoplayer/audio/AudioTrack.java | 8 +++++--- 1 file changed, 5 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 96271a2774..a5bc408751 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 @@ -574,6 +574,7 @@ public final class AudioTrack { submittedBytes = 0; temporaryBufferSize = 0; startMediaTimeUs = START_NOT_SET; + latencyUs = 0; resetSyncParams(); int playState = audioTrack.getPlayState(); if (playState == android.media.AudioTrack.PLAYSTATE_PLAYING) { @@ -647,9 +648,10 @@ public final class AudioTrack { } } - if (systemClockUs - lastTimestampSampleTimeUs >= MIN_TIMESTAMP_SAMPLE_INTERVAL_US) { - // Don't use AudioTrack.getTimestamp() on AC-3 tracks, as it gives an incorrect timestamp. - audioTimestampSet = !isAc3 && audioTrackUtil.updateTimestamp(); + // Don't sample the timestamp and latency if this is an AC-3 passthrough AudioTrack, as the + // returned values cause audio/video synchronization to be incorrect. + if (!isAc3 && systemClockUs - lastTimestampSampleTimeUs >= MIN_TIMESTAMP_SAMPLE_INTERVAL_US) { + audioTimestampSet = audioTrackUtil.updateTimestamp(); if (audioTimestampSet) { // Perform sanity checks on the timestamp. long audioTimestampUs = audioTrackUtil.getTimestampNanoTime() / 1000;