@Override public void onLoadError(Loadable ignored, IOException e) { currentLoadableException = e; currentLoadableExceptionCount = extractedSampleCount > extractedSampleCountAtStartOfLoad ? 1 : currentLoadableExceptionCount + 1; currentLoadableExceptionTimestamp = SystemClock.elapsedRealtime(); maybeStartLoading(); }
private void restartFrom(long positionUs) { pendingResetPositionUs = positionUs; loadingFinished = false; if (loader.isLoading()) { loader.cancelLoading(); } else { clearState(); maybeStartLoading(); } }
@Override public boolean prepare(long positionUs) { if (prepared) { return true; } if (loader == null) { loader = new Loader("Loader:ExtractorSampleSource"); } maybeStartLoading(); if (seekMap != null && tracksBuilt && haveFormatsForAllTracks()) { int trackCount = sampleQueues.size(); trackEnabledStates = new boolean[trackCount]; pendingDiscontinuities = new boolean[trackCount]; pendingMediaFormat = new boolean[trackCount]; mediaFormats = new MediaFormat[trackCount]; maxTrackDurationUs = C.UNKNOWN_TIME_US; for (int i = 0; i < trackCount; i++) { MediaFormat format = sampleQueues.valueAt(i).getFormat(); mediaFormats[i] = format; if (format.durationUs != C.UNKNOWN_TIME_US && format.durationUs > maxTrackDurationUs) { maxTrackDurationUs = format.durationUs; } } prepared = true; return true; } return false; }
@Override public boolean continueBuffering(int track, long playbackPositionUs) { Assertions.checkState(prepared); Assertions.checkState(trackEnabledStates[track]); downstreamPositionUs = playbackPositionUs; discardSamplesForDisabledTracks(downstreamPositionUs); if (loadingFinished) { return true; } maybeStartLoading(); if (isPendingReset()) { return false; } return !sampleQueues.valueAt(track).isEmpty(); }