add get/setPlaybackSpeed and listener callback
This change deprecates the PlaybackParameters and remove the skipSilenceField from the PlaybackParameters. This implies that enabling and disabling skipping silences needs to be done on the Player.AudioComponent after this change. After submission of the change, all Player API changes are done which are required to bring playbackSpeed and skipSilenceEnabled in the converged Player API state. PiperOrigin-RevId: 300420843
This commit is contained in:
parent
7b82a3c889
commit
683cb0260e
@ -406,16 +406,32 @@ public final class CastPlayer extends BasePlayer {
|
|||||||
flushNotifications();
|
flushNotifications();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use {@link #setPlaybackSpeed(float)} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
||||||
// Unsupported by the RemoteMediaClient API. Do nothing.
|
// Unsupported by the RemoteMediaClient API. Do nothing.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use {@link #getPlaybackSpeed()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters getPlaybackParameters() {
|
public PlaybackParameters getPlaybackParameters() {
|
||||||
return PlaybackParameters.DEFAULT;
|
return PlaybackParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPlaybackSpeed(float playbackSpeed) {
|
||||||
|
// Unsupported by the RemoteMediaClient API. Do nothing.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getPlaybackSpeed() {
|
||||||
|
return Player.DEFAULT_PLAYBACK_SPEED;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop(boolean reset) {
|
public void stop(boolean reset) {
|
||||||
playbackState = STATE_IDLE;
|
playbackState = STATE_IDLE;
|
||||||
|
@ -78,8 +78,8 @@ import java.util.concurrent.TimeoutException;
|
|||||||
@DiscontinuityReason private int pendingDiscontinuityReason;
|
@DiscontinuityReason private int pendingDiscontinuityReason;
|
||||||
@PlayWhenReadyChangeReason private int pendingPlayWhenReadyChangeReason;
|
@PlayWhenReadyChangeReason private int pendingPlayWhenReadyChangeReason;
|
||||||
private boolean foregroundMode;
|
private boolean foregroundMode;
|
||||||
private int pendingSetPlaybackParametersAcks;
|
private int pendingSetPlaybackSpeedAcks;
|
||||||
private PlaybackParameters playbackParameters;
|
private float playbackSpeed;
|
||||||
private SeekParameters seekParameters;
|
private SeekParameters seekParameters;
|
||||||
private ShuffleOrder shuffleOrder;
|
private ShuffleOrder shuffleOrder;
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ import java.util.concurrent.TimeoutException;
|
|||||||
new TrackSelection[renderers.length],
|
new TrackSelection[renderers.length],
|
||||||
null);
|
null);
|
||||||
period = new Timeline.Period();
|
period = new Timeline.Period();
|
||||||
playbackParameters = PlaybackParameters.DEFAULT;
|
playbackSpeed = Player.DEFAULT_PLAYBACK_SPEED;
|
||||||
seekParameters = SeekParameters.DEFAULT;
|
seekParameters = SeekParameters.DEFAULT;
|
||||||
maskingWindowIndex = C.INDEX_UNSET;
|
maskingWindowIndex = C.INDEX_UNSET;
|
||||||
eventHandler =
|
eventHandler =
|
||||||
@ -535,24 +535,44 @@ import java.util.concurrent.TimeoutException;
|
|||||||
notifyListeners(listener -> listener.onPositionDiscontinuity(DISCONTINUITY_REASON_SEEK));
|
notifyListeners(listener -> listener.onPositionDiscontinuity(DISCONTINUITY_REASON_SEEK));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use {@link #setPlaybackSpeed(float)} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
||||||
if (playbackParameters == null) {
|
setPlaybackSpeed(
|
||||||
playbackParameters = PlaybackParameters.DEFAULT;
|
playbackParameters != null ? playbackParameters.speed : Player.DEFAULT_PLAYBACK_SPEED);
|
||||||
}
|
}
|
||||||
if (this.playbackParameters.equals(playbackParameters)) {
|
|
||||||
|
/** @deprecated Use {@link #getPlaybackSpeed()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public PlaybackParameters getPlaybackParameters() {
|
||||||
|
return new PlaybackParameters(playbackSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public void setPlaybackSpeed(float playbackSpeed) {
|
||||||
|
Assertions.checkState(playbackSpeed > 0);
|
||||||
|
if (this.playbackSpeed == playbackSpeed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pendingSetPlaybackParametersAcks++;
|
pendingSetPlaybackSpeedAcks++;
|
||||||
this.playbackParameters = playbackParameters;
|
this.playbackSpeed = playbackSpeed;
|
||||||
|
PlaybackParameters playbackParameters = new PlaybackParameters(playbackSpeed);
|
||||||
internalPlayer.setPlaybackParameters(playbackParameters);
|
internalPlayer.setPlaybackParameters(playbackParameters);
|
||||||
PlaybackParameters playbackParametersToNotify = playbackParameters;
|
notifyListeners(
|
||||||
notifyListeners(listener -> listener.onPlaybackParametersChanged(playbackParametersToNotify));
|
listener -> {
|
||||||
|
listener.onPlaybackParametersChanged(playbackParameters);
|
||||||
|
listener.onPlaybackSpeedChanged(playbackSpeed);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters getPlaybackParameters() {
|
public float getPlaybackSpeed() {
|
||||||
return playbackParameters;
|
return playbackSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -764,8 +784,8 @@ import java.util.concurrent.TimeoutException;
|
|||||||
case ExoPlayerImplInternal.MSG_PLAYBACK_INFO_CHANGED:
|
case ExoPlayerImplInternal.MSG_PLAYBACK_INFO_CHANGED:
|
||||||
handlePlaybackInfo((ExoPlayerImplInternal.PlaybackInfoUpdate) msg.obj);
|
handlePlaybackInfo((ExoPlayerImplInternal.PlaybackInfoUpdate) msg.obj);
|
||||||
break;
|
break;
|
||||||
case ExoPlayerImplInternal.MSG_PLAYBACK_PARAMETERS_CHANGED:
|
case ExoPlayerImplInternal.MSG_PLAYBACK_SPEED_CHANGED:
|
||||||
handlePlaybackParameters((PlaybackParameters) msg.obj, /* operationAck= */ msg.arg1 != 0);
|
handlePlaybackSpeed((Float) msg.obj, /* operationAck= */ msg.arg1 != 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
@ -781,15 +801,19 @@ import java.util.concurrent.TimeoutException;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handlePlaybackParameters(
|
@SuppressWarnings("deprecation")
|
||||||
PlaybackParameters playbackParameters, boolean operationAck) {
|
private void handlePlaybackSpeed(float playbackSpeed, boolean operationAck) {
|
||||||
if (operationAck) {
|
if (operationAck) {
|
||||||
pendingSetPlaybackParametersAcks--;
|
pendingSetPlaybackSpeedAcks--;
|
||||||
}
|
}
|
||||||
if (pendingSetPlaybackParametersAcks == 0) {
|
if (pendingSetPlaybackSpeedAcks == 0) {
|
||||||
if (!this.playbackParameters.equals(playbackParameters)) {
|
if (this.playbackSpeed != playbackSpeed) {
|
||||||
this.playbackParameters = playbackParameters;
|
this.playbackSpeed = playbackSpeed;
|
||||||
notifyListeners(listener -> listener.onPlaybackParametersChanged(playbackParameters));
|
notifyListeners(
|
||||||
|
listener -> {
|
||||||
|
listener.onPlaybackParametersChanged(new PlaybackParameters(playbackSpeed));
|
||||||
|
listener.onPlaybackSpeedChanged(playbackSpeed);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
|
|
||||||
// External messages
|
// External messages
|
||||||
public static final int MSG_PLAYBACK_INFO_CHANGED = 0;
|
public static final int MSG_PLAYBACK_INFO_CHANGED = 0;
|
||||||
public static final int MSG_PLAYBACK_PARAMETERS_CHANGED = 1;
|
public static final int MSG_PLAYBACK_SPEED_CHANGED = 1;
|
||||||
|
|
||||||
// Internal messages
|
// Internal messages
|
||||||
private static final int MSG_PREPARE = 0;
|
private static final int MSG_PREPARE = 0;
|
||||||
@ -1902,7 +1902,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
throws ExoPlaybackException {
|
throws ExoPlaybackException {
|
||||||
eventHandler
|
eventHandler
|
||||||
.obtainMessage(
|
.obtainMessage(
|
||||||
MSG_PLAYBACK_PARAMETERS_CHANGED, acknowledgeCommand ? 1 : 0, 0, playbackParameters)
|
MSG_PLAYBACK_SPEED_CHANGED, acknowledgeCommand ? 1 : 0, 0, playbackParameters.speed)
|
||||||
.sendToTarget();
|
.sendToTarget();
|
||||||
updateTrackSelectionPlaybackSpeed(playbackParameters.speed);
|
updateTrackSelectionPlaybackSpeed(playbackParameters.speed);
|
||||||
for (Renderer renderer : renderers) {
|
for (Renderer renderer : renderers) {
|
||||||
|
@ -19,8 +19,11 @@ import androidx.annotation.Nullable;
|
|||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The parameters that apply to playback.
|
* @deprecated Use {@link Player#setPlaybackSpeed(float)} and {@link
|
||||||
|
* Player.AudioComponent#setSkipSilenceEnabled(boolean)} instead.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
public final class PlaybackParameters {
|
public final class PlaybackParameters {
|
||||||
|
|
||||||
/** The default playback parameters: real-time playback with no silence skipping. */
|
/** The default playback parameters: real-time playback with no silence skipping. */
|
||||||
@ -29,9 +32,6 @@ public final class PlaybackParameters {
|
|||||||
/** The factor by which playback will be sped up. */
|
/** The factor by which playback will be sped up. */
|
||||||
public final float speed;
|
public final float speed;
|
||||||
|
|
||||||
/** Whether to skip silence in the input. */
|
|
||||||
public final boolean skipSilence;
|
|
||||||
|
|
||||||
private final int scaledUsPerMs;
|
private final int scaledUsPerMs;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,20 +40,8 @@ public final class PlaybackParameters {
|
|||||||
* @param speed The factor by which playback will be sped up. Must be greater than zero.
|
* @param speed The factor by which playback will be sped up. Must be greater than zero.
|
||||||
*/
|
*/
|
||||||
public PlaybackParameters(float speed) {
|
public PlaybackParameters(float speed) {
|
||||||
this(speed, /* skipSilence= */ false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates new playback parameters that set the playback speed and whether to skip silence in the
|
|
||||||
* audio stream.
|
|
||||||
*
|
|
||||||
* @param speed The factor by which playback will be sped up. Must be greater than zero.
|
|
||||||
* @param skipSilence Whether to skip silences in the audio stream.
|
|
||||||
*/
|
|
||||||
public PlaybackParameters(float speed, boolean skipSilence) {
|
|
||||||
Assertions.checkArgument(speed > 0);
|
Assertions.checkArgument(speed > 0);
|
||||||
this.speed = speed;
|
this.speed = speed;
|
||||||
this.skipSilence = skipSilence;
|
|
||||||
scaledUsPerMs = Math.round(speed * 1000f);
|
scaledUsPerMs = Math.round(speed * 1000f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,16 +65,11 @@ public final class PlaybackParameters {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PlaybackParameters other = (PlaybackParameters) obj;
|
PlaybackParameters other = (PlaybackParameters) obj;
|
||||||
return this.speed == other.speed
|
return this.speed == other.speed;
|
||||||
&& this.skipSilence == other.skipSilence;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int result = 17;
|
return Float.floatToRawIntBits(speed);
|
||||||
result = 31 * result + Float.floatToRawIntBits(speed);
|
|
||||||
result = 31 * result + (skipSilence ? 1 : 0);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -515,15 +515,21 @@ public interface Player {
|
|||||||
default void onPositionDiscontinuity(@DiscontinuityReason int reason) {}
|
default void onPositionDiscontinuity(@DiscontinuityReason int reason) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the current playback parameters change. The playback parameters may change due to
|
* @deprecated Use {@link #onPlaybackSpeedChanged(float)} and {@link
|
||||||
* a call to {@link #setPlaybackParameters(PlaybackParameters)}, or the player itself may change
|
* AudioListener#onSkipSilenceEnabledChanged(boolean)} instead.
|
||||||
* them (for example, if audio playback switches to passthrough mode, where speed adjustment is
|
|
||||||
* no longer possible).
|
|
||||||
*
|
|
||||||
* @param playbackParameters The playback parameters.
|
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
default void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {}
|
default void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the current playback speed changes. The normal playback speed is 1. The speed may
|
||||||
|
* change due to a call to {@link #setPlaybackSpeed(float)}, or the player itself may change it
|
||||||
|
* (for example, if audio playback switches to passthrough mode, where speed adjustment is no
|
||||||
|
* longer possible).
|
||||||
|
*/
|
||||||
|
default void onPlaybackSpeedChanged(float playbackSpeed) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when all pending seek requests have been processed by the player. This is guaranteed
|
* Called when all pending seek requests have been processed by the player. This is guaranteed
|
||||||
* to happen after any necessary changes to the player state were reported to {@link
|
* to happen after any necessary changes to the player state were reported to {@link
|
||||||
@ -701,6 +707,9 @@ public interface Player {
|
|||||||
/** Timeline changed as a result of a dynamic update introduced by the played media. */
|
/** Timeline changed as a result of a dynamic update introduced by the played media. */
|
||||||
int TIMELINE_CHANGE_REASON_SOURCE_UPDATE = 1;
|
int TIMELINE_CHANGE_REASON_SOURCE_UPDATE = 1;
|
||||||
|
|
||||||
|
/** The default playback speed. */
|
||||||
|
float DEFAULT_PLAYBACK_SPEED = 1.0f;
|
||||||
|
|
||||||
/** Returns the component of this player for audio output, or null if audio is not supported. */
|
/** Returns the component of this player for audio output, or null if audio is not supported. */
|
||||||
@Nullable
|
@Nullable
|
||||||
AudioComponent getAudioComponent();
|
AudioComponent getAudioComponent();
|
||||||
@ -913,24 +922,39 @@ public interface Player {
|
|||||||
void next();
|
void next();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to set the playback parameters. Passing {@code null} sets the parameters to the
|
* @deprecated Use {@link #setPlaybackSpeed(float)} or {@link
|
||||||
* default, {@link PlaybackParameters#DEFAULT}, which means there is no speed or pitch adjustment.
|
* AudioComponent#setSkipSilenceEnabled(boolean)} instead.
|
||||||
*
|
|
||||||
* <p>Playback parameters changes may cause the player to buffer. {@link
|
|
||||||
* EventListener#onPlaybackParametersChanged(PlaybackParameters)} will be called whenever the
|
|
||||||
* currently active playback parameters change.
|
|
||||||
*
|
|
||||||
* @param playbackParameters The playback parameters, or {@code null} to use the defaults.
|
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters);
|
void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the currently active playback parameters.
|
* @deprecated Use {@link #getPlaybackSpeed()} or {@link AudioComponent#getSkipSilenceEnabled()}
|
||||||
*
|
* instead.
|
||||||
* @see EventListener#onPlaybackParametersChanged(PlaybackParameters)
|
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
PlaybackParameters getPlaybackParameters();
|
PlaybackParameters getPlaybackParameters();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to set the playback speed.
|
||||||
|
*
|
||||||
|
* <p>Playback speed changes may cause the player to buffer. {@link
|
||||||
|
* EventListener#onPlaybackSpeedChanged(float)} will be called whenever the currently active
|
||||||
|
* playback speed change.
|
||||||
|
*
|
||||||
|
* @param playbackSpeed The playback speed.
|
||||||
|
*/
|
||||||
|
void setPlaybackSpeed(float playbackSpeed);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the currently active playback speed.
|
||||||
|
*
|
||||||
|
* @see EventListener#onPlaybackSpeedChanged(float)
|
||||||
|
*/
|
||||||
|
float getPlaybackSpeed();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stops playback without resetting the player. Use {@link #pause()} rather than this method if
|
* Stops playback without resetting the player. Use {@link #pause()} rather than this method if
|
||||||
* the intention is to pause playback.
|
* the intention is to pause playback.
|
||||||
|
@ -853,23 +853,19 @@ public class SimpleExoPlayer extends BasePlayer
|
|||||||
this.priorityTaskManager = priorityTaskManager;
|
this.priorityTaskManager = priorityTaskManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** @deprecated Use {@link #setPlaybackSpeed(float)} instead. */
|
||||||
* Sets the {@link PlaybackParams} governing audio playback.
|
@SuppressWarnings("deprecation")
|
||||||
*
|
|
||||||
* @deprecated Use {@link #setPlaybackParameters(PlaybackParameters)}.
|
|
||||||
* @param params The {@link PlaybackParams}, or null to clear any previously set parameters.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@RequiresApi(23)
|
@RequiresApi(23)
|
||||||
public void setPlaybackParams(@Nullable PlaybackParams params) {
|
public void setPlaybackParams(@Nullable PlaybackParams params) {
|
||||||
PlaybackParameters playbackParameters;
|
float playbackSpeed;
|
||||||
if (params != null) {
|
if (params != null) {
|
||||||
params.allowDefaults();
|
params.allowDefaults();
|
||||||
playbackParameters = new PlaybackParameters(params.getSpeed());
|
playbackSpeed = params.getSpeed();
|
||||||
} else {
|
} else {
|
||||||
playbackParameters = null;
|
playbackSpeed = 1.0f;
|
||||||
}
|
}
|
||||||
setPlaybackParameters(playbackParameters);
|
setPlaybackSpeed(playbackSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the video format currently being played, or null if no video is being played. */
|
/** Returns the video format currently being played, or null if no video is being played. */
|
||||||
@ -1390,26 +1386,39 @@ public class SimpleExoPlayer extends BasePlayer
|
|||||||
player.seekTo(windowIndex, positionMs);
|
player.seekTo(windowIndex, positionMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #setPlaybackSpeed(float)} and {@link #setSkipSilenceEnabled(boolean)}
|
||||||
|
* instead.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
||||||
verifyApplicationThread();
|
verifyApplicationThread();
|
||||||
boolean newSkipSilenceEnabled =
|
|
||||||
playbackParameters != null
|
|
||||||
? playbackParameters.skipSilence
|
|
||||||
: PlaybackParameters.DEFAULT.skipSilence;
|
|
||||||
if (skipSilenceEnabled != newSkipSilenceEnabled) {
|
|
||||||
skipSilenceEnabled = newSkipSilenceEnabled;
|
|
||||||
notifySkipSilenceEnabledChanged();
|
|
||||||
}
|
|
||||||
player.setPlaybackParameters(playbackParameters);
|
player.setPlaybackParameters(playbackParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters getPlaybackParameters() {
|
public PlaybackParameters getPlaybackParameters() {
|
||||||
verifyApplicationThread();
|
verifyApplicationThread();
|
||||||
return player.getPlaybackParameters();
|
return player.getPlaybackParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPlaybackSpeed(float playbackSpeed) {
|
||||||
|
verifyApplicationThread();
|
||||||
|
player.setPlaybackSpeed(playbackSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getPlaybackSpeed() {
|
||||||
|
verifyApplicationThread();
|
||||||
|
return player.getPlaybackSpeed();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSeekParameters(@Nullable SeekParameters seekParameters) {
|
public void setSeekParameters(@Nullable SeekParameters seekParameters) {
|
||||||
verifyApplicationThread();
|
verifyApplicationThread();
|
||||||
|
@ -531,6 +531,12 @@ public class AnalyticsCollector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #onPlaybackSpeedChanged(float)} and {@link
|
||||||
|
* #onSkipSilenceEnabledChanged(boolean)} instead.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public final void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
|
public final void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
|
||||||
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
|
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
|
||||||
@ -539,6 +545,14 @@ public class AnalyticsCollector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPlaybackSpeedChanged(float playbackSpeed) {
|
||||||
|
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
|
||||||
|
for (AnalyticsListener listener : listeners) {
|
||||||
|
listener.onPlaybackSpeedChanged(eventTime, playbackSpeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void onSeekProcessed() {
|
public final void onSeekProcessed() {
|
||||||
if (isSeeking) {
|
if (isSeeking) {
|
||||||
|
@ -197,14 +197,22 @@ public interface AnalyticsListener {
|
|||||||
default void onSeekProcessed(EventTime eventTime) {}
|
default void onSeekProcessed(EventTime eventTime) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the playback parameters changed.
|
* @deprecated Use {@link #onPlaybackSpeedChanged(EventTime, float)} and {@link
|
||||||
*
|
* #onSkipSilenceEnabledChanged(EventTime, boolean)} instead.
|
||||||
* @param eventTime The event time.
|
|
||||||
* @param playbackParameters The new playback parameters.
|
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
default void onPlaybackParametersChanged(
|
default void onPlaybackParametersChanged(
|
||||||
EventTime eventTime, PlaybackParameters playbackParameters) {}
|
EventTime eventTime, PlaybackParameters playbackParameters) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the playback speed changes.
|
||||||
|
*
|
||||||
|
* @param eventTime The event time.
|
||||||
|
* @param playbackSpeed The playback speed.
|
||||||
|
*/
|
||||||
|
default void onPlaybackSpeedChanged(EventTime eventTime, float playbackSpeed) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the repeat mode changed.
|
* Called when the repeat mode changed.
|
||||||
*
|
*
|
||||||
|
@ -276,6 +276,7 @@ public interface AudioSink {
|
|||||||
void setPlaybackParameters(PlaybackParameters playbackParameters);
|
void setPlaybackParameters(PlaybackParameters playbackParameters);
|
||||||
|
|
||||||
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Deprecated
|
@Deprecated
|
||||||
PlaybackParameters getPlaybackParameters();
|
PlaybackParameters getPlaybackParameters();
|
||||||
|
|
||||||
|
@ -158,12 +158,11 @@ public final class DefaultAudioSink implements AudioSink {
|
|||||||
* @deprecated Use {@link #applyPlaybackSpeed(float)} and {@link
|
* @deprecated Use {@link #applyPlaybackSpeed(float)} and {@link
|
||||||
* #applySkipSilenceEnabled(boolean)} instead.
|
* #applySkipSilenceEnabled(boolean)} instead.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters applyPlaybackParameters(PlaybackParameters playbackParameters) {
|
public PlaybackParameters applyPlaybackParameters(PlaybackParameters playbackParameters) {
|
||||||
return new PlaybackParameters(
|
return new PlaybackParameters(applyPlaybackSpeed(playbackParameters.speed));
|
||||||
applyPlaybackSpeed(playbackParameters.speed),
|
|
||||||
applySkipSilenceEnabled(playbackParameters.skipSilence));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -866,19 +865,20 @@ public final class DefaultAudioSink implements AudioSink {
|
|||||||
* @deprecated Use {@link #setPlaybackSpeed(float)} and {@link #setSkipSilenceEnabled(boolean)}
|
* @deprecated Use {@link #setPlaybackSpeed(float)} and {@link #setSkipSilenceEnabled(boolean)}
|
||||||
* instead.
|
* instead.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void setPlaybackParameters(PlaybackParameters playbackParameters) {
|
public void setPlaybackParameters(PlaybackParameters playbackParameters) {
|
||||||
setPlaybackSpeedAndSkipSilence(playbackParameters.speed, playbackParameters.skipSilence);
|
setPlaybackSpeedAndSkipSilence(playbackParameters.speed, getSkipSilenceEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters getPlaybackParameters() {
|
public PlaybackParameters getPlaybackParameters() {
|
||||||
MediaPositionParameters mediaPositionParameters = getMediaPositionParameters();
|
MediaPositionParameters mediaPositionParameters = getMediaPositionParameters();
|
||||||
return new PlaybackParameters(
|
return new PlaybackParameters(mediaPositionParameters.playbackSpeed);
|
||||||
mediaPositionParameters.playbackSpeed, mediaPositionParameters.skipSilence);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -99,18 +99,19 @@ public class ForwardingAudioSink implements AudioSink {
|
|||||||
* @deprecated Use {@link #setPlaybackSpeed(float)} and {@link #setSkipSilenceEnabled(boolean)}
|
* @deprecated Use {@link #setPlaybackSpeed(float)} and {@link #setSkipSilenceEnabled(boolean)}
|
||||||
* instead.
|
* instead.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void setPlaybackParameters(PlaybackParameters playbackParameters) {
|
public void setPlaybackParameters(PlaybackParameters playbackParameters) {
|
||||||
sink.setPlaybackSpeed(playbackParameters.speed);
|
sink.setPlaybackParameters(playbackParameters);
|
||||||
sink.setSkipSilenceEnabled(playbackParameters.skipSilence);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
/** @deprecated Use {@link #getPlaybackSpeed()} and {@link #getSkipSilenceEnabled()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters getPlaybackParameters() {
|
public PlaybackParameters getPlaybackParameters() {
|
||||||
return new PlaybackParameters(sink.getPlaybackSpeed(), sink.getSkipSilenceEnabled());
|
return sink.getPlaybackParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -149,9 +149,12 @@ public class EventLogger implements AnalyticsListener {
|
|||||||
logd(
|
logd(
|
||||||
eventTime,
|
eventTime,
|
||||||
"playbackParameters",
|
"playbackParameters",
|
||||||
Util.formatInvariant(
|
Util.formatInvariant("speed=%.2f", playbackParameters.speed));
|
||||||
"speed=%.2f, skipSilence=%s",
|
}
|
||||||
playbackParameters.speed, playbackParameters.skipSilence));
|
|
||||||
|
@Override
|
||||||
|
public void onPlaybackSpeedChanged(EventTime eventTime, float playbackSpeed) {
|
||||||
|
logd(eventTime, "playbackSpeed", Float.toString(playbackSpeed));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,7 +26,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||||
import com.google.android.exoplayer2.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
import com.google.android.exoplayer2.PlaybackParameters;
|
|
||||||
import com.google.android.exoplayer2.Player;
|
import com.google.android.exoplayer2.Player;
|
||||||
import com.google.android.exoplayer2.Renderer;
|
import com.google.android.exoplayer2.Renderer;
|
||||||
import com.google.android.exoplayer2.RenderersFactory;
|
import com.google.android.exoplayer2.RenderersFactory;
|
||||||
@ -76,7 +75,7 @@ public final class AnalyticsCollectorTest {
|
|||||||
private static final int EVENT_POSITION_DISCONTINUITY = 2;
|
private static final int EVENT_POSITION_DISCONTINUITY = 2;
|
||||||
private static final int EVENT_SEEK_STARTED = 3;
|
private static final int EVENT_SEEK_STARTED = 3;
|
||||||
private static final int EVENT_SEEK_PROCESSED = 4;
|
private static final int EVENT_SEEK_PROCESSED = 4;
|
||||||
private static final int EVENT_PLAYBACK_PARAMETERS_CHANGED = 5;
|
private static final int EVENT_PLAYBACK_SPEED_CHANGED = 5;
|
||||||
private static final int EVENT_REPEAT_MODE_CHANGED = 6;
|
private static final int EVENT_REPEAT_MODE_CHANGED = 6;
|
||||||
private static final int EVENT_SHUFFLE_MODE_CHANGED = 7;
|
private static final int EVENT_SHUFFLE_MODE_CHANGED = 7;
|
||||||
private static final int EVENT_LOADING_CHANGED = 8;
|
private static final int EVENT_LOADING_CHANGED = 8;
|
||||||
@ -1464,10 +1463,10 @@ public final class AnalyticsCollectorTest {
|
|||||||
reportedEvents.add(new ReportedEvent(EVENT_SEEK_PROCESSED, eventTime));
|
reportedEvents.add(new ReportedEvent(EVENT_SEEK_PROCESSED, eventTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public void onPlaybackParametersChanged(
|
public void onPlaybackSpeedChanged(EventTime eventTime, float playbackSpeed) {
|
||||||
EventTime eventTime, PlaybackParameters playbackParameters) {
|
reportedEvents.add(new ReportedEvent(EVENT_PLAYBACK_SPEED_CHANGED, eventTime));
|
||||||
reportedEvents.add(new ReportedEvent(EVENT_PLAYBACK_PARAMETERS_CHANGED, eventTime));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -622,9 +622,7 @@ public abstract class Action {
|
|||||||
super(
|
super(
|
||||||
tag,
|
tag,
|
||||||
"SetPlaybackParameters:"
|
"SetPlaybackParameters:"
|
||||||
+ (playbackParameters == null
|
+ (playbackParameters == null ? "null" : playbackParameters.speed));
|
||||||
? "null"
|
|
||||||
: playbackParameters.speed + ":" + playbackParameters.skipSilence));
|
|
||||||
this.playbackParameters = playbackParameters;
|
this.playbackParameters = playbackParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,16 +256,32 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer {
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use {@link #setPlaybackSpeed(float)} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated Use {@link #getPlaybackSpeed()} instead. */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public PlaybackParameters getPlaybackParameters() {
|
public PlaybackParameters getPlaybackParameters() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPlaybackSpeed(float playbackSpeed) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getPlaybackSpeed() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSeekParameters(@Nullable SeekParameters seekParameters) {
|
public void setSeekParameters(@Nullable SeekParameters seekParameters) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user