add getter/setter of skipSilenceEnable to AudioComponent

PiperOrigin-RevId: 298070828
This commit is contained in:
bachinger 2020-02-29 18:00:45 +00:00 committed by Oliver Woodman
parent 67b29bbe39
commit c1258e7e9f
5 changed files with 60 additions and 7 deletions

View File

@ -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}. */

View File

@ -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.

View File

@ -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

View File

@ -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;

View File

@ -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;