Commit 26aee812 by tianyifeng Committed by Tianyi Feng

Rollback of https://github.com/androidx/media/commit/6109a0eb624dfc8d4153e85f67556b6b3c38b9cc

*** Original commit ***

Intercept audio capabilities change in `DefaultAudioSink`

***

PiperOrigin-RevId: 519760267
parent df46748c
...@@ -21,11 +21,6 @@ ...@@ -21,11 +21,6 @@
* Extrapolate current position during sleep with offload scheduling. * Extrapolate current position during sleep with offload scheduling.
* Add `Renderer.release()` and `AudioSink.release()` for releasing the * Add `Renderer.release()` and `AudioSink.release()` for releasing the
resources at the end of player's lifecycle. resources at the end of player's lifecycle.
* Listen to audio capabilities changes in `DefaultAudioSink`. Add a
required parameter `context` in the constructor of `DefaultAudioSink`,
with which the `DefaultAudioSink` will register as the listener to the
`AudioCapabilitiesReceiver` and update its `audioCapabilities` property
when informed with a capabilities change.
* DRM: * DRM:
* Reduce the visibility of several internal-only methods on * Reduce the visibility of several internal-only methods on
`DefaultDrmSession` that aren't expected to be called from outside the `DefaultDrmSession` that aren't expected to be called from outside the
......
...@@ -26,6 +26,7 @@ import androidx.annotation.IntDef; ...@@ -26,6 +26,7 @@ import androidx.annotation.IntDef;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.media3.common.util.Log; import androidx.media3.common.util.Log;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.audio.AudioCapabilities;
import androidx.media3.exoplayer.audio.AudioRendererEventListener; import androidx.media3.exoplayer.audio.AudioRendererEventListener;
import androidx.media3.exoplayer.audio.AudioSink; import androidx.media3.exoplayer.audio.AudioSink;
import androidx.media3.exoplayer.audio.DefaultAudioSink; import androidx.media3.exoplayer.audio.DefaultAudioSink;
...@@ -648,7 +649,8 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -648,7 +649,8 @@ public class DefaultRenderersFactory implements RenderersFactory {
boolean enableFloatOutput, boolean enableFloatOutput,
boolean enableAudioTrackPlaybackParams, boolean enableAudioTrackPlaybackParams,
boolean enableOffload) { boolean enableOffload) {
return new DefaultAudioSink.Builder(context) return new DefaultAudioSink.Builder()
.setAudioCapabilities(AudioCapabilities.getCapabilities(context))
.setEnableFloatOutput(enableFloatOutput) .setEnableFloatOutput(enableFloatOutput)
.setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams) .setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams)
.setOffloadMode( .setOffloadMode(
......
...@@ -24,7 +24,6 @@ import static java.lang.Math.min; ...@@ -24,7 +24,6 @@ import static java.lang.Math.min;
import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.ElementType.TYPE_USE;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context;
import android.media.AudioDeviceInfo; import android.media.AudioDeviceInfo;
import android.media.AudioFormat; import android.media.AudioFormat;
import android.media.AudioManager; import android.media.AudioManager;
...@@ -228,7 +227,6 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -228,7 +227,6 @@ public final class DefaultAudioSink implements AudioSink {
/** A builder to create {@link DefaultAudioSink} instances. */ /** A builder to create {@link DefaultAudioSink} instances. */
public static final class Builder { public static final class Builder {
@Nullable private final Context context;
private AudioCapabilities audioCapabilities; private AudioCapabilities audioCapabilities;
@Nullable private androidx.media3.common.audio.AudioProcessorChain audioProcessorChain; @Nullable private androidx.media3.common.audio.AudioProcessorChain audioProcessorChain;
private boolean enableFloatOutput; private boolean enableFloatOutput;
...@@ -237,34 +235,19 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -237,34 +235,19 @@ public final class DefaultAudioSink implements AudioSink {
AudioTrackBufferSizeProvider audioTrackBufferSizeProvider; AudioTrackBufferSizeProvider audioTrackBufferSizeProvider;
@Nullable AudioOffloadListener audioOffloadListener; @Nullable AudioOffloadListener audioOffloadListener;
/** /** Creates a new builder. */
* @deprecated Use {@link #Builder(Context)} instead.
*/
@Deprecated
public Builder() { public Builder() {
this(/* context= */ null);
}
/**
* Creates a new builder.
*
* @param context The {@link Context}.
*/
public Builder(@Nullable Context context) {
this.context = context;
audioCapabilities = DEFAULT_AUDIO_CAPABILITIES; audioCapabilities = DEFAULT_AUDIO_CAPABILITIES;
offloadMode = OFFLOAD_MODE_DISABLED; offloadMode = OFFLOAD_MODE_DISABLED;
audioTrackBufferSizeProvider = AudioTrackBufferSizeProvider.DEFAULT; audioTrackBufferSizeProvider = AudioTrackBufferSizeProvider.DEFAULT;
} }
/** /**
* @deprecated The {@linkplain AudioCapabilities audio capabilities} set to the {@linkplain * Sets audio capabilities for playback on this device. May be {@code null} if the default
* Builder builder} will be effective for the {@link DefaultAudioSink} only in the absence * capabilities (no encoded audio passthrough support) should be assumed.
* of {@linkplain Context context}. If the {@code Context} is {@code null} and the {@code *
* audioCapabilities} is not set to the {@code Builder}, the default capabilities (no * <p>Default is {@link AudioCapabilities#DEFAULT_AUDIO_CAPABILITIES}.
* encoded audio passthrough support) should be assumed.
*/ */
@Deprecated
@CanIgnoreReturnValue @CanIgnoreReturnValue
public Builder setAudioCapabilities(AudioCapabilities audioCapabilities) { public Builder setAudioCapabilities(AudioCapabilities audioCapabilities) {
checkNotNull(audioCapabilities); checkNotNull(audioCapabilities);
...@@ -500,7 +483,6 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -500,7 +483,6 @@ public final class DefaultAudioSink implements AudioSink {
private final PendingExceptionHolder<WriteException> writeExceptionPendingExceptionHolder; private final PendingExceptionHolder<WriteException> writeExceptionPendingExceptionHolder;
private final AudioTrackBufferSizeProvider audioTrackBufferSizeProvider; private final AudioTrackBufferSizeProvider audioTrackBufferSizeProvider;
@Nullable private final AudioOffloadListener audioOffloadListener; @Nullable private final AudioOffloadListener audioOffloadListener;
@Nullable private final AudioCapabilitiesReceiver audioCapabilitiesReceiver;
@Nullable private PlayerId playerId; @Nullable private PlayerId playerId;
@Nullable private Listener listener; @Nullable private Listener listener;
...@@ -550,14 +532,7 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -550,14 +532,7 @@ public final class DefaultAudioSink implements AudioSink {
@RequiresNonNull("#1.audioProcessorChain") @RequiresNonNull("#1.audioProcessorChain")
private DefaultAudioSink(Builder builder) { private DefaultAudioSink(Builder builder) {
audioCapabilitiesReceiver = audioCapabilities = builder.audioCapabilities;
builder.context != null
? new AudioCapabilitiesReceiver(builder.context, this::onAudioCapabilitiesChanged)
: null;
audioCapabilities =
audioCapabilitiesReceiver != null
? audioCapabilitiesReceiver.register()
: builder.audioCapabilities;
audioProcessorChain = builder.audioProcessorChain; audioProcessorChain = builder.audioProcessorChain;
enableFloatOutput = Util.SDK_INT >= 21 && builder.enableFloatOutput; enableFloatOutput = Util.SDK_INT >= 21 && builder.enableFloatOutput;
preferAudioTrackPlaybackParams = Util.SDK_INT >= 23 && builder.enableAudioTrackPlaybackParams; preferAudioTrackPlaybackParams = Util.SDK_INT >= 23 && builder.enableAudioTrackPlaybackParams;
...@@ -1456,21 +1431,6 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -1456,21 +1431,6 @@ public final class DefaultAudioSink implements AudioSink {
offloadDisabledUntilNextConfiguration = false; offloadDisabledUntilNextConfiguration = false;
} }
@Override
public void release() {
if (audioCapabilitiesReceiver != null) {
audioCapabilitiesReceiver.unregister();
}
}
// AudioCapabilitiesReceiver.Listener implementation.
public void onAudioCapabilitiesChanged(AudioCapabilities audioCapabilities) {
if (!audioCapabilities.equals(this.audioCapabilities)) {
this.audioCapabilities = audioCapabilities;
}
}
// Internal methods. // Internal methods.
private void resetSinkStateForFlush() { private void resetSinkStateForFlush() {
......
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