mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
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();
|
||||
} 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);
|
||||
setIsLoading(continueLoading);
|
||||
if (continueLoading) {
|
||||
loadingPeriodHolder.mediaPeriod.continueLoading(loadingPeriodPositionUs);
|
||||
}
|
||||
boolean continueLoading = loadingPeriodHolder.shouldContinueLoading(rendererPositionUs);
|
||||
setIsLoading(continueLoading);
|
||||
if (continueLoading) {
|
||||
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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user