From 1aad0f8e22f9d4517f368e5cc77bef23254d33ad Mon Sep 17 00:00:00 2001 From: tonihei Date: Thu, 7 Mar 2019 14:35:35 +0000 Subject: [PATCH] Don't throw in ProgressiveMediaPeriod.onLoadCompleted. We may currently throw if the load completes before we finished preparation. Don't throw and instead check for this condition in maybeThrowPrepareError. PiperOrigin-RevId: 237237000 --- .../exoplayer2/source/ProgressiveMediaPeriod.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java index c7418ff956..a179e6e3dd 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java @@ -21,6 +21,7 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.FormatHolder; +import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.SeekParameters; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.extractor.DefaultExtractorInput; @@ -218,6 +219,9 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; @Override public void maybeThrowPrepareError() throws IOException { maybeThrowError(); + if (loadingFinished && !prepared) { + throw new ParserException("Loading finished before preparation is complete."); + } } @Override @@ -512,12 +516,12 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; @Override public void onLoadCompleted(ExtractingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs) { - if (durationUs == C.TIME_UNSET) { - SeekMap seekMap = Assertions.checkNotNull(this.seekMap); + if (durationUs == C.TIME_UNSET && seekMap != null) { + boolean isSeekable = seekMap.isSeekable(); long largestQueuedTimestampUs = getLargestQueuedTimestampUs(); durationUs = largestQueuedTimestampUs == Long.MIN_VALUE ? 0 : largestQueuedTimestampUs + DEFAULT_LAST_SAMPLE_DURATION_US; - listener.onSourceInfoRefreshed(durationUs, seekMap.isSeekable()); + listener.onSourceInfoRefreshed(durationUs, isSeekable); } eventDispatcher.loadCompleted( loadable.dataSpec,