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:
parent
3187bd0829
commit
5f37e3c8fb
@ -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;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateBufferedPositionUs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reselectTracksInternal() throws ExoPlaybackException {
|
private void reselectTracksInternal() throws ExoPlaybackException {
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user