Commit 27538370 by olly Committed by Rohit Singh

Inform ProgressiveMediaPeriod of known length earlier

PiperOrigin-RevId: 456753343
(cherry picked from commit 531f03a3)
parent de78cfa3
...@@ -134,7 +134,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -134,7 +134,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private boolean seenFirstTrackSelection; private boolean seenFirstTrackSelection;
private boolean notifyDiscontinuity; private boolean notifyDiscontinuity;
private int enabledTrackCount; private int enabledTrackCount;
private long length; private boolean isLengthKnown;
private long lastSeekPositionUs; private long lastSeekPositionUs;
private long pendingResetPositionUs; private long pendingResetPositionUs;
...@@ -200,7 +200,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -200,7 +200,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
sampleQueueTrackIds = new TrackId[0]; sampleQueueTrackIds = new TrackId[0];
sampleQueues = new SampleQueue[0]; sampleQueues = new SampleQueue[0];
pendingResetPositionUs = C.TIME_UNSET; pendingResetPositionUs = C.TIME_UNSET;
length = C.LENGTH_UNSET;
durationUs = C.TIME_UNSET; durationUs = C.TIME_UNSET;
dataType = C.DATA_TYPE_MEDIA; dataType = C.DATA_TYPE_MEDIA;
} }
...@@ -577,7 +576,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -577,7 +576,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* trackSelectionData= */ null, /* trackSelectionData= */ null,
/* mediaStartTimeUs= */ loadable.seekTimeUs, /* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs); durationUs);
copyLengthFromLoader(loadable);
loadingFinished = true; loadingFinished = true;
Assertions.checkNotNull(callback).onContinueLoadingRequested(this); Assertions.checkNotNull(callback).onContinueLoadingRequested(this);
} }
...@@ -606,7 +604,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -606,7 +604,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* mediaStartTimeUs= */ loadable.seekTimeUs, /* mediaStartTimeUs= */ loadable.seekTimeUs,
durationUs); durationUs);
if (!released) { if (!released) {
copyLengthFromLoader(loadable);
for (SampleQueue sampleQueue : sampleQueues) { for (SampleQueue sampleQueue : sampleQueues) {
sampleQueue.reset(); sampleQueue.reset();
} }
...@@ -623,7 +620,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -623,7 +620,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
long loadDurationMs, long loadDurationMs,
IOException error, IOException error,
int errorCount) { int errorCount) {
copyLengthFromLoader(loadable);
StatsDataSource dataSource = loadable.dataSource; StatsDataSource dataSource = loadable.dataSource;
LoadEventInfo loadEventInfo = LoadEventInfo loadEventInfo =
new LoadEventInfo( new LoadEventInfo(
...@@ -709,6 +705,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -709,6 +705,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
// Internal methods. // Internal methods.
private void onLengthKnown() {
handler.post(() -> isLengthKnown = true);
}
private TrackOutput prepareTrackOutput(TrackId id) { private TrackOutput prepareTrackOutput(TrackId id) {
int trackCount = sampleQueues.length; int trackCount = sampleQueues.length;
for (int i = 0; i < trackCount; i++) { for (int i = 0; i < trackCount; i++) {
...@@ -732,7 +732,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -732,7 +732,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private void setSeekMap(SeekMap seekMap) { private void setSeekMap(SeekMap seekMap) {
this.seekMap = icyHeaders == null ? seekMap : new Unseekable(/* durationUs= */ C.TIME_UNSET); this.seekMap = icyHeaders == null ? seekMap : new Unseekable(/* durationUs= */ C.TIME_UNSET);
durationUs = seekMap.getDurationUs(); durationUs = seekMap.getDurationUs();
isLive = length == C.LENGTH_UNSET && seekMap.getDurationUs() == C.TIME_UNSET; isLive = !isLengthKnown && seekMap.getDurationUs() == C.TIME_UNSET;
dataType = isLive ? C.DATA_TYPE_MEDIA_PROGRESSIVE_LIVE : C.DATA_TYPE_MEDIA; dataType = isLive ? C.DATA_TYPE_MEDIA_PROGRESSIVE_LIVE : C.DATA_TYPE_MEDIA;
listener.onSourceInfoRefreshed(durationUs, seekMap.isSeekable(), isLive); listener.onSourceInfoRefreshed(durationUs, seekMap.isSeekable(), isLive);
if (!prepared) { if (!prepared) {
...@@ -788,12 +788,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -788,12 +788,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
Assertions.checkNotNull(callback).onPrepared(this); Assertions.checkNotNull(callback).onPrepared(this);
} }
private void copyLengthFromLoader(ExtractingLoadable loadable) {
if (length == C.LENGTH_UNSET) {
length = loadable.length;
}
}
private void startLoading() { private void startLoading() {
ExtractingLoadable loadable = ExtractingLoadable loadable =
new ExtractingLoadable( new ExtractingLoadable(
...@@ -839,7 +833,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -839,7 +833,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* retry. * retry.
*/ */
private boolean configureRetry(ExtractingLoadable loadable, int currentExtractedSampleCount) { private boolean configureRetry(ExtractingLoadable loadable, int currentExtractedSampleCount) {
if (length != C.LENGTH_UNSET || (seekMap != null && seekMap.getDurationUs() != C.TIME_UNSET)) { if (isLengthKnown || (seekMap != null && seekMap.getDurationUs() != C.TIME_UNSET)) {
// We're playing an on-demand stream. Resume the current loadable, which will // We're playing an on-demand stream. Resume the current loadable, which will
// request data starting from the point it left off. // request data starting from the point it left off.
extractedSamplesCountAtStartOfLoad = currentExtractedSampleCount; extractedSamplesCountAtStartOfLoad = currentExtractedSampleCount;
...@@ -969,7 +963,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -969,7 +963,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private boolean pendingExtractorSeek; private boolean pendingExtractorSeek;
private long seekTimeUs; private long seekTimeUs;
private DataSpec dataSpec; private DataSpec dataSpec;
private long length;
@Nullable private TrackOutput icyTrackOutput; @Nullable private TrackOutput icyTrackOutput;
private boolean seenIcyMetadata; private boolean seenIcyMetadata;
...@@ -987,7 +980,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -987,7 +980,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
this.loadCondition = loadCondition; this.loadCondition = loadCondition;
this.positionHolder = new PositionHolder(); this.positionHolder = new PositionHolder();
this.pendingExtractorSeek = true; this.pendingExtractorSeek = true;
this.length = C.LENGTH_UNSET;
loadTaskId = LoadEventInfo.getNewId(); loadTaskId = LoadEventInfo.getNewId();
dataSpec = buildDataSpec(/* position= */ 0); dataSpec = buildDataSpec(/* position= */ 0);
} }
...@@ -1006,9 +998,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -1006,9 +998,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
try { try {
long position = positionHolder.position; long position = positionHolder.position;
dataSpec = buildDataSpec(position); dataSpec = buildDataSpec(position);
length = dataSource.open(dataSpec); long length = dataSource.open(dataSpec);
if (length != C.LENGTH_UNSET) { if (length != C.LENGTH_UNSET) {
length += position; length += position;
onLengthKnown();
} }
icyHeaders = IcyHeaders.parse(dataSource.getResponseHeaders()); icyHeaders = IcyHeaders.parse(dataSource.getResponseHeaders());
DataSource extractorDataSource = dataSource; DataSource extractorDataSource = dataSource;
......
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