Commit 30ed83ec by Oliver Woodman

Revert "Playlist API: Add setMediaItem() and prepare()"

This reverts commit cd2c1f2f.
parent c9cc147f
...@@ -394,8 +394,7 @@ public class PlayerActivity extends AppCompatActivity ...@@ -394,8 +394,7 @@ public class PlayerActivity extends AppCompatActivity
if (haveStartPosition) { if (haveStartPosition) {
player.seekTo(startWindow, startPosition); player.seekTo(startWindow, startPosition);
} }
player.setMediaItem(mediaSource); player.prepare(mediaSource, !haveStartPosition, false);
player.prepare();
updateButtonVisibility(); updateButtonVisibility();
} }
......
...@@ -331,50 +331,25 @@ public interface ExoPlayer extends Player { ...@@ -331,50 +331,25 @@ public interface ExoPlayer extends Player {
*/ */
void retry(); void retry();
/** Prepares the player. */
void prepare();
/** /**
* @deprecated Use {@code setMediaItem(mediaSource, C.TIME_UNSET)} and {@link #prepare()} instead. * Prepares the player to play the provided {@link MediaSource}. Equivalent to {@code
* prepare(mediaSource, true, true)}.
*/ */
@Deprecated
void prepare(MediaSource mediaSource); void prepare(MediaSource mediaSource);
/** @deprecated Use {@link #setMediaItem(MediaSource, long)} and {@link #prepare()} instead. */
@Deprecated
void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState);
/**
* Sets the specified {@link MediaSource}.
*
* <p>Note: This is an intermediate implementation towards a larger change. Until then {@link
* #prepare()} has to be called immediately after calling this method.
*
* @param mediaItem The new {@link MediaSource}.
*/
void setMediaItem(MediaSource mediaItem);
/** /**
* Sets the specified {@link MediaSource}. * Prepares the player to play the provided {@link MediaSource}, optionally resetting the playback
* * position the default position in the first {@link Timeline.Window}.
* <p>Note: This is an intermediate implementation towards a larger change. Until then {@link
* #prepare()} has to be called immediately after calling this method.
* *
* <p>This intermediate implementation calls {@code stop(true)} before seeking to avoid seeking in * @param mediaSource The {@link MediaSource} to play.
* a media item that has been set previously. It is equivalent with calling * @param resetPosition Whether the playback position should be reset to the default position in
* * the first {@link Timeline.Window}. If false, playback will start from the position defined
* <pre><code> * by {@link #getCurrentWindowIndex()} and {@link #getCurrentPosition()}.
* if (!getCurrentTimeline().isEmpty()) { * @param resetState Whether the timeline, manifest, tracks and track selections should be reset.
* player.stop(true); * Should be true unless the player is being prepared to play the same media as it was playing
* } * previously (e.g. if playback failed and is being retried).
* player.seekTo(0, startPositionMs);
* player.setMediaItem(mediaItem);
* </code></pre>
*
* @param mediaItem The new {@link MediaSource}.
* @param startPositionMs The position in milliseconds to start playback from.
*/ */
void setMediaItem(MediaSource mediaItem, long startPositionMs); void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState);
/** /**
* Creates a message that can be sent to a {@link PlayerMessage.Target}. By default, the message * Creates a message that can be sent to a {@link PlayerMessage.Target}. By default, the message
......
...@@ -62,7 +62,7 @@ import java.util.concurrent.CopyOnWriteArrayList; ...@@ -62,7 +62,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
private final Timeline.Period period; private final Timeline.Period period;
private final ArrayDeque<Runnable> pendingListenerNotifications; private final ArrayDeque<Runnable> pendingListenerNotifications;
@Nullable private MediaSource mediaSource; private MediaSource mediaSource;
private boolean playWhenReady; private boolean playWhenReady;
@PlaybackSuppressionReason private int playbackSuppressionReason; @PlaybackSuppressionReason private int playbackSuppressionReason;
@RepeatMode private int repeatMode; @RepeatMode private int repeatMode;
...@@ -219,38 +219,34 @@ import java.util.concurrent.CopyOnWriteArrayList; ...@@ -219,38 +219,34 @@ import java.util.concurrent.CopyOnWriteArrayList;
} }
@Override @Override
@Deprecated
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
setMediaItem(mediaSource); prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);
prepareInternal(/* resetPosition= */ true, /* resetState= */ true);
} }
@Override @Override
@Deprecated
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) { public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
setMediaItem(mediaSource); this.mediaSource = mediaSource;
prepareInternal(resetPosition, resetState); PlaybackInfo playbackInfo =
} getResetPlaybackInfo(
resetPosition,
@Override resetState,
public void prepare() { /* resetError= */ true,
Assertions.checkNotNull(mediaSource); /* playbackState= */ Player.STATE_BUFFERING);
prepareInternal(/* resetPosition= */ false, /* resetState= */ true); // Trigger internal prepare first before updating the playback info and notifying external
} // listeners to ensure that new operations issued in the listener notifications reach the
// player after this prepare. The internal player can't change the playback info immediately
@Override // because it uses a callback.
public void setMediaItem(MediaSource mediaItem, long startPositionMs) { hasPendingPrepare = true;
if (!getCurrentTimeline().isEmpty()) { pendingOperationAcks++;
stop(/* reset= */ true); internalPlayer.prepare(mediaSource, resetPosition, resetState);
} updatePlaybackInfo(
seekTo(/* windowIndex= */ 0, startPositionMs); playbackInfo,
setMediaItem(mediaItem); /* positionDiscontinuity= */ false,
/* ignored */ DISCONTINUITY_REASON_INTERNAL,
TIMELINE_CHANGE_REASON_RESET,
/* seekProcessed= */ false);
} }
@Override
public void setMediaItem(MediaSource mediaItem) {
mediaSource = mediaItem;
}
@Override @Override
public void setPlayWhenReady(boolean playWhenReady) { public void setPlayWhenReady(boolean playWhenReady) {
...@@ -610,29 +606,6 @@ import java.util.concurrent.CopyOnWriteArrayList; ...@@ -610,29 +606,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
} }
} }
/* package */ void prepareInternal(boolean resetPosition, boolean resetState) {
Assertions.checkNotNull(mediaSource);
PlaybackInfo playbackInfo =
getResetPlaybackInfo(
resetPosition,
resetState,
/* resetError= */ true,
/* playbackState= */ Player.STATE_BUFFERING);
// Trigger internal prepare first before updating the playback info and notifying external
// listeners to ensure that new operations issued in the listener notifications reach the
// player after this prepare. The internal player can't change the playback info immediately
// because it uses a callback.
hasPendingPrepare = true;
pendingOperationAcks++;
internalPlayer.prepare(mediaSource, resetPosition, resetState);
updatePlaybackInfo(
playbackInfo,
/* positionDiscontinuity= */ false,
/* ignored */ DISCONTINUITY_REASON_INTERNAL,
TIMELINE_CHANGE_REASON_RESET,
/* seekProcessed= */ false);
}
private void handlePlaybackParameters( private void handlePlaybackParameters(
PlaybackParameters playbackParameters, boolean operationAck) { PlaybackParameters playbackParameters, boolean operationAck) {
if (operationAck) { if (operationAck) {
......
...@@ -1162,7 +1162,6 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1162,7 +1162,6 @@ public class SimpleExoPlayer extends BasePlayer
} }
@Override @Override
@SuppressWarnings("deprecation")
public void retry() { public void retry() {
verifyApplicationThread(); verifyApplicationThread();
if (mediaSource != null if (mediaSource != null
...@@ -1172,38 +1171,23 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1172,38 +1171,23 @@ public class SimpleExoPlayer extends BasePlayer
} }
@Override @Override
@Deprecated
@SuppressWarnings("deprecation")
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true); prepare(mediaSource, /* resetPosition= */ true, /* resetState= */ true);
} }
@Override @Override
@Deprecated
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) { public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
verifyApplicationThread(); verifyApplicationThread();
setMediaItem(mediaSource); if (this.mediaSource != null) {
prepareInternal(resetPosition, resetState); this.mediaSource.removeEventListener(analyticsCollector);
} analyticsCollector.resetForNewMediaSource();
}
@Override this.mediaSource = mediaSource;
public void prepare() { mediaSource.addEventListener(eventHandler, analyticsCollector);
verifyApplicationThread(); @AudioFocusManager.PlayerCommand
prepareInternal(/* resetPosition= */ false, /* resetState= */ true); int playerCommand = audioFocusManager.handlePrepare(getPlayWhenReady());
} updatePlayWhenReady(getPlayWhenReady(), playerCommand);
player.prepare(mediaSource, resetPosition, resetState);
@Override
public void setMediaItem(MediaSource mediaItem, long startPositionMs) {
verifyApplicationThread();
setMediaItemInternal(mediaItem);
player.setMediaItem(mediaItem, startPositionMs);
}
@Override
public void setMediaItem(MediaSource mediaItem) {
verifyApplicationThread();
setMediaItemInternal(mediaItem);
player.setMediaItem(mediaItem);
} }
@Override @Override
...@@ -1448,23 +1432,6 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1448,23 +1432,6 @@ public class SimpleExoPlayer extends BasePlayer
// Internal methods. // Internal methods.
private void prepareInternal(boolean resetPosition, boolean resetState) {
Assertions.checkNotNull(mediaSource);
@AudioFocusManager.PlayerCommand
int playerCommand = audioFocusManager.handlePrepare(getPlayWhenReady());
updatePlayWhenReady(getPlayWhenReady(), playerCommand);
player.prepareInternal(resetPosition, resetState);
}
private void setMediaItemInternal(MediaSource mediaItem) {
if (mediaSource != null) {
mediaSource.removeEventListener(analyticsCollector);
analyticsCollector.resetForNewMediaSource();
}
mediaSource = mediaItem;
mediaSource.addEventListener(eventHandler, analyticsCollector);
}
private void removeSurfaceCallbacks() { private void removeSurfaceCallbacks() {
if (textureView != null) { if (textureView != null) {
if (textureView.getSurfaceTextureListener() != componentListener) { if (textureView.getSurfaceTextureListener() != componentListener) {
......
...@@ -431,8 +431,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc ...@@ -431,8 +431,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
if (actionSchedule != null) { if (actionSchedule != null) {
actionSchedule.start(player, trackSelector, null, handler, ExoPlayerTestRunner.this); actionSchedule.start(player, trackSelector, null, handler, ExoPlayerTestRunner.this);
} }
player.setMediaItem(mediaSource); player.prepare(mediaSource, /* resetPosition= */ false, /* resetState= */ false);
player.prepare();
} catch (Exception e) { } catch (Exception e) {
handleException(e); handleException(e);
} }
......
...@@ -97,11 +97,6 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer { ...@@ -97,11 +97,6 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer {
} }
@Override @Override
public void prepare() {
throw new UnsupportedOperationException();
}
@Override
public void prepare(MediaSource mediaSource) { public void prepare(MediaSource mediaSource) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
...@@ -112,16 +107,6 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer { ...@@ -112,16 +107,6 @@ public abstract class StubExoPlayer extends BasePlayer implements ExoPlayer {
} }
@Override @Override
public void setMediaItem(MediaSource mediaItem) {
throw new UnsupportedOperationException();
}
@Override
public void setMediaItem(MediaSource mediaItem, long startPositionMs) {
throw new UnsupportedOperationException();
}
@Override
public void setPlayWhenReady(boolean playWhenReady) { public void setPlayWhenReady(boolean playWhenReady) {
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