diff --git a/library/src/androidTest/java/com/google/android/exoplayer/extractor/mp3/XingSeekerTest.java b/library/src/androidTest/java/com/google/android/exoplayer/extractor/mp3/XingSeekerTest.java index 88a14401f0..cab4b6e64d 100644 --- a/library/src/androidTest/java/com/google/android/exoplayer/extractor/mp3/XingSeekerTest.java +++ b/library/src/androidTest/java/com/google/android/exoplayer/extractor/mp3/XingSeekerTest.java @@ -57,7 +57,7 @@ public final class XingSeekerTest extends InstrumentationTestCase { MpegAudioHeader xingFrameHeader = new MpegAudioHeader(); MpegAudioHeader.populateHeader(XING_FRAME_HEADER_DATA, xingFrameHeader); seeker = XingSeeker.create(xingFrameHeader, new ParsableByteArray(XING_FRAME_PAYLOAD), - XING_FRAME_POSITION, C.UNKNOWN_TIME_US); + XING_FRAME_POSITION, C.LENGTH_UNBOUNDED); seekerWithInputLength = XingSeeker.create(xingFrameHeader, new ParsableByteArray(XING_FRAME_PAYLOAD), XING_FRAME_POSITION, INPUT_LENGTH); xingFrameSize = xingFrameHeader.frameSize; diff --git a/library/src/main/java/com/google/android/exoplayer/C.java b/library/src/main/java/com/google/android/exoplayer/C.java index 2b787f43ac..c5f28be93e 100644 --- a/library/src/main/java/com/google/android/exoplayer/C.java +++ b/library/src/main/java/com/google/android/exoplayer/C.java @@ -25,15 +25,15 @@ import android.media.MediaCodec; */ public final class C { - /** - * Special microsecond constant representing an unknown time or duration. - */ - public static final long UNKNOWN_TIME_US = -1L; - /** * Special microsecond constant representing the end of a source. */ - public static final long END_OF_SOURCE_US = -2L; + public static final long END_OF_SOURCE_US = Long.MIN_VALUE; + + /** + * Special microsecond constant representing an unset or unknown time or duration. + */ + public static final long UNSET_TIME_US = Long.MIN_VALUE + 1; /** * The number of microseconds in one second. diff --git a/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java b/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java index 17d8512bf9..7349d03e06 100644 --- a/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java +++ b/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java @@ -187,12 +187,12 @@ public final class DefaultLoadControl implements LoadControl { updateControlState(); } - return currentBufferSize < targetBufferSize && nextLoadPositionUs != -1 + return currentBufferSize < targetBufferSize && nextLoadPositionUs != C.UNSET_TIME_US && nextLoadPositionUs <= maxLoadStartPositionUs; } private int getLoaderBufferState(long playbackPositionUs, long nextLoadPositionUs) { - if (nextLoadPositionUs == -1) { + if (nextLoadPositionUs == C.UNSET_TIME_US) { return ABOVE_HIGH_WATERMARK; } else { long timeUntilNextLoadPosition = nextLoadPositionUs - playbackPositionUs; @@ -216,7 +216,7 @@ public final class DefaultLoadControl implements LoadControl { for (int i = 0; i < loaders.size(); i++) { LoaderState loaderState = loaderStates.get(loaders.get(i)); loading |= loaderState.loading; - haveNextLoadPosition |= loaderState.nextLoadPositionUs != -1; + haveNextLoadPosition |= loaderState.nextLoadPositionUs != C.UNSET_TIME_US; highestState = Math.max(highestState, loaderState.bufferState); } @@ -233,14 +233,14 @@ public final class DefaultLoadControl implements LoadControl { notifyLoadingChanged(false); } - maxLoadStartPositionUs = -1; + maxLoadStartPositionUs = C.UNSET_TIME_US; if (fillingBuffers) { for (int i = 0; i < loaders.size(); i++) { Object loader = loaders.get(i); LoaderState loaderState = loaderStates.get(loader); long loaderTime = loaderState.nextLoadPositionUs; - if (loaderTime != -1 - && (maxLoadStartPositionUs == -1 || loaderTime < maxLoadStartPositionUs)) { + if (loaderTime != C.UNSET_TIME_US + && (maxLoadStartPositionUs == C.UNSET_TIME_US || loaderTime < maxLoadStartPositionUs)) { maxLoadStartPositionUs = loaderTime; } } @@ -270,7 +270,7 @@ public final class DefaultLoadControl implements LoadControl { this.bufferSizeContribution = bufferSizeContribution; bufferState = ABOVE_HIGH_WATERMARK; loading = false; - nextLoadPositionUs = -1; + nextLoadPositionUs = C.UNSET_TIME_US; } } diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java index 08d18115ec..23184ea944 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java @@ -100,8 +100,8 @@ import java.util.concurrent.atomic.AtomicInteger; this.playWhenReady = playWhenReady; this.eventHandler = eventHandler; this.state = ExoPlayer.STATE_IDLE; - this.durationUs = C.UNKNOWN_TIME_US; - this.bufferedPositionUs = C.UNKNOWN_TIME_US; + this.durationUs = C.UNSET_TIME_US; + this.bufferedPositionUs = C.UNSET_TIME_US; for (int i = 0; i < renderers.length; i++) { renderers[i].setIndex(i); @@ -131,13 +131,13 @@ import java.util.concurrent.atomic.AtomicInteger; public long getBufferedPosition() { long bufferedPositionUs = this.bufferedPositionUs; - return bufferedPositionUs == C.UNKNOWN_TIME_US ? ExoPlayer.UNKNOWN_TIME + return bufferedPositionUs == C.UNSET_TIME_US ? ExoPlayer.UNKNOWN_TIME : bufferedPositionUs / 1000; } public long getDuration() { long durationUs = this.durationUs; - return durationUs == C.UNKNOWN_TIME_US ? ExoPlayer.UNKNOWN_TIME : durationUs / 1000; + return durationUs == C.UNSET_TIME_US ? ExoPlayer.UNKNOWN_TIME : durationUs / 1000; } public void setSource(SampleSource sampleSource) { @@ -273,10 +273,10 @@ import java.util.concurrent.atomic.AtomicInteger; private boolean haveSufficientBuffer() { long minBufferDurationUs = rebuffering ? minRebufferUs : minBufferUs; return minBufferDurationUs <= 0 - || bufferedPositionUs == C.UNKNOWN_TIME_US + || bufferedPositionUs == C.UNSET_TIME_US || bufferedPositionUs == C.END_OF_SOURCE_US || bufferedPositionUs >= positionUs + minBufferDurationUs - || (durationUs != C.UNKNOWN_TIME_US && bufferedPositionUs >= durationUs); + || (durationUs != C.UNSET_TIME_US && bufferedPositionUs >= durationUs); } private void setSourceInternal(SampleSource source) { @@ -336,7 +336,7 @@ import java.util.concurrent.atomic.AtomicInteger; long sourceBufferedPositionUs = enabledRenderers.length > 0 ? source.getBufferedPositionUs() : C.END_OF_SOURCE_US; bufferedPositionUs = sourceBufferedPositionUs == C.END_OF_SOURCE_US - && durationUs != C.UNKNOWN_TIME_US ? durationUs : sourceBufferedPositionUs; + && durationUs != C.UNSET_TIME_US ? durationUs : sourceBufferedPositionUs; } private void doSomeWork() throws ExoPlaybackException, IOException { @@ -384,7 +384,7 @@ import java.util.concurrent.atomic.AtomicInteger; allRenderersReadyOrEnded = allRenderersReadyOrEnded && rendererReadyOrEnded; } - if (allRenderersEnded && (durationUs == C.UNKNOWN_TIME_US || durationUs <= positionUs)) { + if (allRenderersEnded && (durationUs == C.UNSET_TIME_US || durationUs <= positionUs)) { setState(ExoPlayer.STATE_ENDED); stopRenderers(); } else if (state == ExoPlayer.STATE_BUFFERING && allRenderersReadyOrEnded @@ -460,7 +460,7 @@ import java.util.concurrent.atomic.AtomicInteger; } updateBufferedPositionUs(); - if (allRenderersEnded && (durationUs == C.UNKNOWN_TIME_US || durationUs <= positionUs)) { + if (allRenderersEnded && (durationUs == C.UNSET_TIME_US || durationUs <= positionUs)) { setState(ExoPlayer.STATE_ENDED); } else { setState(allRenderersReadyOrEnded && haveSufficientBuffer() ? ExoPlayer.STATE_READY diff --git a/library/src/main/java/com/google/android/exoplayer/FrameworkSampleSource.java b/library/src/main/java/com/google/android/exoplayer/FrameworkSampleSource.java index eef8c152e4..3650d41084 100644 --- a/library/src/main/java/com/google/android/exoplayer/FrameworkSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/FrameworkSampleSource.java @@ -132,7 +132,7 @@ public final class FrameworkSampleSource implements SampleSource { } else { extractor.setDataSource(fileDescriptor, fileDescriptorOffset, fileDescriptorLength); } - durationUs = C.UNKNOWN_TIME_US; + durationUs = C.UNSET_TIME_US; trackStates = new int[extractor.getTrackCount()]; pendingResets = new boolean[trackStates.length]; TrackGroup[] trackArray = new TrackGroup[trackStates.length]; @@ -150,7 +150,7 @@ public final class FrameworkSampleSource implements SampleSource { @Override public long getDurationUs() { - return C.UNKNOWN_TIME_US; + return C.UNSET_TIME_US; } @Override @@ -212,7 +212,7 @@ public final class FrameworkSampleSource implements SampleSource { long bufferedDurationUs = extractor.getCachedDuration(); if (bufferedDurationUs == -1) { - return C.UNKNOWN_TIME_US; + return C.UNSET_TIME_US; } long sampleTime = extractor.getSampleTime(); @@ -234,7 +234,7 @@ public final class FrameworkSampleSource implements SampleSource { pendingResets[track] = false; return lastSeekPositionUs; } - return TrackStream.NO_RESET; + return C.UNSET_TIME_US; } /* package */ int readData(int track, FormatHolder formatHolder, DecoderInputBuffer buffer) { @@ -266,7 +266,7 @@ public final class FrameworkSampleSource implements SampleSource { buffer.addFlag(C.BUFFER_FLAG_ENCRYPTED); buffer.cryptoInfo.setFromExtractorV16(extractor); } - pendingSeekPositionUs = C.UNKNOWN_TIME_US; + pendingSeekPositionUs = C.UNSET_TIME_US; extractor.advance(); return TrackStream.BUFFER_READ; } else if (extractorTrackIndex < 0) { diff --git a/library/src/main/java/com/google/android/exoplayer/LoadControl.java b/library/src/main/java/com/google/android/exoplayer/LoadControl.java index 12d8578efa..220abf556e 100644 --- a/library/src/main/java/com/google/android/exoplayer/LoadControl.java +++ b/library/src/main/java/com/google/android/exoplayer/LoadControl.java @@ -65,8 +65,8 @@ public interface LoadControl { * * @param loader The loader invoking the update. * @param playbackPositionUs The loader's playback position. - * @param nextLoadPositionUs The loader's next load position. -1 if finished, failed, or if the - * next load position is not yet known. + * @param nextLoadPositionUs The loader's next load position. {@link C#UNSET_TIME_US} if finished, + * failed, or if the next load position is not yet known. * @param loading Whether the loader is currently loading data. * @return True if the loader is allowed to start its next load. False otherwise. */ diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java index ef2836b139..d7bf9637d1 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java @@ -367,7 +367,7 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem if (audioTrackHadData && !audioTrackHasData && getState() == TrackRenderer.STATE_STARTED) { long elapsedSinceLastFeedMs = SystemClock.elapsedRealtime() - lastFeedElapsedRealtimeMs; long bufferSizeUs = audioTrack.getBufferSizeUs(); - long bufferSizeMs = bufferSizeUs == C.UNKNOWN_TIME_US ? -1 : bufferSizeUs / 1000; + long bufferSizeMs = bufferSizeUs == C.UNSET_TIME_US ? -1 : bufferSizeUs / 1000; notifyAudioTrackUnderrun(audioTrack.getBufferSize(), bufferSizeMs, elapsedSinceLastFeedMs); } } diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java index b9460e4999..c9b6b1f6d2 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java @@ -200,7 +200,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { private boolean codecNeedsMonoChannelCountWorkaround; private ByteBuffer[] inputBuffers; private ByteBuffer[] outputBuffers; - private long codecHotswapTimeMs; + private long codecHotswapDeadlineMs; private int inputIndex; private int outputIndex; private boolean openedDrmSession; @@ -366,8 +366,8 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { notifyAndThrowDecoderInitError(new DecoderInitializationException(format, e, requiresSecureDecoder, codecName)); } - codecHotswapTimeMs = getState() == TrackRenderer.STATE_STARTED ? - SystemClock.elapsedRealtime() : -1; + codecHotswapDeadlineMs = getState() == TrackRenderer.STATE_STARTED + ? (SystemClock.elapsedRealtime() + MAX_CODEC_HOTSWAP_TIME_MS) : -1; inputIndex = -1; outputIndex = -1; codecCounters.codecInitCount++; @@ -411,7 +411,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { protected void releaseCodec() { if (codec != null) { - codecHotswapTimeMs = -1; + codecHotswapDeadlineMs = -1; inputIndex = -1; outputIndex = -1; waitingForKeys = false; @@ -484,7 +484,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { } private void flushCodec() throws ExoPlaybackException { - codecHotswapTimeMs = -1; + codecHotswapDeadlineMs = -1; inputIndex = -1; outputIndex = -1; waitingForKeys = false; @@ -776,12 +776,8 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { @Override protected boolean isReady() { - return format != null && !waitingForKeys - && (isSourceReady() || outputIndex >= 0 || isWithinHotswapPeriod()); - } - - private boolean isWithinHotswapPeriod() { - return SystemClock.elapsedRealtime() < codecHotswapTimeMs + MAX_CODEC_HOTSWAP_TIME_MS; + return format != null && !waitingForKeys && (isSourceReady() || outputIndex >= 0 + || (SystemClock.elapsedRealtime() < codecHotswapDeadlineMs)); } /** diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java index 67c68ae9eb..a4c419fa71 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java @@ -107,7 +107,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { private final VideoFrameReleaseTimeHelper frameReleaseTimeHelper; private final EventListener eventListener; - private final long allowedJoiningTimeUs; + private final long allowedJoiningTimeMs; private final int videoScalingMode; private final int maxDroppedFrameCountToNotify; private final boolean deviceNeedsAutoFrcWorkaround; @@ -118,7 +118,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { private Surface surface; private boolean reportedDrawnToSurface; private boolean renderedFirstFrame; - private long joiningDeadlineUs; + private long joiningDeadlineMs; private long droppedFrameAccumulationStartTimeMs; private int droppedFrameCount; private int consecutiveDroppedFrameCount; @@ -206,11 +206,11 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { eventListener); this.frameReleaseTimeHelper = new VideoFrameReleaseTimeHelper(context); this.videoScalingMode = videoScalingMode; - this.allowedJoiningTimeUs = allowedJoiningTimeMs * 1000; + this.allowedJoiningTimeMs = allowedJoiningTimeMs; this.eventListener = eventListener; this.maxDroppedFrameCountToNotify = maxDroppedFrameCountToNotify; deviceNeedsAutoFrcWorkaround = deviceNeedsAutoFrcWorkaround(); - joiningDeadlineUs = -1; + joiningDeadlineMs = -1; currentWidth = -1; currentHeight = -1; currentPixelWidthHeightRatio = -1; @@ -276,8 +276,8 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { adaptiveMaxHeight = 1080; } } - if (joining && allowedJoiningTimeUs > 0) { - joiningDeadlineUs = SystemClock.elapsedRealtime() * 1000L + allowedJoiningTimeUs; + if (joining && allowedJoiningTimeMs > 0) { + joiningDeadlineMs = SystemClock.elapsedRealtime() + allowedJoiningTimeMs; } frameReleaseTimeHelper.enable(); } @@ -287,24 +287,24 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { super.reset(positionUs); renderedFirstFrame = false; consecutiveDroppedFrameCount = 0; - joiningDeadlineUs = -1; + joiningDeadlineMs = -1; } @Override protected boolean isReady() { if (renderedFirstFrame && super.isReady()) { // Ready. If we were joining then we've now joined, so clear the joining deadline. - joiningDeadlineUs = -1; + joiningDeadlineMs = -1; return true; - } else if (joiningDeadlineUs == -1) { + } else if (joiningDeadlineMs == -1) { // Not joining. return false; - } else if (SystemClock.elapsedRealtime() * 1000 < joiningDeadlineUs) { + } else if (SystemClock.elapsedRealtime() < joiningDeadlineMs) { // Joining and still within the joining deadline. return true; } else { // The joining deadline has been exceeded. Give up and clear the deadline. - joiningDeadlineUs = -1; + joiningDeadlineMs = -1; return false; } } @@ -318,7 +318,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { @Override protected void onStopped() { - joiningDeadlineUs = -1; + joiningDeadlineMs = -1; maybeNotifyDroppedFrameCount(); super.onStopped(); } diff --git a/library/src/main/java/com/google/android/exoplayer/MultiSampleSource.java b/library/src/main/java/com/google/android/exoplayer/MultiSampleSource.java index f9fdff3a87..5011028f67 100644 --- a/library/src/main/java/com/google/android/exoplayer/MultiSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/MultiSampleSource.java @@ -61,10 +61,10 @@ public final class MultiSampleSource implements SampleSource { int totalTrackGroupCount = 0; for (SampleSource source : sources) { totalTrackGroupCount += source.getTrackGroups().length; - if (durationUs != C.UNKNOWN_TIME_US) { + if (durationUs != C.UNSET_TIME_US) { long sourceDurationUs = source.getDurationUs(); - durationUs = sourceDurationUs == C.UNKNOWN_TIME_US - ? C.UNKNOWN_TIME_US : Math.max(durationUs, sourceDurationUs); + durationUs = sourceDurationUs == C.UNSET_TIME_US + ? C.UNSET_TIME_US : Math.max(durationUs, sourceDurationUs); } } TrackGroup[] trackGroupArray = new TrackGroup[totalTrackGroupCount]; @@ -125,18 +125,18 @@ public final class MultiSampleSource implements SampleSource { @Override public long getBufferedPositionUs() { - long bufferedPositionUs = durationUs != C.UNKNOWN_TIME_US ? durationUs : Long.MAX_VALUE; + long bufferedPositionUs = durationUs != C.UNSET_TIME_US ? durationUs : Long.MAX_VALUE; for (SampleSource source : enabledSources) { long rendererBufferedPositionUs = source.getBufferedPositionUs(); - if (rendererBufferedPositionUs == C.UNKNOWN_TIME_US) { - return C.UNKNOWN_TIME_US; + if (rendererBufferedPositionUs == C.UNSET_TIME_US) { + return C.UNSET_TIME_US; } else if (rendererBufferedPositionUs == C.END_OF_SOURCE_US) { // This source is fully buffered. } else { bufferedPositionUs = Math.min(bufferedPositionUs, rendererBufferedPositionUs); } } - return bufferedPositionUs == Long.MAX_VALUE ? C.UNKNOWN_TIME_US : bufferedPositionUs; + return bufferedPositionUs == Long.MAX_VALUE ? C.UNSET_TIME_US : bufferedPositionUs; } @Override diff --git a/library/src/main/java/com/google/android/exoplayer/SampleSource.java b/library/src/main/java/com/google/android/exoplayer/SampleSource.java index 53b28f0f0a..68a4f49eab 100644 --- a/library/src/main/java/com/google/android/exoplayer/SampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/SampleSource.java @@ -41,8 +41,8 @@ public interface SampleSource { *
* This method should only be called after the source has been prepared. * - * @return The duration of the source in microseconds, or {@link C#UNKNOWN_TIME_US} if the - * duration is not known. + * @return The duration of the source in microseconds, or {@link C#UNSET_TIME_US} if the duration + * is not known. */ long getDurationUs(); @@ -89,9 +89,9 @@ public interface SampleSource { *
* This method should only be called when at least one track is selected. * - * @return An estimate of the absolute position in microseconds up to which data is buffered, - * or {@link C#END_OF_SOURCE_US} if the track is fully buffered, or {@link C#UNKNOWN_TIME_US} - * if no estimate is available. + * @return An estimate of the absolute position in microseconds up to which data is buffered, or + * {@link C#END_OF_SOURCE_US} if the track is fully buffered, or {@link C#UNSET_TIME_US} if no + * estimate is available. */ long getBufferedPositionUs(); diff --git a/library/src/main/java/com/google/android/exoplayer/SingleSampleSource.java b/library/src/main/java/com/google/android/exoplayer/SingleSampleSource.java index 9189ce820c..27412e94ee 100644 --- a/library/src/main/java/com/google/android/exoplayer/SingleSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/SingleSampleSource.java @@ -138,7 +138,7 @@ public final class SingleSampleSource implements SampleSource, TrackStream, Load if (!newSelections.isEmpty()) { newStreams[0] = this; streamState = STREAM_STATE_SEND_FORMAT; - pendingResetPositionUs = NO_RESET; + pendingResetPositionUs = C.UNSET_TIME_US; maybeStartLoading(); } return newStreams; @@ -183,7 +183,7 @@ public final class SingleSampleSource implements SampleSource, TrackStream, Load @Override public long readReset() { long resetPositionUs = pendingResetPositionUs; - pendingResetPositionUs = NO_RESET; + pendingResetPositionUs = C.UNSET_TIME_US; return resetPositionUs; } diff --git a/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java index 36cbf0819e..1d457c96f1 100644 --- a/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java @@ -225,7 +225,7 @@ public abstract class TrackRenderer implements ExoPlayerComponent { */ /* package */ final void checkForReset() throws ExoPlaybackException { long resetPositionUs = stream.readReset(); - if (resetPositionUs != TrackStream.NO_RESET) { + if (resetPositionUs != C.UNSET_TIME_US) { reset(resetPositionUs); return; } diff --git a/library/src/main/java/com/google/android/exoplayer/TrackStream.java b/library/src/main/java/com/google/android/exoplayer/TrackStream.java index 4712e56a52..1901105cfa 100644 --- a/library/src/main/java/com/google/android/exoplayer/TrackStream.java +++ b/library/src/main/java/com/google/android/exoplayer/TrackStream.java @@ -34,10 +34,6 @@ public interface TrackStream { * A format was read. */ int FORMAT_READ = -3; - /** - * Returned from {@link #readReset()} to indicate no reset is required. - */ - long NO_RESET = Long.MIN_VALUE; /** * Returns whether data is available to be read. @@ -60,7 +56,8 @@ public interface TrackStream { /** * Attempts to read a pending reset. * - * @return If a reset was read then the position after the reset. Else {@link #NO_RESET}. + * @return If a reset was read then the playback position in microseconds after the reset. Else + * {@link C#UNSET_TIME_US}. */ long readReset(); diff --git a/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java b/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java index 34b5db935a..357d2e4db5 100644 --- a/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java +++ b/library/src/main/java/com/google/android/exoplayer/audio/AudioTrack.java @@ -423,8 +423,7 @@ public final class AudioTrack { : multipliedBufferSize > maxAppBufferSize ? maxAppBufferSize : multipliedBufferSize; } - bufferSizeUs = passthrough ? C.UNKNOWN_TIME_US - : framesToDurationUs(pcmBytesToFrames(bufferSize)); + bufferSizeUs = passthrough ? C.UNSET_TIME_US : framesToDurationUs(pcmBytesToFrames(bufferSize)); } /** @@ -501,13 +500,13 @@ public final class AudioTrack { /** * Returns the size of the buffer in microseconds for PCM {@link AudioTrack}s, or - * {@link C#UNKNOWN_TIME_US} for passthrough {@link AudioTrack}s. + * {@link C#UNSET_TIME_US} for passthrough {@link AudioTrack}s. *
* The value returned from this method may change as a result of calling one of the * {@link #configure} methods. * * @return The size of the buffer in microseconds for PCM {@link AudioTrack}s, or - * {@link C#UNKNOWN_TIME_US} for passthrough {@link AudioTrack}s. + * {@link C#UNSET_TIME_US} for passthrough {@link AudioTrack}s. */ public long getBufferSizeUs() { return bufferSizeUs; @@ -1003,7 +1002,7 @@ public final class AudioTrack { boolean needsPassthroughWorkaround) { this.audioTrack = audioTrack; this.needsPassthroughWorkaround = needsPassthroughWorkaround; - stopTimestampUs = -1; + stopTimestampUs = C.UNSET_TIME_US; lastRawPlaybackHeadPosition = 0; rawPlaybackHeadWrapCount = 0; passthroughWorkaroundPauseOffset = 0; @@ -1031,7 +1030,7 @@ public final class AudioTrack { * this method does nothing. */ public void pause() { - if (stopTimestampUs != -1) { + if (stopTimestampUs != C.UNSET_TIME_US) { // We don't want to knock the audio track back into the paused state. return; } @@ -1048,7 +1047,7 @@ public final class AudioTrack { * expressed as a long. */ public long getPlaybackHeadPosition() { - if (stopTimestampUs != -1) { + if (stopTimestampUs != C.UNSET_TIME_US) { // Simulate the playback head position up to the total number of frames submitted. long elapsedTimeSinceStopUs = (SystemClock.elapsedRealtime() * 1000) - stopTimestampUs; long framesSinceStop = (elapsedTimeSinceStopUs * sampleRate) / C.MICROS_PER_SECOND; diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java index 88abe1f867..3fbd9d781e 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java @@ -50,8 +50,6 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call */ public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3; - private static final long NO_RESET_PENDING = Long.MIN_VALUE; - private final Loader loader; private final LoadControl loadControl; private final ChunkSource chunkSource; @@ -128,7 +126,7 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call mediaChunks = new LinkedList<>(); readOnlyMediaChunks = Collections.unmodifiableList(mediaChunks); sampleQueue = new DefaultTrackOutput(loadControl.getAllocator()); - pendingResetPositionUs = NO_RESET_PENDING; + pendingResetPositionUs = C.UNSET_TIME_US; } // SampleSource implementation. @@ -279,7 +277,7 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call pendingReset = false; return lastSeekPositionUs; } - return TrackStream.NO_RESET; + return C.UNSET_TIME_US; } @Override @@ -430,14 +428,13 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call lastPreferredQueueSizeEvaluationTimeMs = now; } - long nextLoadPositionUs = getNextLoadPositionUs(); - boolean isNext = loadControl.update(this, downstreamPositionUs, nextLoadPositionUs, false); + boolean isNext = loadControl.update(this, downstreamPositionUs, getNextLoadPositionUs(), false); if (!isNext) { return; } chunkSource.getNextChunk(mediaChunks.isEmpty() ? null : mediaChunks.getLast(), - pendingResetPositionUs != NO_RESET_PENDING ? pendingResetPositionUs : downstreamPositionUs, + pendingResetPositionUs != C.UNSET_TIME_US ? pendingResetPositionUs : downstreamPositionUs, nextChunkHolder); boolean endOfStream = nextChunkHolder.endOfStream; Chunk nextLoadable = nextChunkHolder.chunk; @@ -445,7 +442,7 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call if (endOfStream) { loadingFinished = true; - loadControl.update(this, downstreamPositionUs, -1, false); + loadControl.update(this, downstreamPositionUs, C.UNSET_TIME_US, false); return; } @@ -460,7 +457,7 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call mediaChunk.init(sampleQueue); mediaChunks.add(mediaChunk); if (isPendingReset()) { - pendingResetPositionUs = NO_RESET_PENDING; + pendingResetPositionUs = C.UNSET_TIME_US; } eventDispatcher.loadStarted(mediaChunk.dataSpec.length, mediaChunk.type, mediaChunk.trigger, mediaChunk.format, mediaChunk.startTimeUs, mediaChunk.endTimeUs); @@ -481,7 +478,7 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call if (isPendingReset()) { return pendingResetPositionUs; } else { - return loadingFinished ? -1 : mediaChunks.getLast().endTimeUs; + return loadingFinished ? C.UNSET_TIME_US : mediaChunks.getLast().endTimeUs; } } @@ -514,7 +511,7 @@ public class ChunkSampleSource implements SampleSource, TrackStream, Loader.Call } private boolean isPendingReset() { - return pendingResetPositionUs != NO_RESET_PENDING; + return pendingResetPositionUs != C.UNSET_TIME_US; } } diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSource.java index ca0f1815f3..5d20b1f86d 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSource.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSource.java @@ -56,8 +56,8 @@ public interface ChunkSource { *
* This method should only be called after the source has been prepared.
*
- * @return The duration of the source in microseconds, or {@link C#UNKNOWN_TIME_US} if the
- * duration is unknown.
+ * @return The duration of the source in microseconds, or {@link C#UNSET_TIME_US} if the duration
+ * is unknown.
*/
long getDurationUs();
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java b/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java
index 0858a616d5..6b8edf0ffc 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java
@@ -329,7 +329,7 @@ public class DashChunkSource implements ChunkSource {
private void initForManifest(MediaPresentationDescription manifest) {
Period period = manifest.getPeriod(0);
live = currentManifest.dynamic;
- durationUs = live ? C.UNKNOWN_TIME_US : currentManifest.duration * 1000;
+ durationUs = live ? C.UNSET_TIME_US : currentManifest.duration * 1000;
for (int i = 0; i < period.adaptationSets.size(); i++) {
AdaptationSet adaptationSet = period.adaptationSets.get(i);
@@ -439,7 +439,7 @@ public class DashChunkSource implements ChunkSource {
private static long getPeriodDurationUs(MediaPresentationDescription manifest, int index) {
long durationMs = manifest.getPeriodDuration(index);
if (durationMs == -1) {
- return C.UNKNOWN_TIME_US;
+ return C.UNSET_TIME_US;
} else {
return durationMs * 1000;
}
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashSegmentIndex.java b/library/src/main/java/com/google/android/exoplayer/dash/DashSegmentIndex.java
index 95de1cd0d9..d2453f03ef 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/DashSegmentIndex.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/DashSegmentIndex.java
@@ -37,7 +37,7 @@ public interface DashSegmentIndex {
*
* @param timeUs The time in microseconds.
* @param periodDurationUs The duration of the enclosing period in microseconds, or
- * {@link C#UNKNOWN_TIME_US} if the period's duration is not yet known.
+ * {@link C#UNSET_TIME_US} if the period's duration is not yet known.
* @return The segment number of the corresponding segment.
*/
int getSegmentNum(long timeUs, long periodDurationUs);
@@ -55,7 +55,7 @@ public interface DashSegmentIndex {
*
* @param segmentNum The segment number.
* @param periodDurationUs The duration of the enclosing period in microseconds, or
- * {@link C#UNKNOWN_TIME_US} if the period's duration is not yet known.
+ * {@link C#UNSET_TIME_US} if the period's duration is not yet known.
* @return The duration of the segment, in microseconds.
*/
long getDurationUs(int segmentNum, long periodDurationUs);
@@ -83,7 +83,7 @@ public interface DashSegmentIndex {
* must manually determine the window of currently available segments.
*
* @param periodDurationUs The duration of the enclosing period in microseconds, or
- * {@link C#UNKNOWN_TIME_US} if the period's duration is not yet known.
+ * {@link C#UNSET_TIME_US} if the period's duration is not yet known.
* @return The segment number of the last segment, or {@link #INDEX_UNBOUNDED}.
*/
int getLastSegmentNum(long periodDurationUs);
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/SegmentBase.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/SegmentBase.java
index f770f304ba..c0c4cf0517 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/SegmentBase.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/SegmentBase.java
@@ -342,7 +342,7 @@ public abstract class SegmentBase {
public int getLastSegmentNum(long periodDurationUs) {
if (segmentTimeline != null) {
return segmentTimeline.size() + startNumber - 1;
- } else if (periodDurationUs == C.UNKNOWN_TIME_US) {
+ } else if (periodDurationUs == C.UNSET_TIME_US) {
return DashSegmentIndex.INDEX_UNBOUNDED;
} else {
long durationUs = (duration * C.MICROS_PER_SECOND) / timescale;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
index 92c6883a36..b36ec47d0e 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
@@ -108,7 +108,6 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT_LIVE = 6;
private static final int MIN_RETRY_COUNT_DEFAULT_FOR_MEDIA = -1;
- private static final long NO_RESET_PENDING = Long.MIN_VALUE;
/**
* Default extractor classes in priority order. They are referred to indirectly so that it is
@@ -326,7 +325,7 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
}
extractorHolder = new ExtractorHolder(extractors, this);
sampleQueues = new SparseArray<>();
- pendingResetPositionUs = NO_RESET_PENDING;
+ pendingResetPositionUs = C.UNSET_TIME_US;
}
// SampleSource implementation.
@@ -348,7 +347,7 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
}
tracks = new TrackGroupArray(trackArray);
if (minLoadableRetryCount == MIN_RETRY_COUNT_DEFAULT_FOR_MEDIA && !seekMap.isSeekable()
- && durationUs == C.UNKNOWN_TIME_US) {
+ && durationUs == C.UNSET_TIME_US) {
loader.setMinRetryCount(DEFAULT_MIN_LOADABLE_RETRY_COUNT_LIVE);
}
prepared = true;
@@ -467,7 +466,7 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
pendingResets[track] = false;
return lastSeekPositionUs;
}
- return TrackStream.NO_RESET;
+ return C.UNSET_TIME_US;
}
/* package */ int readData(int track, FormatHolder formatHolder, DecoderInputBuffer buffer) {
@@ -598,13 +597,13 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
requestedBufferSize);
if (prepared) {
Assertions.checkState(isPendingReset());
- if (durationUs != C.UNKNOWN_TIME_US && pendingResetPositionUs >= durationUs) {
+ if (durationUs != C.UNSET_TIME_US && pendingResetPositionUs >= durationUs) {
loadingFinished = true;
- pendingResetPositionUs = NO_RESET_PENDING;
+ pendingResetPositionUs = C.UNSET_TIME_US;
return;
}
loadable.setLoadPosition(seekMap.getPosition(pendingResetPositionUs));
- pendingResetPositionUs = NO_RESET_PENDING;
+ pendingResetPositionUs = C.UNSET_TIME_US;
}
currentLoadExtractedSamples = false;
loader.startLoading(loadable, this);
@@ -620,7 +619,7 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
sampleQueues.valueAt(i).clear();
}
loadable.setLoadPosition(0);
- } else if (!seekMap.isSeekable() && durationUs == C.UNKNOWN_TIME_US) {
+ } else if (!seekMap.isSeekable() && durationUs == C.UNSET_TIME_US) {
// We're playing a non-seekable stream with unknown duration. Assume it's live, and
// therefore that the data at the uri is a continuously shifting window of the latest
// available media. For this case there's no way to continue loading from where a previous
@@ -665,7 +664,7 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu
}
private boolean isPendingReset() {
- return pendingResetPositionUs != NO_RESET_PENDING;
+ return pendingResetPositionUs != C.UNSET_TIME_US;
}
private boolean isLoadableExceptionFatal(IOException e) {
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/SeekMap.java b/library/src/main/java/com/google/android/exoplayer/extractor/SeekMap.java
index aa1f353d73..efdbebaa45 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/SeekMap.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/SeekMap.java
@@ -30,7 +30,7 @@ public interface SeekMap {
private final long durationUs;
/**
- * @param durationUs The duration of the stream in microseconds, or {@link C#UNKNOWN_TIME_US} if
+ * @param durationUs The duration of the stream in microseconds, or {@link C#UNSET_TIME_US} if
* the duration is unknown.
*/
public Unseekable(long durationUs) {
@@ -67,7 +67,7 @@ public interface SeekMap {
/**
* Returns the duration of the stream in microseconds.
*
- * @return The duration of the stream in microseconds, or {@link C#UNKNOWN_TIME_US} if the
+ * @return The duration of the stream in microseconds, or {@link C#UNSET_TIME_US} if the
* duration is unknown.
*/
long getDurationUs();
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/flv/ScriptTagPayloadReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/flv/ScriptTagPayloadReader.java
index 440ff798a2..9e8f23790f 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/flv/ScriptTagPayloadReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/flv/ScriptTagPayloadReader.java
@@ -50,7 +50,7 @@ import java.util.Map;
*/
public ScriptTagPayloadReader(TrackOutput output) {
super(output);
- durationUs = C.UNKNOWN_TIME_US;
+ durationUs = C.UNSET_TIME_US;
}
public long getDurationUs() {
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mkv/MatroskaExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/mkv/MatroskaExtractor.java
index fb60b6fe30..4a609e301c 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/mkv/MatroskaExtractor.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/mkv/MatroskaExtractor.java
@@ -189,9 +189,9 @@ public final class MatroskaExtractor implements Extractor {
private long segmentContentPosition = UNKNOWN;
private long segmentContentSize = UNKNOWN;
- private long timecodeScale = C.UNKNOWN_TIME_US;
- private long durationTimecode = C.UNKNOWN_TIME_US;
- private long durationUs = C.UNKNOWN_TIME_US;
+ private long timecodeScale = C.UNSET_TIME_US;
+ private long durationTimecode = C.UNSET_TIME_US;
+ private long durationUs = C.UNSET_TIME_US;
// The track corresponding to the current TrackEntry element, or null.
private Track currentTrack;
@@ -417,11 +417,11 @@ public final class MatroskaExtractor implements Extractor {
/* package */ void endMasterElement(int id) throws ParserException {
switch (id) {
case ID_SEGMENT_INFO:
- if (timecodeScale == C.UNKNOWN_TIME_US) {
+ if (timecodeScale == C.UNSET_TIME_US) {
// timecodeScale was omitted. Use the default value.
timecodeScale = 1000000;
}
- if (durationTimecode != C.UNKNOWN_TIME_US) {
+ if (durationTimecode != C.UNSET_TIME_US) {
durationUs = scaleTimecodeToUs(durationTimecode);
}
return;
@@ -987,7 +987,7 @@ public final class MatroskaExtractor implements Extractor {
* information was missing or incomplete.
*/
private SeekMap buildSeekMap() {
- if (segmentContentPosition == UNKNOWN || durationUs == C.UNKNOWN_TIME_US
+ if (segmentContentPosition == UNKNOWN || durationUs == C.UNSET_TIME_US
|| cueTimesUs == null || cueTimesUs.size() == 0
|| cueClusterPositions == null || cueClusterPositions.size() != cueTimesUs.size()) {
// Cues information is missing or incomplete.
@@ -1043,7 +1043,7 @@ public final class MatroskaExtractor implements Extractor {
}
private long scaleTimecodeToUs(long unscaledTimecode) throws ParserException {
- if (timecodeScale == C.UNKNOWN_TIME_US) {
+ if (timecodeScale == C.UNSET_TIME_US) {
throw new ParserException("Can't scale timecode prior to timecodeScale being set.");
}
return Util.scaleLargeTimestamp(unscaledTimecode, timecodeScale, 1000);
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mp3/ConstantBitrateSeeker.java b/library/src/main/java/com/google/android/exoplayer/extractor/mp3/ConstantBitrateSeeker.java
index bf83902410..b0face3f04 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/mp3/ConstantBitrateSeeker.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/mp3/ConstantBitrateSeeker.java
@@ -31,17 +31,17 @@ import com.google.android.exoplayer.C;
public ConstantBitrateSeeker(long firstFramePosition, int bitrate, long inputLength) {
this.firstFramePosition = firstFramePosition;
this.bitrate = bitrate;
- durationUs = inputLength == C.LENGTH_UNBOUNDED ? C.UNKNOWN_TIME_US : getTimeUs(inputLength);
+ durationUs = inputLength == C.LENGTH_UNBOUNDED ? C.UNSET_TIME_US : getTimeUs(inputLength);
}
@Override
public boolean isSeekable() {
- return durationUs != C.UNKNOWN_TIME_US;
+ return durationUs != C.UNSET_TIME_US;
}
@Override
public long getPosition(long timeUs) {
- return durationUs == C.UNKNOWN_TIME_US ? 0
+ return durationUs == C.UNSET_TIME_US ? 0
: firstFramePosition + (timeUs * bitrate) / (C.MICROS_PER_SECOND * BITS_PER_BYTE);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java
index 03596657a7..a4685c217e 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java
@@ -64,7 +64,7 @@ import java.util.List;
long movieTimescale = parseMvhd(mvhd.data);
long durationUs;
if (duration == -1) {
- durationUs = C.UNKNOWN_TIME_US;
+ durationUs = C.UNSET_TIME_US;
} else {
durationUs = Util.scaleLargeTimestamp(duration, C.MICROS_PER_SECOND, movieTimescale);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/FragmentedMp4Extractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/FragmentedMp4Extractor.java
index 51f06f6bdf..a400ace752 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/FragmentedMp4Extractor.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/FragmentedMp4Extractor.java
@@ -143,7 +143,7 @@ public final class FragmentedMp4Extractor implements Extractor {
extendedTypeScratch = new byte[16];
containerAtoms = new Stack<>();
trackBundles = new SparseArray<>();
- durationUs = C.UNKNOWN_TIME_US;
+ durationUs = C.UNSET_TIME_US;
enterReadingAtomHeaderState();
}
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/Mp4Extractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/Mp4Extractor.java
index 4e1bf762f5..8a8374b5ed 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/Mp4Extractor.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/Mp4Extractor.java
@@ -295,7 +295,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
* Updates the stored track metadata to reflect the contents of the specified moov atom.
*/
private void processMoovAtom(ContainerAtom moov) throws ParserException {
- long durationUs = C.UNKNOWN_TIME_US;
+ long durationUs = C.UNSET_TIME_US;
List
* This method should only be called after the source has been prepared.
*
@@ -660,7 +660,7 @@ public class HlsChunkSource {
variantLastPlaylistLoadTimesMs[variantIndex] = SystemClock.elapsedRealtime();
variantPlaylists[variantIndex] = mediaPlaylist;
live |= mediaPlaylist.live;
- durationUs = live ? C.UNKNOWN_TIME_US : mediaPlaylist.durationUs;
+ durationUs = live ? C.UNSET_TIME_US : mediaPlaylist.durationUs;
}
private boolean allEnabledVariantsBlacklisted() {
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
index 8c2234f7c0..a9224f6d7d 100644
--- a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
@@ -52,8 +52,6 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
*/
public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3;
- private static final long NO_RESET_PENDING = Long.MIN_VALUE;
-
private static final int PRIMARY_TYPE_NONE = 0;
private static final int PRIMARY_TYPE_TEXT = 1;
private static final int PRIMARY_TYPE_AUDIO = 2;
@@ -111,7 +109,7 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
this.chunkSource = chunkSource;
this.loadControl = loadControl;
this.bufferSizeContribution = bufferSizeContribution;
- this.pendingResetPositionUs = NO_RESET_PENDING;
+ this.pendingResetPositionUs = C.UNSET_TIME_US;
loader = new Loader("Loader:HLS", minLoadableRetryCount);
eventDispatcher = new EventDispatcher(eventHandler, eventListener, eventSourceId);
extractors = new LinkedList<>();
@@ -303,7 +301,7 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
pendingResets[group] = false;
return lastSeekPositionUs;
}
- return TrackStream.NO_RESET;
+ return C.UNSET_TIME_US;
}
/* package */ int readData(int group, FormatHolder formatHolder, DecoderInputBuffer buffer) {
@@ -533,10 +531,8 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
if (containerFormat == null) {
return sampleFormat;
}
- int width = containerFormat.width == -1 ? Format.NO_VALUE : containerFormat.width;
- int height = containerFormat.height == -1 ? Format.NO_VALUE : containerFormat.height;
- return sampleFormat.copyWithContainerInfo(containerFormat.id, containerFormat.bitrate, width,
- height, containerFormat.language);
+ return sampleFormat.copyWithContainerInfo(containerFormat.id, containerFormat.bitrate,
+ containerFormat.width, containerFormat.height, containerFormat.language);
}
/**
@@ -630,7 +626,7 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
}
chunkSource.getNextChunk(previousTsLoadable,
- pendingResetPositionUs != NO_RESET_PENDING ? pendingResetPositionUs : downstreamPositionUs,
+ pendingResetPositionUs != C.UNSET_TIME_US ? pendingResetPositionUs : downstreamPositionUs,
nextChunkHolder);
boolean endOfStream = nextChunkHolder.endOfStream;
Chunk nextLoadable = nextChunkHolder.chunk;
@@ -639,7 +635,7 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
if (endOfStream) {
loadingFinished = true;
if (prepared) {
- loadControl.update(this, downstreamPositionUs, -1, false);
+ loadControl.update(this, downstreamPositionUs, C.UNSET_TIME_US, false);
}
return;
}
@@ -653,7 +649,7 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
if (isTsChunk(currentLoadable)) {
TsChunk tsChunk = (TsChunk) currentLoadable;
if (isPendingReset()) {
- pendingResetPositionUs = NO_RESET_PENDING;
+ pendingResetPositionUs = C.UNSET_TIME_US;
}
HlsExtractorWrapper extractorWrapper = tsChunk.extractorWrapper;
if (extractors.isEmpty() || extractors.getLast() != extractorWrapper) {
@@ -682,8 +678,8 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
if (isPendingReset()) {
return pendingResetPositionUs;
} else {
- return loadingFinished ? -1 : (currentTsLoadable != null ? currentTsLoadable.endTimeUs
- : previousTsLoadable.endTimeUs);
+ return loadingFinished ? C.UNSET_TIME_US : (currentTsLoadable != null
+ ? currentTsLoadable.endTimeUs : previousTsLoadable.endTimeUs);
}
}
@@ -692,7 +688,7 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback {
}
private boolean isPendingReset() {
- return pendingResetPositionUs != NO_RESET_PENDING;
+ return pendingResetPositionUs != C.UNSET_TIME_US;
}
private final class TrackStreamImpl implements TrackStream {
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/WebvttExtractor.java b/library/src/main/java/com/google/android/exoplayer/hls/WebvttExtractor.java
index 418390a06d..080f9f3134 100644
--- a/library/src/main/java/com/google/android/exoplayer/hls/WebvttExtractor.java
+++ b/library/src/main/java/com/google/android/exoplayer/hls/WebvttExtractor.java
@@ -76,7 +76,7 @@ import java.util.regex.Pattern;
@Override
public void init(ExtractorOutput output) {
this.output = output;
- output.seekMap(new SeekMap.Unseekable(C.UNKNOWN_TIME_US));
+ output.seekMap(new SeekMap.Unseekable(C.UNSET_TIME_US));
}
@Override
diff --git a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java
index 1cfe598915..3e5bdf1135 100644
--- a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java
@@ -304,7 +304,7 @@ public class SmoothStreamingChunkSource implements ChunkSource {
extractorWrappers = new ChunkExtractorWrapper[formats.length];
for (int j = 0; j < formats.length; j++) {
int nalUnitLengthFieldLength = streamElementType == C.TRACK_TYPE_VIDEO ? 4 : -1;
- Track track = new Track(j, streamElementType, timescale, C.UNKNOWN_TIME_US, durationUs,
+ Track track = new Track(j, streamElementType, timescale, C.UNSET_TIME_US, durationUs,
formats[j], trackEncryptionBoxes, nalUnitLengthFieldLength, null, null);
FragmentedMp4Extractor extractor = new FragmentedMp4Extractor(
FragmentedMp4Extractor.FLAG_WORKAROUND_EVERY_VIDEO_FRAME_IS_SYNC_FRAME
diff --git a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java
index 4187888407..e9fa65396f 100644
--- a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java
+++ b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingManifest.java
@@ -65,14 +65,14 @@ public class SmoothStreamingManifest {
public final StreamElement[] streamElements;
/**
- * The overall presentation duration of the media in microseconds, or {@link C#UNKNOWN_TIME_US}
+ * The overall presentation duration of the media in microseconds, or {@link C#UNSET_TIME_US}
* if the duration is unknown.
*/
public final long durationUs;
/**
* The length of the trailing window for a live broadcast in microseconds, or
- * {@link C#UNKNOWN_TIME_US} if the stream is not live or if the window length is unspecified.
+ * {@link C#UNSET_TIME_US} if the stream is not live or if the window length is unspecified.
*/
public final long dvrWindowLengthUs;
@@ -101,9 +101,9 @@ public class SmoothStreamingManifest {
this.isLive = isLive;
this.protectionElement = protectionElement;
this.streamElements = streamElements;
- dvrWindowLengthUs = dvrWindowLength == 0 ? C.UNKNOWN_TIME_US
+ dvrWindowLengthUs = dvrWindowLength == 0 ? C.UNSET_TIME_US
: Util.scaleLargeTimestamp(dvrWindowLength, C.MICROS_PER_SECOND, timescale);
- durationUs = duration == 0 ? C.UNKNOWN_TIME_US
+ durationUs = duration == 0 ? C.UNSET_TIME_US
: Util.scaleLargeTimestamp(duration, C.MICROS_PER_SECOND, timescale);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java
index 87ebafdfd0..aa8686f357 100644
--- a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java
+++ b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java
@@ -341,11 +341,11 @@ public final class Eia608TrackRenderer extends TrackRenderer implements Callback
private void clearPendingBuffer() {
buffer.clear();
- buffer.timeUs = C.UNKNOWN_TIME_US;
+ buffer.timeUs = C.UNSET_TIME_US;
}
private boolean isBufferPending() {
- return buffer.timeUs != C.UNKNOWN_TIME_US;
+ return buffer.timeUs != C.UNSET_TIME_US;
}
}