Commit 4d4e2356 by krocard Committed by bachinger

Allow disabling offload gapless

Issues have been identified around
offload gapless track transitions blocking
the track timestamp.
Until those issues are root caused, this settings
allows to disable gapless offload completely.

PiperOrigin-RevId: 372081545
parent b71c47f0
...@@ -221,7 +221,8 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -221,7 +221,8 @@ public final class DefaultAudioSink implements AudioSink {
@IntDef({ @IntDef({
OFFLOAD_MODE_DISABLED, OFFLOAD_MODE_DISABLED,
OFFLOAD_MODE_ENABLED_GAPLESS_REQUIRED, 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 {} public @interface OffloadMode {}
...@@ -243,6 +244,13 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -243,6 +244,13 @@ public final class DefaultAudioSink implements AudioSink {
* transitions between tracks of the same album. * transitions between tracks of the same album.
*/ */
public static final int OFFLOAD_MODE_ENABLED_GAPLESS_NOT_REQUIRED = 2; public static final int OFFLOAD_MODE_ENABLED_GAPLESS_NOT_REQUIRED = 2;
/**
* The audio sink will prefer offload playback, disabling gapless offload support.
*
* <p>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 @Documented
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
...@@ -653,9 +661,11 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -653,9 +661,11 @@ public final class DefaultAudioSink implements AudioSink {
audioTrack = buildAudioTrack(); audioTrack = buildAudioTrack();
if (isOffloadedPlayback(audioTrack)) { if (isOffloadedPlayback(audioTrack)) {
registerStreamEventCallbackV29(audioTrack); registerStreamEventCallbackV29(audioTrack);
if (offloadMode != OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED) {
audioTrack.setOffloadDelayPadding( audioTrack.setOffloadDelayPadding(
configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding); configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding);
} }
}
audioSessionId = audioTrack.getAudioSessionId(); audioSessionId = audioTrack.getAudioSessionId();
audioTrackPositionTracker.setAudioTrack( audioTrackPositionTracker.setAudioTrack(
audioTrack, audioTrack,
...@@ -710,7 +720,8 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -710,7 +720,8 @@ public final class DefaultAudioSink implements AudioSink {
// The current audio track can be reused for the new configuration. // The current audio track can be reused for the new configuration.
configuration = pendingConfiguration; configuration = pendingConfiguration;
pendingConfiguration = null; pendingConfiguration = null;
if (isOffloadedPlayback(audioTrack)) { if (isOffloadedPlayback(audioTrack)
&& offloadMode != OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED) {
audioTrack.setOffloadEndOfStream(); audioTrack.setOffloadEndOfStream();
audioTrack.setOffloadDelayPadding( audioTrack.setOffloadDelayPadding(
configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding); configuration.inputFormat.encoderDelay, configuration.inputFormat.encoderPadding);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment