From d3cc98d36868a16c29b55aede35c5e4d74f4d757 Mon Sep 17 00:00:00 2001 From: samrobinson Date: Tue, 24 Aug 2021 15:04:17 +0100 Subject: [PATCH] Deprecate ExoPlayer AudioComponent. PiperOrigin-RevId: 392655598 --- .../google/android/exoplayer2/ExoPlayer.java | 137 +++++++++++------- .../exoplayer2/testutil/StubExoPlayer.java | 39 +++++ 2 files changed, 121 insertions(+), 55 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java index 0e08742bcd..2c8684f2f2 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java @@ -140,78 +140,48 @@ import java.util.List; */ public interface ExoPlayer extends Player { - /** The audio component of an {@link ExoPlayer}. */ + /** @deprecated Use the methods in {@link ExoPlayer} instead. */ + @Deprecated interface AudioComponent { - /** - * Sets the attributes for audio playback, used by the underlying audio track. If not set, the - * default audio attributes will be used. They are suitable for general media playback. - * - *

Setting the audio attributes during playback may introduce a short gap in audio output as - * the audio track is recreated. A new audio session id will also be generated. - * - *

If tunneling is enabled by the track selector, the specified audio attributes will be - * ignored, but they will take effect if audio is later played without tunneling. - * - *

If the device is running a build before platform API version 21, audio attributes cannot - * be set directly on the underlying audio track. In this case, the usage will be mapped onto an - * equivalent stream type using {@link Util#getStreamTypeForAudioUsage(int)}. - * - *

If audio focus should be handled, the {@link AudioAttributes#usage} must be {@link - * C#USAGE_MEDIA} or {@link C#USAGE_GAME}. Other usages will throw an {@link - * IllegalArgumentException}. - * - * @param audioAttributes The attributes to use for audio playback. - * @param handleAudioFocus True if the player should handle audio focus, false otherwise. - */ + /** @deprecated Use {@link ExoPlayer#setAudioAttributes(AudioAttributes, boolean)} instead. */ + @Deprecated void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus); - /** Returns the attributes for audio playback. */ + /** @deprecated Use {@link Player#getAudioAttributes()} instead. */ + @Deprecated AudioAttributes getAudioAttributes(); - /** - * Sets the ID of the audio session to attach to the underlying {@link - * android.media.AudioTrack}. - * - *

The audio session ID can be generated using {@link C#generateAudioSessionIdV21(Context)} - * for API 21+. - * - * @param audioSessionId The audio session ID, or {@link C#AUDIO_SESSION_ID_UNSET} if it should - * be generated by the framework. - */ + /** @deprecated Use {@link ExoPlayer#setAudioSessionId(int)} instead. */ + @Deprecated void setAudioSessionId(int audioSessionId); - /** Returns the audio session identifier, or {@link C#AUDIO_SESSION_ID_UNSET} if not set. */ + /** @deprecated Use {@link ExoPlayer#getAudioSessionId()} instead. */ + @Deprecated int getAudioSessionId(); - /** Sets information on an auxiliary audio effect to attach to the underlying audio track. */ + /** @deprecated Use {@link ExoPlayer#setAuxEffectInfo(AuxEffectInfo)} instead. */ + @Deprecated void setAuxEffectInfo(AuxEffectInfo auxEffectInfo); - /** Detaches any previously attached auxiliary audio effect from the underlying audio track. */ + /** @deprecated Use {@link ExoPlayer#clearAuxEffectInfo()} instead. */ + @Deprecated void clearAuxEffectInfo(); - /** - * Sets the audio volume, with 0 being silence and 1 being unity gain (signal unchanged). - * - * @param audioVolume Linear output gain to apply to all audio channels. - */ + /** @deprecated Use {@link Player#setVolume(float)} instead. */ + @Deprecated void setVolume(float audioVolume); - /** - * Returns the audio volume, with 0 being silence and 1 being unity gain (signal unchanged). - * - * @return The linear gain applied to all audio channels. - */ + /** @deprecated Use {@link Player#getVolume()} instead. */ + @Deprecated float getVolume(); - /** - * Sets whether skipping silences in the audio stream is enabled. - * - * @param skipSilenceEnabled Whether skipping silences in the audio stream is enabled. - */ + /** @deprecated Use {@link ExoPlayer#setSkipSilenceEnabled(boolean)} instead. */ + @Deprecated void setSkipSilenceEnabled(boolean skipSilenceEnabled); - /** Returns whether skipping silences in the audio stream is enabled. */ + /** @deprecated Use {@link ExoPlayer#getSkipSilenceEnabled()} instead. */ + @Deprecated boolean getSkipSilenceEnabled(); } @@ -944,8 +914,12 @@ public interface ExoPlayer extends Player { @Override ExoPlaybackException getPlayerError(); - /** Returns the component of this player for audio output, or null if audio is not supported. */ + /** + * @deprecated Use {@link ExoPlayer}, as the {@link AudioComponent} methods are part of the + * interface. + */ @Nullable + @Deprecated AudioComponent getAudioComponent(); /** Returns the component of this player for video output, or null if video is not supported. */ @@ -953,8 +927,8 @@ public interface ExoPlayer extends Player { VideoComponent getVideoComponent(); /** - * @deprecated Use {@link Player} instead, as the {@link TextComponent} methods are a part of the - * {@link Player interface}. + * @deprecated Use {@link Player}, as the {@link TextComponent} methods are a part of the {@link + * Player interface}. */ @Nullable @Deprecated @@ -1112,6 +1086,59 @@ public interface ExoPlayer extends Player { */ void setShuffleOrder(ShuffleOrder shuffleOrder); + /** + * Sets the attributes for audio playback, used by the underlying audio track. If not set, the + * default audio attributes will be used. They are suitable for general media playback. + * + *

Setting the audio attributes during playback may introduce a short gap in audio output as + * the audio track is recreated. A new audio session id will also be generated. + * + *

If tunneling is enabled by the track selector, the specified audio attributes will be + * ignored, but they will take effect if audio is later played without tunneling. + * + *

If the device is running a build before platform API version 21, audio attributes cannot be + * set directly on the underlying audio track. In this case, the usage will be mapped onto an + * equivalent stream type using {@link Util#getStreamTypeForAudioUsage(int)}. + * + *

If audio focus should be handled, the {@link AudioAttributes#usage} must be {@link + * C#USAGE_MEDIA} or {@link C#USAGE_GAME}. Other usages will throw an {@link + * IllegalArgumentException}. + * + * @param audioAttributes The attributes to use for audio playback. + * @param handleAudioFocus True if the player should handle audio focus, false otherwise. + */ + void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus); + + /** + * Sets the ID of the audio session to attach to the underlying {@link android.media.AudioTrack}. + * + *

The audio session ID can be generated using {@link C#generateAudioSessionIdV21(Context)} for + * API 21+. + * + * @param audioSessionId The audio session ID, or {@link C#AUDIO_SESSION_ID_UNSET} if it should be + * generated by the framework. + */ + void setAudioSessionId(int audioSessionId); + + /** Returns the audio session identifier, or {@link C#AUDIO_SESSION_ID_UNSET} if not set. */ + int getAudioSessionId(); + + /** Sets information on an auxiliary audio effect to attach to the underlying audio track. */ + void setAuxEffectInfo(AuxEffectInfo auxEffectInfo); + + /** Detaches any previously attached auxiliary audio effect from the underlying audio track. */ + void clearAuxEffectInfo(); + + /** + * Sets whether skipping silences in the audio stream is enabled. + * + * @param skipSilenceEnabled Whether skipping silences in the audio stream is enabled. + */ + void setSkipSilenceEnabled(boolean skipSilenceEnabled); + + /** Returns whether skipping silences in the audio stream is enabled. */ + boolean getSkipSilenceEnabled(); + /** * Creates a message that can be sent to a {@link PlayerMessage.Target}. By default, the message * will be delivered immediately without blocking on the playback thread. The default {@link diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java index eab86983d5..3cca960e3a 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java @@ -33,6 +33,7 @@ import com.google.android.exoplayer2.PlayerMessage; import com.google.android.exoplayer2.SeekParameters; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.audio.AudioAttributes; +import com.google.android.exoplayer2.audio.AuxEffectInfo; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.ShuffleOrder; @@ -51,6 +52,7 @@ import java.util.List; public class StubExoPlayer extends BasePlayer implements ExoPlayer { @Override + @Deprecated public AudioComponent getAudioComponent() { throw new UnsupportedOperationException(); } @@ -61,11 +63,13 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { } @Override + @Deprecated public TextComponent getTextComponent() { throw new UnsupportedOperationException(); } @Override + @Deprecated public DeviceComponent getDeviceComponent() { throw new UnsupportedOperationException(); } @@ -274,6 +278,41 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } + @Override + public void setAudioAttributes(AudioAttributes audioAttributes, boolean handleAudioFocus) { + throw new UnsupportedOperationException(); + } + + @Override + public void setAudioSessionId(int audioSessionId) { + throw new UnsupportedOperationException(); + } + + @Override + public int getAudioSessionId() { + throw new UnsupportedOperationException(); + } + + @Override + public void setAuxEffectInfo(AuxEffectInfo auxEffectInfo) { + throw new UnsupportedOperationException(); + } + + @Override + public void clearAuxEffectInfo() { + throw new UnsupportedOperationException(); + } + + @Override + public void setSkipSilenceEnabled(boolean skipSilenceEnabled) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getSkipSilenceEnabled() { + throw new UnsupportedOperationException(); + } + @Override public void setShuffleModeEnabled(boolean shuffleModeEnabled) { throw new UnsupportedOperationException();