Do not start rebuffering after playback ended.

This is currently happening after toggling the repeat mode. This is line with
the rest of the implementation which requires a seek operation to resume
playback.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160516449
This commit is contained in:
tonihei 2017-06-29 05:58:39 -07:00 committed by Oliver Woodman
parent 1f815db367
commit a98d5bbd0a
2 changed files with 6 additions and 25 deletions

View File

@ -226,22 +226,22 @@ public final class ExoPlayerTest extends TestCase {
final int[] actionSchedule = { // 0 -> 1 final int[] actionSchedule = { // 0 -> 1
ExoPlayer.REPEAT_MODE_ONE, // 1 -> 1 ExoPlayer.REPEAT_MODE_ONE, // 1 -> 1
ExoPlayer.REPEAT_MODE_OFF, // 1 -> 2 ExoPlayer.REPEAT_MODE_OFF, // 1 -> 2
-1, // 2 -> ended ExoPlayer.REPEAT_MODE_ONE, // 2 -> 2
ExoPlayer.REPEAT_MODE_ONE, // ended -> 2
ExoPlayer.REPEAT_MODE_ALL, // 2 -> 0 ExoPlayer.REPEAT_MODE_ALL, // 2 -> 0
ExoPlayer.REPEAT_MODE_ONE, // 0 -> 0 ExoPlayer.REPEAT_MODE_ONE, // 0 -> 0
-1, // 0 -> 0 -1, // 0 -> 0
ExoPlayer.REPEAT_MODE_OFF, // 0 -> 1 ExoPlayer.REPEAT_MODE_OFF, // 0 -> 1
-1, // 1 -> 2 -1, // 1 -> 2
-1, // 2 -> ended -1 // 2 -> ended
-1
}; };
int[] expectedWindowIndices = {1, 1, 2, 2, 2, 0, 0, 0, 1, 2, 2}; int[] expectedWindowIndices = {1, 1, 2, 2, 0, 0, 0, 1, 2};
final LinkedList<Integer> windowIndices = new LinkedList<>(); final LinkedList<Integer> windowIndices = new LinkedList<>();
final CountDownLatch actionCounter = new CountDownLatch(actionSchedule.length); final CountDownLatch actionCounter = new CountDownLatch(actionSchedule.length);
PlayerWrapper playerWrapper = new PlayerWrapper() { PlayerWrapper playerWrapper = new PlayerWrapper() {
@Override
@SuppressWarnings("ResourceType") @SuppressWarnings("ResourceType")
private void executeAction() { public void onPositionDiscontinuity() {
super.onPositionDiscontinuity();
int actionIndex = actionSchedule.length - (int) actionCounter.getCount(); int actionIndex = actionSchedule.length - (int) actionCounter.getCount();
if (actionSchedule[actionIndex] != -1) { if (actionSchedule[actionIndex] != -1) {
player.setRepeatMode(actionSchedule[actionIndex]); player.setRepeatMode(actionSchedule[actionIndex]);
@ -249,20 +249,6 @@ public final class ExoPlayerTest extends TestCase {
windowIndices.add(player.getCurrentWindowIndex()); windowIndices.add(player.getCurrentWindowIndex());
actionCounter.countDown(); actionCounter.countDown();
} }
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
super.onPlayerStateChanged(playWhenReady, playbackState);
if (playbackState == ExoPlayer.STATE_ENDED) {
executeAction();
}
}
@Override
public void onPositionDiscontinuity() {
super.onPositionDiscontinuity();
executeAction();
}
}; };
MediaSource mediaSource = new FakeMediaSource(timeline, null, TEST_VIDEO_FORMAT); MediaSource mediaSource = new FakeMediaSource(timeline, null, TEST_VIDEO_FORMAT);
FakeRenderer renderer = new FakeRenderer(TEST_VIDEO_FORMAT); FakeRenderer renderer = new FakeRenderer(TEST_VIDEO_FORMAT);

View File

@ -488,11 +488,6 @@ import java.io.IOException;
long newPositionUs = seekToPeriodPosition(periodId, playbackInfo.positionUs); long newPositionUs = seekToPeriodPosition(periodId, playbackInfo.positionUs);
playbackInfo = new PlaybackInfo(periodId, newPositionUs); playbackInfo = new PlaybackInfo(periodId, newPositionUs);
} }
// Restart buffering if playback has ended and repetition is enabled.
if (state == ExoPlayer.STATE_ENDED && repeatMode != ExoPlayer.REPEAT_MODE_OFF) {
setState(ExoPlayer.STATE_BUFFERING);
}
} }
private void startRenderers() throws ExoPlaybackException { private void startRenderers() throws ExoPlaybackException {