From e0a29c841ebcfb887c5562e4f12f985799e61b4a Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Tue, 12 Aug 2014 14:12:05 +0100 Subject: [PATCH] Don't release AudioTrack unless we have to. --- .../exoplayer/MediaCodecAudioTrackRenderer.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java index c02e8a9135..798282dd91 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java @@ -266,8 +266,6 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer { @Override protected void onOutputFormatChanged(MediaFormat format) { - releaseAudioTrack(); - this.sampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE); int channelCount = format.getInteger(MediaFormat.KEY_CHANNEL_COUNT); int channelConfig; switch (channelCount) { @@ -283,6 +281,16 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer { default: throw new IllegalArgumentException("Unsupported channel count: " + channelCount); } + + int sampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE); + if (audioTrack != null && this.sampleRate == sampleRate + && this.channelConfig == channelConfig) { + // We already have an existing audio track with the correct sample rate and channel config. + return; + } + + releaseAudioTrack(); + this.sampleRate = sampleRate; this.channelConfig = channelConfig; this.minBufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, AudioFormat.ENCODING_PCM_16BIT);