Move methods into MediaPeriodHolder.

Both methods make extensive use of MediaPeriodHolder internals.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=160386401
This commit is contained in:
tonihei 2017-06-28 02:35:30 -07:00 committed by Oliver Woodman
parent 96fa660284
commit c385ece69d

View File

@ -596,7 +596,8 @@ import java.io.IOException;
stopRenderers();
} else if (state == ExoPlayer.STATE_BUFFERING) {
boolean isNewlyReady = enabledRenderers.length > 0
? (allRenderersReadyOrEnded && haveSufficientBuffer(rebuffering))
? (allRenderersReadyOrEnded
&& loadingPeriodHolder.haveSufficientBuffer(rebuffering, rendererPositionUs))
: isTimelineReady(playingPeriodDurationUs);
if (isNewlyReady) {
setState(ExoPlayer.STATE_READY);
@ -953,21 +954,6 @@ import java.io.IOException;
&& (playingPeriodHolder.next.prepared || playingPeriodHolder.next.info.id.isAd()));
}
private boolean haveSufficientBuffer(boolean rebuffering) {
long loadingPeriodBufferedPositionUs = !loadingPeriodHolder.prepared
? loadingPeriodHolder.info.startPositionUs
: loadingPeriodHolder.mediaPeriod.getBufferedPositionUs();
if (loadingPeriodBufferedPositionUs == C.TIME_END_OF_SOURCE) {
if (loadingPeriodHolder.info.isFinal) {
return true;
}
loadingPeriodBufferedPositionUs = loadingPeriodHolder.info.durationUs;
}
return loadControl.shouldStartPlayback(
loadingPeriodBufferedPositionUs - loadingPeriodHolder.toPeriodTime(rendererPositionUs),
rebuffering);
}
private void maybeThrowPeriodPrepareError() throws IOException {
if (loadingPeriodHolder != null && !loadingPeriodHolder.prepared
&& (readingPeriodHolder == null || readingPeriodHolder.next == loadingPeriodHolder)) {
@ -1373,18 +1359,10 @@ import java.io.IOException;
}
private void maybeContinueLoading() {
long nextLoadPositionUs = !loadingPeriodHolder.prepared ? 0
: loadingPeriodHolder.mediaPeriod.getNextLoadPositionUs();
if (nextLoadPositionUs == C.TIME_END_OF_SOURCE) {
setIsLoading(false);
} else {
long loadingPeriodPositionUs = loadingPeriodHolder.toPeriodTime(rendererPositionUs);
long bufferedDurationUs = nextLoadPositionUs - loadingPeriodPositionUs;
boolean continueLoading = loadControl.shouldContinueLoading(bufferedDurationUs);
boolean continueLoading = loadingPeriodHolder.shouldContinueLoading(rendererPositionUs);
setIsLoading(continueLoading);
if (continueLoading) {
loadingPeriodHolder.mediaPeriod.continueLoading(loadingPeriodPositionUs);
}
loadingPeriodHolder.continueLoading(rendererPositionUs);
}
}
@ -1540,6 +1518,19 @@ import java.io.IOException;
&& (!hasEnabledTracks || mediaPeriod.getBufferedPositionUs() == C.TIME_END_OF_SOURCE);
}
public boolean haveSufficientBuffer(boolean rebuffering, long rendererPositionUs) {
long bufferedPositionUs = !prepared ? info.startPositionUs
: mediaPeriod.getBufferedPositionUs();
if (bufferedPositionUs == C.TIME_END_OF_SOURCE) {
if (info.isFinal) {
return true;
}
bufferedPositionUs = info.durationUs;
}
return loadControl.shouldStartPlayback(bufferedPositionUs - toPeriodTime(rendererPositionUs),
rebuffering);
}
public void handlePrepared() throws ExoPlaybackException {
prepared = true;
selectTracks();
@ -1547,6 +1538,22 @@ import java.io.IOException;
info = info.copyWithStartPositionUs(newStartPositionUs);
}
public boolean shouldContinueLoading(long rendererPositionUs) {
long nextLoadPositionUs = !prepared ? 0 : mediaPeriod.getNextLoadPositionUs();
if (nextLoadPositionUs == C.TIME_END_OF_SOURCE) {
return false;
} else {
long loadingPeriodPositionUs = toPeriodTime(rendererPositionUs);
long bufferedDurationUs = nextLoadPositionUs - loadingPeriodPositionUs;
return loadControl.shouldContinueLoading(bufferedDurationUs);
}
}
public void continueLoading(long rendererPositionUs) {
long loadingPeriodPositionUs = toPeriodTime(rendererPositionUs);
mediaPeriod.continueLoading(loadingPeriodPositionUs);
}
public boolean selectTracks() throws ExoPlaybackException {
TrackSelectorResult selectorResult = trackSelector.selectTracks(rendererCapabilities,
mediaPeriod.getTrackGroups());