Commit 683cb026 by bachinger Committed by Oliver Woodman

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
parent 7b82a3c8
...@@ -406,17 +406,33 @@ public final class CastPlayer extends BasePlayer { ...@@ -406,17 +406,33 @@ 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 @Override
public void setPlaybackSpeed(float playbackSpeed) {
// Unsupported by the RemoteMediaClient API. Do nothing.
}
@Override
public float getPlaybackSpeed() {
return Player.DEFAULT_PLAYBACK_SPEED;
}
@Override
public void stop(boolean reset) { public void stop(boolean reset) {
playbackState = STATE_IDLE; playbackState = STATE_IDLE;
if (remoteMediaClient != null) { if (remoteMediaClient != null) {
......
...@@ -78,8 +78,8 @@ import java.util.concurrent.TimeoutException; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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; ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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,16 +515,22 @@ public interface Player { ...@@ -515,16 +515,22 @@ 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
* #onPlaybackStateChanged(int)}. * #onPlaybackStateChanged(int)}.
...@@ -701,6 +707,9 @@ public interface Player { ...@@ -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,23 +922,38 @@ public interface Player { ...@@ -913,23 +922,38 @@ 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.
*/
@SuppressWarnings("deprecation")
@Deprecated
void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters);
/**
* @deprecated Use {@link #getPlaybackSpeed()} or {@link AudioComponent#getSkipSilenceEnabled()}
* instead.
*/
@SuppressWarnings("deprecation")
@Deprecated
PlaybackParameters getPlaybackParameters();
/**
* Attempts to set the playback speed.
* *
* <p>Playback parameters changes may cause the player to buffer. {@link * <p>Playback speed changes may cause the player to buffer. {@link
* EventListener#onPlaybackParametersChanged(PlaybackParameters)} will be called whenever the * EventListener#onPlaybackSpeedChanged(float)} will be called whenever the currently active
* currently active playback parameters change. * playback speed change.
* *
* @param playbackParameters The playback parameters, or {@code null} to use the defaults. * @param playbackSpeed The playback speed.
*/ */
void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters); void setPlaybackSpeed(float playbackSpeed);
/** /**
* Returns the currently active playback parameters. * Returns the currently active playback speed.
* *
* @see EventListener#onPlaybackParametersChanged(PlaybackParameters) * @see EventListener#onPlaybackSpeedChanged(float)
*/ */
PlaybackParameters getPlaybackParameters(); 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
......
...@@ -853,23 +853,19 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -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,20 +1386,21 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1390,20 +1386,21 @@ 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();
...@@ -1411,6 +1408,18 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1411,6 +1408,18 @@ public class SimpleExoPlayer extends BasePlayer
} }
@Override @Override
public void setPlaybackSpeed(float playbackSpeed) {
verifyApplicationThread();
player.setPlaybackSpeed(playbackSpeed);
}
@Override
public float getPlaybackSpeed() {
verifyApplicationThread();
return player.getPlaybackSpeed();
}
@Override
public void setSeekParameters(@Nullable SeekParameters seekParameters) { public void setSeekParameters(@Nullable SeekParameters seekParameters) {
verifyApplicationThread(); verifyApplicationThread();
player.setSeekParameters(seekParameters); player.setSeekParameters(seekParameters);
......
...@@ -531,6 +531,12 @@ public class AnalyticsCollector ...@@ -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();
...@@ -540,6 +546,14 @@ public class AnalyticsCollector ...@@ -540,6 +546,14 @@ public class AnalyticsCollector
} }
@Override @Override
public void onPlaybackSpeedChanged(float playbackSpeed) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
for (AnalyticsListener listener : listeners) {
listener.onPlaybackSpeedChanged(eventTime, playbackSpeed);
}
}
@Override
public final void onSeekProcessed() { public final void onSeekProcessed() {
if (isSeeking) { if (isSeeking) {
isSeeking = false; isSeeking = false;
......
...@@ -197,15 +197,23 @@ public interface AnalyticsListener { ...@@ -197,15 +197,23 @@ 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.
* *
* @param eventTime The event time. * @param eventTime The event time.
......
...@@ -276,6 +276,7 @@ public interface AudioSink { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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; ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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,17 +256,33 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer { ...@@ -256,17 +256,33 @@ 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 @Override
public void setPlaybackSpeed(float playbackSpeed) {
throw new UnsupportedOperationException();
}
@Override
public float getPlaybackSpeed() {
throw new UnsupportedOperationException();
}
@Override
public void setSeekParameters(@Nullable SeekParameters seekParameters) { public void setSeekParameters(@Nullable SeekParameters seekParameters) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
......
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