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
This commit is contained in:
krocard 2021-05-05 10:03:46 +01:00 committed by bachinger
parent b71c47f0dd
commit 4d4e235697

View file

@ -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.
*
* <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
@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);