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:
parent
96fa660284
commit
c385ece69d
@ -596,7 +596,8 @@ import java.io.IOException;
|
|||||||
stopRenderers();
|
stopRenderers();
|
||||||
} else if (state == ExoPlayer.STATE_BUFFERING) {
|
} else if (state == ExoPlayer.STATE_BUFFERING) {
|
||||||
boolean isNewlyReady = enabledRenderers.length > 0
|
boolean isNewlyReady = enabledRenderers.length > 0
|
||||||
? (allRenderersReadyOrEnded && haveSufficientBuffer(rebuffering))
|
? (allRenderersReadyOrEnded
|
||||||
|
&& loadingPeriodHolder.haveSufficientBuffer(rebuffering, rendererPositionUs))
|
||||||
: isTimelineReady(playingPeriodDurationUs);
|
: isTimelineReady(playingPeriodDurationUs);
|
||||||
if (isNewlyReady) {
|
if (isNewlyReady) {
|
||||||
setState(ExoPlayer.STATE_READY);
|
setState(ExoPlayer.STATE_READY);
|
||||||
@ -953,21 +954,6 @@ import java.io.IOException;
|
|||||||
&& (playingPeriodHolder.next.prepared || playingPeriodHolder.next.info.id.isAd()));
|
&& (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 {
|
private void maybeThrowPeriodPrepareError() throws IOException {
|
||||||
if (loadingPeriodHolder != null && !loadingPeriodHolder.prepared
|
if (loadingPeriodHolder != null && !loadingPeriodHolder.prepared
|
||||||
&& (readingPeriodHolder == null || readingPeriodHolder.next == loadingPeriodHolder)) {
|
&& (readingPeriodHolder == null || readingPeriodHolder.next == loadingPeriodHolder)) {
|
||||||
@ -1373,18 +1359,10 @@ import java.io.IOException;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void maybeContinueLoading() {
|
private void maybeContinueLoading() {
|
||||||
long nextLoadPositionUs = !loadingPeriodHolder.prepared ? 0
|
boolean continueLoading = loadingPeriodHolder.shouldContinueLoading(rendererPositionUs);
|
||||||
: 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);
|
|
||||||
setIsLoading(continueLoading);
|
setIsLoading(continueLoading);
|
||||||
if (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);
|
&& (!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 {
|
public void handlePrepared() throws ExoPlaybackException {
|
||||||
prepared = true;
|
prepared = true;
|
||||||
selectTracks();
|
selectTracks();
|
||||||
@ -1547,6 +1538,22 @@ import java.io.IOException;
|
|||||||
info = info.copyWithStartPositionUs(newStartPositionUs);
|
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 {
|
public boolean selectTracks() throws ExoPlaybackException {
|
||||||
TrackSelectorResult selectorResult = trackSelector.selectTracks(rendererCapabilities,
|
TrackSelectorResult selectorResult = trackSelector.selectTracks(rendererCapabilities,
|
||||||
mediaPeriod.getTrackGroups());
|
mediaPeriod.getTrackGroups());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user