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 df322af3a2..6f641b19e1 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java @@ -80,8 +80,9 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem /** * The type of a message that can be passed to an instance of this class via * {@link ExoPlayer#sendMessage} or {@link ExoPlayer#blockingSendMessage}. The message object - * should be a {@link android.media.PlaybackParams}. This will be used to configure the - * underlying {@link android.media.AudioTrack}. + * should be a {@link android.media.PlaybackParams}, which will be used to configure the + * underlying {@link android.media.AudioTrack}. The message object should not be modified by the + * caller after it has been passed */ public static final int MSG_SET_PLAYBACK_PARAMS = 2; 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 06ceecc656..c82ea25f22 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 @@ -1193,28 +1193,36 @@ public final class AudioTrack { private static class AudioTrackUtilV23 extends AudioTrackUtilV19 { private PlaybackParams playbackParams; + private float playbackSpeed; + + public AudioTrackUtilV23() { + playbackSpeed = 1.0f; + } @Override public void reconfigure(android.media.AudioTrack audioTrack, boolean needsPassthroughWorkaround) { super.reconfigure(audioTrack, needsPassthroughWorkaround); - setPlaybackParameters(playbackParams); + maybeApplyPlaybackParams(); } @Override public void setPlaybackParameters(PlaybackParams playbackParams) { + playbackParams = (playbackParams != null ? playbackParams : new PlaybackParams()) + .allowDefaults(); this.playbackParams = playbackParams; - if (audioTrack != null && playbackParams != null) { - audioTrack.setPlaybackParams(playbackParams); - } + this.playbackSpeed = playbackParams.getSpeed(); + maybeApplyPlaybackParams(); } @Override public float getPlaybackSpeed() { - if (playbackParams != null) { - return playbackParams.getSpeed(); - } else { - return 1.0f; + return playbackSpeed; + } + + private void maybeApplyPlaybackParams() { + if (audioTrack != null && playbackParams != null) { + audioTrack.setPlaybackParams(playbackParams); } }