diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java index 47bfba9efe..10ac561014 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java @@ -221,7 +221,8 @@ public final class DefaultAudioSink implements AudioSink { @IntDef({ OFFLOAD_MODE_DISABLED, OFFLOAD_MODE_ENABLED_GAPLESS_REQUIRED, - OFFLOAD_MODE_ENABLED_GAPLESS_NOT_REQUIRED + OFFLOAD_MODE_ENABLED_GAPLESS_NOT_REQUIRED, + OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED }) public @interface OffloadMode {} @@ -243,6 +244,13 @@ public final class DefaultAudioSink implements AudioSink { * transitions between tracks of the same album. */ public static final int OFFLOAD_MODE_ENABLED_GAPLESS_NOT_REQUIRED = 2; + /** + * The audio sink will prefer offload playback, disabling gapless offload support. + * + *

Use this option if gapless has undesirable side effects. For example if it introduces + * hardware issues. + */ + public static final int OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED = 3; @Documented @Retention(RetentionPolicy.SOURCE) @@ -653,8 +661,10 @@ public final class DefaultAudioSink implements AudioSink { audioTrack = buildAudioTrack(); if (isOffloadedPlayback(audioTrack)) { registerStreamEventCallbackV29(audioTrack); - audioTrack.setOffloadDelayPadding( - configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding); + if (offloadMode != OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED) { + audioTrack.setOffloadDelayPadding( + configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding); + } } audioSessionId = audioTrack.getAudioSessionId(); audioTrackPositionTracker.setAudioTrack( @@ -710,7 +720,8 @@ public final class DefaultAudioSink implements AudioSink { // The current audio track can be reused for the new configuration. configuration = pendingConfiguration; pendingConfiguration = null; - if (isOffloadedPlayback(audioTrack)) { + if (isOffloadedPlayback(audioTrack) + && offloadMode != OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED) { audioTrack.setOffloadEndOfStream(); audioTrack.setOffloadDelayPadding( configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding);