Commit 5f37e3c8 by olly Committed by Oliver Woodman

Ensure we re-enter the correct state after seeking.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118579021
parent 3187bd08
...@@ -282,27 +282,7 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -282,27 +282,7 @@ import java.util.concurrent.atomic.AtomicInteger;
durationUs = source.getDurationUs(); durationUs = source.getDurationUs();
selectTracksInternal(); selectTracksInternal();
resumeInternal();
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);
} }
private boolean isReadyOrEnded(TrackRenderer renderer) { private boolean isReadyOrEnded(TrackRenderer renderer) {
...@@ -464,12 +444,35 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -464,12 +444,35 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
} }
handler.sendEmptyMessage(MSG_DO_SOME_WORK); resumeInternal();
} finally { } finally {
pendingSeekCount.decrementAndGet(); 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() { private void stopInternal() {
resetInternal(); resetInternal();
setState(ExoPlayer.STATE_IDLE); setState(ExoPlayer.STATE_IDLE);
...@@ -625,8 +628,6 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -625,8 +628,6 @@ import java.util.concurrent.atomic.AtomicInteger;
} }
} }
} }
updateBufferedPositionUs();
} }
private void reselectTracksInternal() throws ExoPlaybackException { private void reselectTracksInternal() throws ExoPlaybackException {
...@@ -635,6 +636,7 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -635,6 +636,7 @@ import java.util.concurrent.atomic.AtomicInteger;
return; return;
} }
selectTracksInternal(); selectTracksInternal();
updateBufferedPositionUs();
handler.sendEmptyMessage(MSG_DO_SOME_WORK); handler.sendEmptyMessage(MSG_DO_SOME_WORK);
} }
......
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