Commit 8afc0c34 by andrewlewis Committed by Oliver Woodman

Rollback of https://github.com/google/ExoPlayer/commit/962e08d3be3b47166d1628cd1951e115c5cc00be

*** Original commit ***

Add Offload gapless support

Confirmed to work on a Pixel 4 after enabling the feature:
 `setprop vendor.audio.offload.gapless.enabled true`

***

PiperOrigin-RevId: 315946947
parent 5324dc37
......@@ -434,12 +434,7 @@ public final class DefaultAudioSink implements AudioSink {
}
if (enableOffload
&& isOffloadedPlaybackSupported(
format.channelCount,
format.sampleRate,
encoding,
audioAttributes,
format.encoderDelay,
format.encoderPadding)) {
format.channelCount, format.sampleRate, encoding, audioAttributes)) {
return true;
}
return isPassthroughPlaybackSupported(encoding, format.channelCount);
......@@ -523,13 +518,7 @@ public final class DefaultAudioSink implements AudioSink {
boolean useOffload =
enableOffload
&& !isInputPcm
&& isOffloadedPlaybackSupported(
channelCount,
sampleRate,
encoding,
audioAttributes,
trimStartFrames,
trimEndFrames);
&& isOffloadedPlaybackSupported(channelCount, sampleRate, encoding, audioAttributes);
Configuration pendingConfiguration =
new Configuration(
......@@ -544,8 +533,6 @@ public final class DefaultAudioSink implements AudioSink {
processingEnabled,
canApplyPlaybackParameters,
availableAudioProcessors,
trimStartFrames,
trimEndFrames,
useOffload);
if (isInitialized()) {
this.pendingConfiguration = pendingConfiguration;
......@@ -591,8 +578,7 @@ public final class DefaultAudioSink implements AudioSink {
.buildAudioTrack(tunneling, audioAttributes, audioSessionId);
if (isOffloadedPlayback(audioTrack)) {
// Receive stream event callbacks on the current (playback) thread.
offloadStreamEventCallback.register(audioTrack);
audioTrack.setOffloadDelayPadding(configuration.trimStartFrames, configuration.trimEndFrames);
Assertions.checkNotNull(offloadStreamEventCallback).register(audioTrack);
}
int audioSessionId = audioTrack.getAudioSessionId();
if (enablePreV21AudioSessionWorkaround) {
......@@ -670,11 +656,6 @@ public final class DefaultAudioSink implements AudioSink {
// The current audio track can be reused for the new configuration.
configuration = pendingConfiguration;
pendingConfiguration = null;
if (isOffloadedPlayback(audioTrack)) {
audioTrack.setOffloadEndOfStream();
audioTrack.setOffloadDelayPadding(
configuration.trimStartFrames, configuration.trimEndFrames);
}
}
// Re-apply playback parameters.
applyPlaybackSpeedAndSkipSilence(presentationTimeUs);
......@@ -1267,24 +1248,14 @@ public final class DefaultAudioSink implements AudioSink {
int channelCount,
int sampleRateHz,
@C.Encoding int encoding,
AudioAttributes audioAttributes,
int trimStartFrames,
int trimEndFrames) {
AudioAttributes audioAttributes) {
if (Util.SDK_INT < 29) {
return false;
}
int channelMask = getChannelConfig(channelCount, /* isInputPcm= */ false);
AudioFormat audioFormat = getAudioFormat(sampleRateHz, channelMask, encoding);
if (!AudioManager.isOffloadedPlaybackSupported(
audioFormat, audioAttributes.getAudioAttributesV21())) {
return false;
}
if (trimStartFrames > 0 || trimEndFrames > 0) {
// TODO(internal b/158191844): Gapless offload is not supported by all devices and there is no
// API to query its support.
return false;
}
return true;
return AudioManager.isOffloadedPlaybackSupported(
audioFormat, audioAttributes.getAudioAttributesV21());
}
@EnsuresNonNullIf(
......@@ -1604,8 +1575,6 @@ public final class DefaultAudioSink implements AudioSink {
public final boolean processingEnabled;
public final boolean canApplyPlaybackParameters;
public final AudioProcessor[] availableAudioProcessors;
public int trimStartFrames;
public int trimEndFrames;
public final boolean useOffload;
public Configuration(
......@@ -1620,8 +1589,6 @@ public final class DefaultAudioSink implements AudioSink {
boolean processingEnabled,
boolean canApplyPlaybackParameters,
AudioProcessor[] availableAudioProcessors,
int trimStartFrames,
int trimEndFrames,
boolean useOffload) {
this.isInputPcm = isInputPcm;
this.inputPcmFrameSize = inputPcmFrameSize;
......@@ -1633,8 +1600,6 @@ public final class DefaultAudioSink implements AudioSink {
this.processingEnabled = processingEnabled;
this.canApplyPlaybackParameters = canApplyPlaybackParameters;
this.availableAudioProcessors = availableAudioProcessors;
this.trimStartFrames = trimStartFrames;
this.trimEndFrames = trimEndFrames;
this.useOffload = useOffload;
// Call computeBufferSize() last as it depends on the other configuration values.
......
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