From c1258e7e9fe3e477f80f6508159615d750189bc0 Mon Sep 17 00:00:00 2001 From: bachinger Date: Sat, 29 Feb 2020 18:00:45 +0000 Subject: [PATCH] add getter/setter of skipSilenceEnable to AudioComponent PiperOrigin-RevId: 298070828 --- .../com/google/android/exoplayer2/Player.java | 10 +++++ .../google/android/exoplayer2/Renderer.java | 6 +++ .../android/exoplayer2/SimpleExoPlayer.java | 45 ++++++++++++++++--- .../audio/MediaCodecAudioRenderer.java | 3 ++ .../audio/SimpleDecoderAudioRenderer.java | 3 ++ 5 files changed, 60 insertions(+), 7 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Player.java b/library/core/src/main/java/com/google/android/exoplayer2/Player.java index 2710dd7442..7f322dbf5b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Player.java @@ -141,6 +141,16 @@ public interface Player { /** Returns the audio volume, with 0 being silence and 1 being unity gain. */ float getVolume(); + + /** + * 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(); } /** The video component of a {@link Player}. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java b/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java index a23cd58e80..eb686d15b4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java @@ -125,6 +125,12 @@ public interface Renderer extends PlayerMessage.Target { */ @SuppressWarnings("deprecation") int MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER = C.MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER; + /** + * The type of a message that can be passed to an audio renderer via {@link + * ExoPlayer#createMessage(Target)}. The message payload should be a {@link Boolean} instance + * telling whether to enable or disable skipping silences in the audio stream. + */ + int MSG_SET_SKIP_SILENCE_ENABLED = 101; /** * Applications or extensions may define custom {@code MSG_*} constants that can be passed to * renderers. These custom constants must be greater than or equal to this value. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index eb2682defb..60d351a414 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -715,6 +715,30 @@ public class SimpleExoPlayer extends BasePlayer return audioVolume; } + @Override + public boolean getSkipSilenceEnabled() { + return skipSilenceEnabled; + } + + @Override + public void setSkipSilenceEnabled(boolean skipSilenceEnabled) { + verifyApplicationThread(); + if (this.skipSilenceEnabled == skipSilenceEnabled) { + return; + } + this.skipSilenceEnabled = skipSilenceEnabled; + for (Renderer renderer : renderers) { + if (renderer.getTrackType() == C.TRACK_TYPE_AUDIO) { + player + .createMessage(renderer) + .setType(Renderer.MSG_SET_SKIP_SILENCE_ENABLED) + .setPayload(skipSilenceEnabled) + .send(); + } + } + notifySkipSilenceEnabledChanged(); + } + /** * Sets the stream type for audio playback, used by the underlying audio track. * @@ -1355,7 +1379,14 @@ public class SimpleExoPlayer extends BasePlayer @Override public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) { verifyApplicationThread(); - setSkipSilenceEnabled(playbackParameters != null && playbackParameters.skipSilence); + boolean newSkipSilenceEnabled = + playbackParameters != null + ? playbackParameters.skipSilence + : PlaybackParameters.DEFAULT.skipSilence; + if (skipSilenceEnabled != newSkipSilenceEnabled) { + skipSilenceEnabled = newSkipSilenceEnabled; + notifySkipSilenceEnabledChanged(); + } player.setPlaybackParameters(playbackParameters); } @@ -1708,11 +1739,7 @@ public class SimpleExoPlayer extends BasePlayer } @SuppressWarnings("SuspiciousMethodCalls") - private void setSkipSilenceEnabled(boolean skipSilenceEnabled) { - if (this.skipSilenceEnabled == skipSilenceEnabled) { - return; - } - this.skipSilenceEnabled = skipSilenceEnabled; + private void notifySkipSilenceEnabledChanged() { for (AudioListener listener : audioListeners) { // Prevent duplicate notification if a listener is both a AudioRendererEventListener and // a AudioListener, as they have the same method signature. @@ -1882,7 +1909,11 @@ public class SimpleExoPlayer extends BasePlayer @Override public void onSkipSilenceEnabledChanged(boolean skipSilenceEnabled) { - setSkipSilenceEnabled(skipSilenceEnabled); + if (SimpleExoPlayer.this.skipSilenceEnabled == skipSilenceEnabled) { + return; + } + SimpleExoPlayer.this.skipSilenceEnabled = skipSilenceEnabled; + notifySkipSilenceEnabledChanged(); } // TextOutput implementation diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java index 0448c60a5f..5ccaca1209 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java @@ -670,6 +670,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media AuxEffectInfo auxEffectInfo = (AuxEffectInfo) message; audioSink.setAuxEffectInfo(auxEffectInfo); break; + case MSG_SET_SKIP_SILENCE_ENABLED: + audioSink.setSkipSilenceEnabled((Boolean) message); + break; default: super.handleMessage(messageType, message); break; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java index ee812138fe..d35d62e321 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java @@ -560,6 +560,9 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements AuxEffectInfo auxEffectInfo = (AuxEffectInfo) message; audioSink.setAuxEffectInfo(auxEffectInfo); break; + case MSG_SET_SKIP_SILENCE_ENABLED: + audioSink.setSkipSilenceEnabled((Boolean) message); + break; default: super.handleMessage(messageType, message); break;