Ensure we re-enter the correct state after seeking.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118579021
This commit is contained in:
olly 2016-03-30 09:17:21 -07:00 committed by Oliver Woodman
parent 3187bd0829
commit 5f37e3c8fb

View File

@ -282,27 +282,7 @@ import java.util.concurrent.atomic.AtomicInteger;
durationUs = source.getDurationUs();
selectTracksInternal();
boolean allRenderersEnded = true;
boolean allRenderersReadyOrEnded = true;
for (TrackRenderer renderer : renderers) {
allRenderersEnded = allRenderersEnded && renderer.isEnded();
allRenderersReadyOrEnded = allRenderersReadyOrEnded && isReadyOrEnded(renderer);
}
if (allRenderersEnded && (durationUs == C.UNKNOWN_TIME_US || durationUs <= positionUs)) {
// We don't expect this case, but handle it anyway.
setState(ExoPlayer.STATE_ENDED);
} else {
setState(allRenderersReadyOrEnded && haveSufficientBuffer() ? ExoPlayer.STATE_READY
: ExoPlayer.STATE_BUFFERING);
}
// Start the renderers if required, and schedule the first piece of work.
if (playWhenReady && state == ExoPlayer.STATE_READY) {
startRenderers();
}
handler.sendEmptyMessage(MSG_DO_SOME_WORK);
resumeInternal();
}
private boolean isReadyOrEnded(TrackRenderer renderer) {
@ -464,12 +444,35 @@ import java.util.concurrent.atomic.AtomicInteger;
}
}
handler.sendEmptyMessage(MSG_DO_SOME_WORK);
resumeInternal();
} finally {
pendingSeekCount.decrementAndGet();
}
}
private void resumeInternal() throws ExoPlaybackException {
boolean allRenderersEnded = true;
boolean allRenderersReadyOrEnded = true;
for (TrackRenderer renderer : renderers) {
allRenderersEnded = allRenderersEnded && renderer.isEnded();
allRenderersReadyOrEnded = allRenderersReadyOrEnded && isReadyOrEnded(renderer);
}
updateBufferedPositionUs();
if (allRenderersEnded && (durationUs == C.UNKNOWN_TIME_US || durationUs <= positionUs)) {
setState(ExoPlayer.STATE_ENDED);
} else {
setState(allRenderersReadyOrEnded && haveSufficientBuffer() ? ExoPlayer.STATE_READY
: ExoPlayer.STATE_BUFFERING);
}
// Start the renderers if ready, and schedule the first piece of work.
if (playWhenReady && state == ExoPlayer.STATE_READY) {
startRenderers();
}
handler.sendEmptyMessage(MSG_DO_SOME_WORK);
}
private void stopInternal() {
resetInternal();
setState(ExoPlayer.STATE_IDLE);
@ -625,8 +628,6 @@ import java.util.concurrent.atomic.AtomicInteger;
}
}
}
updateBufferedPositionUs();
}
private void reselectTracksInternal() throws ExoPlaybackException {
@ -635,6 +636,7 @@ import java.util.concurrent.atomic.AtomicInteger;
return;
}
selectTracksInternal();
updateBufferedPositionUs();
handler.sendEmptyMessage(MSG_DO_SOME_WORK);
}