From fb7ddb722c7d377d54817caebb53d014d679b283 Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 7 Dec 2015 09:59:33 -0800 Subject: [PATCH] Minor tweaks to AudioTrack playback params logic. - Use allowDefaults to fix crash if params are passed without the speed being explicitly set. - Allow null to be passed to clear previously set params. - Clarify in doc that the passed params shouldn't be modified after they're passed. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=109591580 --- .../MediaCodecAudioTrackRenderer.java | 5 ++-- .../android/exoplayer/audio/AudioTrack.java | 24 ++++++++++++------- 2 files changed, 19 insertions(+), 10 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 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); } }