diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DebugTrackRenderer.java b/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DebugTrackRenderer.java
index 498e087d12..8093bad814 100644
--- a/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DebugTrackRenderer.java
+++ b/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DebugTrackRenderer.java
@@ -98,12 +98,12 @@ import android.widget.TextView;
@Override
protected long getDurationUs() {
- return TrackRenderer.MATCH_LONGEST;
+ return TrackRenderer.MATCH_LONGEST_US;
}
@Override
protected long getBufferedPositionUs() {
- return TrackRenderer.END_OF_TRACK;
+ return TrackRenderer.END_OF_TRACK_US;
}
@Override
diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java
index 15288280aa..244a31eaf5 100644
--- a/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java
+++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java
@@ -316,14 +316,16 @@ public interface ExoPlayer {
public void seekTo(int positionMs);
/**
- * Stops playback.
+ * Stops playback. Use {@code setPlayWhenReady(false)} rather than this method if the intention
+ * is to pause playback.
*
* Calling this method will cause the playback state to transition to
- * {@link ExoPlayer#STATE_IDLE}. Note that the player instance can still be used, and that
- * {@link ExoPlayer#release()} must still be called on the player should it no longer be required.
+ * {@link ExoPlayer#STATE_IDLE}. The player instance can still be used, and
+ * {@link ExoPlayer#release()} must still be called on the player if it's no longer required.
*
- * Use {@code setPlayWhenReady(false)} rather than this method if the intention is to pause
- * playback.
+ * Calling this method does not reset the playback position. If this player instance will be used
+ * to play another video from its start, then {@code seekTo(0)} should be called after stopping
+ * the player and before preparing it for the next video.
*/
public void stop();
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 193dba6646..9dc6228fa9 100644
--- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java
+++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java
@@ -95,8 +95,8 @@ import java.util.List;
}
this.state = ExoPlayer.STATE_IDLE;
- this.durationUs = TrackRenderer.UNKNOWN_TIME;
- this.bufferedPositionUs = TrackRenderer.UNKNOWN_TIME;
+ this.durationUs = TrackRenderer.UNKNOWN_TIME_US;
+ this.bufferedPositionUs = TrackRenderer.UNKNOWN_TIME_US;
mediaClock = new MediaClock();
enabledRenderers = new ArrayList(rendererEnabledFlags.length);
@@ -122,12 +122,12 @@ import java.util.List;
}
public int getBufferedPosition() {
- return bufferedPositionUs == TrackRenderer.UNKNOWN_TIME ? ExoPlayer.UNKNOWN_TIME
+ return bufferedPositionUs == TrackRenderer.UNKNOWN_TIME_US ? ExoPlayer.UNKNOWN_TIME
: (int) (bufferedPositionUs / 1000);
}
public int getDuration() {
- return durationUs == TrackRenderer.UNKNOWN_TIME ? ExoPlayer.UNKNOWN_TIME
+ return durationUs == TrackRenderer.UNKNOWN_TIME_US ? ExoPlayer.UNKNOWN_TIME
: (int) (durationUs / 1000);
}
@@ -287,14 +287,14 @@ import java.util.List;
enabledRenderers.add(renderer);
isEnded = isEnded && renderer.isEnded();
allRenderersReadyOrEnded = allRenderersReadyOrEnded && rendererReadyOrEnded(renderer);
- if (durationUs == TrackRenderer.UNKNOWN_TIME) {
+ if (durationUs == TrackRenderer.UNKNOWN_TIME_US) {
// We've already encountered a track for which the duration is unknown, so the media
// duration is unknown regardless of the duration of this track.
} else {
long trackDurationUs = renderer.getDurationUs();
- if (trackDurationUs == TrackRenderer.UNKNOWN_TIME) {
- durationUs = TrackRenderer.UNKNOWN_TIME;
- } else if (trackDurationUs == TrackRenderer.MATCH_LONGEST) {
+ if (trackDurationUs == TrackRenderer.UNKNOWN_TIME_US) {
+ durationUs = TrackRenderer.UNKNOWN_TIME_US;
+ } else if (trackDurationUs == TrackRenderer.MATCH_LONGEST_US) {
// Do nothing.
} else {
durationUs = Math.max(durationUs, trackDurationUs);
@@ -331,11 +331,11 @@ import java.util.List;
long rendererBufferedPositionUs = renderer.getBufferedPositionUs();
long minBufferDurationUs = rebuffering ? minRebufferUs : minBufferUs;
return minBufferDurationUs <= 0
- || rendererBufferedPositionUs == TrackRenderer.UNKNOWN_TIME
- || rendererBufferedPositionUs == TrackRenderer.END_OF_TRACK
+ || rendererBufferedPositionUs == TrackRenderer.UNKNOWN_TIME_US
+ || rendererBufferedPositionUs == TrackRenderer.END_OF_TRACK_US
|| rendererBufferedPositionUs >= positionUs + minBufferDurationUs
- || (rendererDurationUs != TrackRenderer.UNKNOWN_TIME
- && rendererDurationUs != TrackRenderer.MATCH_LONGEST
+ || (rendererDurationUs != TrackRenderer.UNKNOWN_TIME_US
+ && rendererDurationUs != TrackRenderer.MATCH_LONGEST_US
&& rendererBufferedPositionUs >= rendererDurationUs);
}
@@ -384,7 +384,7 @@ import java.util.List;
private void doSomeWork() throws ExoPlaybackException {
TraceUtil.beginSection("doSomeWork");
long operationStartTimeMs = SystemClock.elapsedRealtime();
- long bufferedPositionUs = durationUs != TrackRenderer.UNKNOWN_TIME ? durationUs
+ long bufferedPositionUs = durationUs != TrackRenderer.UNKNOWN_TIME_US ? durationUs
: Long.MAX_VALUE;
boolean isEnded = true;
boolean allRenderersReadyOrEnded = true;
@@ -398,17 +398,17 @@ import java.util.List;
isEnded = isEnded && renderer.isEnded();
allRenderersReadyOrEnded = allRenderersReadyOrEnded && rendererReadyOrEnded(renderer);
- if (bufferedPositionUs == TrackRenderer.UNKNOWN_TIME) {
+ if (bufferedPositionUs == TrackRenderer.UNKNOWN_TIME_US) {
// We've already encountered a track for which the buffered position is unknown. Hence the
// media buffer position unknown regardless of the buffered position of this track.
} else {
long rendererDurationUs = renderer.getDurationUs();
long rendererBufferedPositionUs = renderer.getBufferedPositionUs();
- if (rendererBufferedPositionUs == TrackRenderer.UNKNOWN_TIME) {
- bufferedPositionUs = TrackRenderer.UNKNOWN_TIME;
- } else if (rendererBufferedPositionUs == TrackRenderer.END_OF_TRACK
- || (rendererDurationUs != TrackRenderer.UNKNOWN_TIME
- && rendererDurationUs != TrackRenderer.MATCH_LONGEST
+ if (rendererBufferedPositionUs == TrackRenderer.UNKNOWN_TIME_US) {
+ bufferedPositionUs = TrackRenderer.UNKNOWN_TIME_US;
+ } else if (rendererBufferedPositionUs == TrackRenderer.END_OF_TRACK_US
+ || (rendererDurationUs != TrackRenderer.UNKNOWN_TIME_US
+ && rendererDurationUs != TrackRenderer.MATCH_LONGEST_US
&& rendererBufferedPositionUs >= rendererDurationUs)) {
// This track is fully buffered.
} else {
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 bc1ee49a95..908664495f 100644
--- a/library/src/main/java/com/google/android/exoplayer/FrameworkSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/FrameworkSampleSource.java
@@ -72,7 +72,7 @@ public final class FrameworkSampleSource implements SampleSource {
for (int i = 0; i < trackStates.length; i++) {
android.media.MediaFormat format = extractor.getTrackFormat(i);
long duration = format.containsKey(android.media.MediaFormat.KEY_DURATION) ?
- format.getLong(android.media.MediaFormat.KEY_DURATION) : TrackRenderer.UNKNOWN_TIME;
+ format.getLong(android.media.MediaFormat.KEY_DURATION) : TrackRenderer.UNKNOWN_TIME_US;
String mime = format.getString(android.media.MediaFormat.KEY_MIME);
trackInfos[i] = new TrackInfo(mime, duration);
}
@@ -188,7 +188,7 @@ public final class FrameworkSampleSource implements SampleSource {
Assertions.checkState(prepared);
long bufferedDurationUs = extractor.getCachedDuration();
if (bufferedDurationUs == -1) {
- return TrackRenderer.UNKNOWN_TIME;
+ return TrackRenderer.UNKNOWN_TIME_US;
} else {
return extractor.getSampleTime() + bufferedDurationUs;
}
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 14a83d2198..add1fa0015 100644
--- a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java
+++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java
@@ -340,7 +340,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer {
@Override
protected long getBufferedPositionUs() {
long sourceBufferedPosition = source.getBufferedPositionUs();
- return sourceBufferedPosition == UNKNOWN_TIME || sourceBufferedPosition == END_OF_TRACK
+ return sourceBufferedPosition == UNKNOWN_TIME_US || sourceBufferedPosition == END_OF_TRACK_US
? sourceBufferedPosition : Math.max(sourceBufferedPosition, getCurrentPositionUs());
}
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 56b20bf8a7..fc29ef1ad5 100644
--- a/library/src/main/java/com/google/android/exoplayer/SampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/SampleSource.java
@@ -147,8 +147,8 @@ public interface SampleSource {
* This method should not be called until after the source has been successfully prepared.
*
* @return An estimate of the absolute position in micro-seconds up to which data is buffered,
- * or {@link TrackRenderer#END_OF_TRACK} if data is buffered to the end of the stream, or
- * {@link TrackRenderer#UNKNOWN_TIME} if no estimate is available.
+ * or {@link TrackRenderer#END_OF_TRACK_US} if data is buffered to the end of the stream, or
+ * {@link TrackRenderer#UNKNOWN_TIME_US} if no estimate is available.
*/
public long getBufferedPositionUs();
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 a8c08cf4f0..4abe763a7e 100644
--- a/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java
+++ b/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java
@@ -67,16 +67,16 @@ public abstract class TrackRenderer implements ExoPlayerComponent {
/**
* Represents an unknown time or duration.
*/
- public static final long UNKNOWN_TIME = -1;
+ public static final long UNKNOWN_TIME_US = -1;
/**
* Represents a time or duration that should match the duration of the longest track whose
* duration is known.
*/
- public static final long MATCH_LONGEST = -2;
+ public static final long MATCH_LONGEST_US = -2;
/**
* Represents the time of the end of the track.
*/
- public static final long END_OF_TRACK = -3;
+ public static final long END_OF_TRACK_US = -3;
private int state;
@@ -301,9 +301,9 @@ public abstract class TrackRenderer implements ExoPlayerComponent {
* This method may be called when the renderer is in the following states:
* {@link #STATE_PREPARED}, {@link #STATE_ENABLED}, {@link #STATE_STARTED}
*
- * @return The duration of the track in micro-seconds, or {@link #MATCH_LONGEST} if
+ * @return The duration of the track in micro-seconds, or {@link #MATCH_LONGEST_US} if
* the track's duration should match that of the longest track whose duration is known, or
- * or {@link #UNKNOWN_TIME} if the duration is not known.
+ * or {@link #UNKNOWN_TIME_US} if the duration is not known.
*/
protected abstract long getDurationUs();
@@ -324,8 +324,8 @@ public abstract class TrackRenderer implements ExoPlayerComponent {
* {@link #STATE_ENABLED}, {@link #STATE_STARTED}
*
* @return An estimate of the absolute position in micro-seconds up to which data is buffered,
- * or {@link #END_OF_TRACK} if the track is fully buffered, or {@link #UNKNOWN_TIME} if no
- * estimate is available.
+ * or {@link #END_OF_TRACK_US} if the track is fully buffered, or {@link #UNKNOWN_TIME_US} if
+ * no estimate is available.
*/
protected abstract long getBufferedPositionUs();
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/Chunk.java b/library/src/main/java/com/google/android/exoplayer/chunk/Chunk.java
index 72a95232c5..a2afeb774e 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/Chunk.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/Chunk.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.chunk;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.upstream.Allocation;
import com.google.android.exoplayer.upstream.Allocator;
import com.google.android.exoplayer.upstream.DataSource;
@@ -89,8 +90,8 @@ public abstract class Chunk implements Loadable {
/**
* Gets the length of the chunk in bytes.
*
- * @return The length of the chunk in bytes, or {@value DataSpec#LENGTH_UNBOUNDED} if the length
- * has yet to be determined.
+ * @return The length of the chunk in bytes, or {@link C#LENGTH_UNBOUNDED} if the length has yet
+ * to be determined.
*/
public final long getLength() {
return dataSourceStream.getLength();
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 40e1544bcc..860de3c179 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
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.chunk;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.FormatHolder;
import com.google.android.exoplayer.LoadControl;
import com.google.android.exoplayer.MediaFormat;
@@ -22,7 +23,6 @@ import com.google.android.exoplayer.SampleHolder;
import com.google.android.exoplayer.SampleSource;
import com.google.android.exoplayer.TrackInfo;
import com.google.android.exoplayer.TrackRenderer;
-import com.google.android.exoplayer.upstream.DataSpec;
import com.google.android.exoplayer.upstream.Loader;
import com.google.android.exoplayer.util.Assertions;
@@ -383,14 +383,14 @@ public class ChunkSampleSource implements SampleSource, Loader.Listener {
if (currentLoadable != null && mediaChunk == currentLoadable) {
// Linearly interpolate partially-fetched chunk times.
long chunkLength = mediaChunk.getLength();
- if (chunkLength != DataSpec.LENGTH_UNBOUNDED) {
+ if (chunkLength != C.LENGTH_UNBOUNDED) {
return mediaChunk.startTimeUs + ((mediaChunk.endTimeUs - mediaChunk.startTimeUs) *
mediaChunk.bytesLoaded()) / chunkLength;
} else {
return mediaChunk.startTimeUs;
}
} else if (mediaChunk.isLastChunk()) {
- return TrackRenderer.END_OF_TRACK;
+ return TrackRenderer.END_OF_TRACK_US;
} else {
return mediaChunk.endTimeUs;
}
diff --git a/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java
index 6f1e6f96ca..b281459d4d 100644
--- a/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java
+++ b/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java
@@ -230,7 +230,7 @@ public class TextTrackRenderer extends TrackRenderer implements Callback {
@Override
protected long getBufferedPositionUs() {
// Don't block playback whilst subtitles are loading.
- return END_OF_TRACK;
+ return END_OF_TRACK_US;
}
@Override
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
index 18b79ea547..d672dd95d7 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.util.Assertions;
import java.io.ByteArrayOutputStream;
@@ -29,7 +30,7 @@ public class ByteArrayDataSink implements DataSink {
@Override
public DataSink open(DataSpec dataSpec) throws IOException {
- if (dataSpec.length == DataSpec.LENGTH_UNBOUNDED) {
+ if (dataSpec.length == C.LENGTH_UNBOUNDED) {
stream = new ByteArrayOutputStream();
} else {
Assertions.checkArgument(dataSpec.length <= Integer.MAX_VALUE);
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
index 937c9bc229..768d7061a1 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.util.Assertions;
import java.io.IOException;
@@ -36,14 +37,14 @@ public class ByteArrayDataSource implements DataSource {
@Override
public long open(DataSpec dataSpec) throws IOException {
- if (dataSpec.length == DataSpec.LENGTH_UNBOUNDED) {
+ if (dataSpec.length == C.LENGTH_UNBOUNDED) {
Assertions.checkArgument(dataSpec.position < data.length);
} else {
Assertions.checkArgument(dataSpec.position + dataSpec.length <= data.length);
}
readPosition = (int) dataSpec.position;
- return (dataSpec.length == DataSpec.LENGTH_UNBOUNDED)
- ? (data.length - dataSpec.position) : dataSpec.length;
+ return (dataSpec.length == C.LENGTH_UNBOUNDED) ? (data.length - dataSpec.position)
+ : dataSpec.length;
}
@Override
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/DataSource.java
index 596bf764c3..eb269ef2dc 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DataSource.java
@@ -15,6 +15,8 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
+
import java.io.IOException;
/**
@@ -34,9 +36,9 @@ public interface DataSource {
* @param dataSpec Defines the data to be read.
* @throws IOException If an error occurs opening the source.
* @return The number of bytes that can be read from the opened source. For unbounded requests
- * (i.e. requests where {@link DataSpec#length} equals {@link DataSpec#LENGTH_UNBOUNDED})
- * this value is the resolved length of the request. For all other requests, the value
- * returned will be equal to the request's {@link DataSpec#length}.
+ * (i.e. requests where {@link DataSpec#length} equals {@link C#LENGTH_UNBOUNDED}) this value
+ * is the resolved length of the request. For all other requests, the value returned will be
+ * equal to the request's {@link DataSpec#length}.
*/
public long open(DataSpec dataSpec) throws IOException;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceStream.java b/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceStream.java
index 9060c88567..c786a05779 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceStream.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceStream.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.upstream.Loader.Loadable;
import com.google.android.exoplayer.util.Assertions;
import com.google.android.exoplayer.util.Util;
@@ -67,7 +68,7 @@ public final class DataSourceStream implements Loadable, NonBlockingInputStream
this.dataSource = dataSource;
this.dataSpec = dataSpec;
this.allocator = allocator;
- resolvedLength = DataSpec.LENGTH_UNBOUNDED;
+ resolvedLength = C.LENGTH_UNBOUNDED;
readHead = new ReadHead();
}
@@ -99,11 +100,11 @@ public final class DataSourceStream implements Loadable, NonBlockingInputStream
/**
* Returns the length of the streamin bytes.
*
- * @return The length of the stream in bytes, or {@value DataSpec#LENGTH_UNBOUNDED} if the length
- * has yet to be determined.
+ * @return The length of the stream in bytes, or {@value C#LENGTH_UNBOUNDED} if the length has
+ * yet to be determined.
*/
public long getLength() {
- return resolvedLength != DataSpec.LENGTH_UNBOUNDED ? resolvedLength : dataSpec.length;
+ return resolvedLength != C.LENGTH_UNBOUNDED ? resolvedLength : dataSpec.length;
}
/**
@@ -112,7 +113,7 @@ public final class DataSourceStream implements Loadable, NonBlockingInputStream
* @return True if the stream has finished loading. False otherwise.
*/
public boolean isLoadFinished() {
- return resolvedLength != DataSpec.LENGTH_UNBOUNDED && loadPosition == resolvedLength;
+ return resolvedLength != C.LENGTH_UNBOUNDED && loadPosition == resolvedLength;
}
/**
@@ -144,7 +145,7 @@ public final class DataSourceStream implements Loadable, NonBlockingInputStream
@Override
public boolean isEndOfStream() {
- return resolvedLength != DataSpec.LENGTH_UNBOUNDED && readHead.position == resolvedLength;
+ return resolvedLength != C.LENGTH_UNBOUNDED && readHead.position == resolvedLength;
}
@Override
@@ -233,7 +234,7 @@ public final class DataSourceStream implements Loadable, NonBlockingInputStream
}
try {
DataSpec loadDataSpec;
- if (resolvedLength == DataSpec.LENGTH_UNBOUNDED) {
+ if (resolvedLength == C.LENGTH_UNBOUNDED) {
loadDataSpec = dataSpec;
resolvedLength = dataSource.open(loadDataSpec);
if (resolvedLength > Integer.MAX_VALUE) {
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DataSpec.java b/library/src/main/java/com/google/android/exoplayer/upstream/DataSpec.java
index d9f5030d19..41f758be8a 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DataSpec.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DataSpec.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.util.Assertions;
import android.net.Uri;
@@ -24,13 +25,6 @@ import android.net.Uri;
*/
public final class DataSpec {
- /**
- * A permitted value of {@link #length}. A {@link DataSpec} defined with this length represents
- * the region of media data that starts at its {@link #position} and extends to the end of the
- * data whose location is defined by its {@link #uri}.
- */
- public static final int LENGTH_UNBOUNDED = -1;
-
/**
* Identifies the source from which data should be read.
*/
@@ -50,7 +44,7 @@ public final class DataSpec {
*/
public final long position;
/**
- * The length of the data. Greater than zero, or equal to {@link #LENGTH_UNBOUNDED}.
+ * The length of the data. Greater than zero, or equal to {@link C#LENGTH_UNBOUNDED}.
*/
public final long length;
/**
@@ -98,7 +92,7 @@ public final class DataSpec {
boolean uriIsFullStream) {
Assertions.checkArgument(absoluteStreamPosition >= 0);
Assertions.checkArgument(position >= 0);
- Assertions.checkArgument(length > 0 || length == LENGTH_UNBOUNDED);
+ Assertions.checkArgument(length > 0 || length == C.LENGTH_UNBOUNDED);
Assertions.checkArgument(absoluteStreamPosition == position || !uriIsFullStream);
this.uri = uri;
this.uriIsFullStream = uriIsFullStream;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/FileDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/FileDataSource.java
index 0ca8d3ea80..a08cacb982 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/FileDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/FileDataSource.java
@@ -15,6 +15,8 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
+
import java.io.IOException;
import java.io.RandomAccessFile;
@@ -42,8 +44,7 @@ public final class FileDataSource implements DataSource {
try {
file = new RandomAccessFile(dataSpec.uri.getPath(), "r");
file.seek(dataSpec.position);
- bytesRemaining = dataSpec.length == DataSpec.LENGTH_UNBOUNDED
- ? file.length() - dataSpec.position
+ bytesRemaining = dataSpec.length == C.LENGTH_UNBOUNDED ? file.length() - dataSpec.position
: dataSpec.length;
return bytesRemaining;
} catch (IOException e) {
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/HttpDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/HttpDataSource.java
index 374a648efa..7f9bdd4d26 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/HttpDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/HttpDataSource.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.util.Assertions;
import com.google.android.exoplayer.util.Predicate;
import com.google.android.exoplayer.util.Util;
@@ -258,16 +259,16 @@ public class HttpDataSource implements DataSource {
}
long contentLength = getContentLength(connection);
- dataLength = dataSpec.length == DataSpec.LENGTH_UNBOUNDED ? contentLength : dataSpec.length;
- if (dataLength == DataSpec.LENGTH_UNBOUNDED) {
+ dataLength = dataSpec.length == C.LENGTH_UNBOUNDED ? contentLength : dataSpec.length;
+ if (dataLength == C.LENGTH_UNBOUNDED) {
// The DataSpec specified unbounded length and we failed to resolve a length from the
// response headers.
throw new HttpDataSourceException(
- new UnexpectedLengthException(DataSpec.LENGTH_UNBOUNDED, DataSpec.LENGTH_UNBOUNDED),
+ new UnexpectedLengthException(C.LENGTH_UNBOUNDED, C.LENGTH_UNBOUNDED),
dataSpec);
}
- if (dataSpec.length != DataSpec.LENGTH_UNBOUNDED && contentLength != DataSpec.LENGTH_UNBOUNDED
+ if (dataSpec.length != C.LENGTH_UNBOUNDED && contentLength != C.LENGTH_UNBOUNDED
&& contentLength != dataSpec.length) {
// The DataSpec specified a length and we resolved a length from the response headers, but
// the two lengths do not match.
@@ -394,14 +395,14 @@ public class HttpDataSource implements DataSource {
private String buildRangeHeader(DataSpec dataSpec) {
String rangeRequest = "bytes=" + dataSpec.position + "-";
- if (dataSpec.length != DataSpec.LENGTH_UNBOUNDED) {
+ if (dataSpec.length != C.LENGTH_UNBOUNDED) {
rangeRequest += (dataSpec.position + dataSpec.length - 1);
}
return rangeRequest;
}
private long getContentLength(HttpURLConnection connection) {
- long contentLength = DataSpec.LENGTH_UNBOUNDED;
+ long contentLength = C.LENGTH_UNBOUNDED;
String contentLengthHeader = connection.getHeaderField("Content-Length");
if (!TextUtils.isEmpty(contentLengthHeader)) {
try {
@@ -435,7 +436,7 @@ public class HttpDataSource implements DataSource {
}
}
}
- if (contentLength == DataSpec.LENGTH_UNBOUNDED) {
+ if (contentLength == C.LENGTH_UNBOUNDED) {
Log.w(TAG, "Unable to parse content length [" + contentLengthHeader + "] [" +
contentRangeHeader + "]");
}
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/TeeDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/TeeDataSource.java
index b54db19843..6d05f8c344 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/TeeDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/TeeDataSource.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.util.Assertions;
import java.io.IOException;
@@ -39,7 +40,7 @@ public final class TeeDataSource implements DataSource {
@Override
public long open(DataSpec dataSpec) throws IOException {
long dataLength = upstream.open(dataSpec);
- if (dataSpec.length == DataSpec.LENGTH_UNBOUNDED) {
+ if (dataSpec.length == C.LENGTH_UNBOUNDED) {
// Reconstruct dataSpec in order to provide the resolved length to the sink.
dataSpec = new DataSpec(dataSpec.uri, dataSpec.absoluteStreamPosition, dataLength,
dataSpec.key, dataSpec.position, dataSpec.uriIsFullStream);
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSource.java
index 1f82252540..379b63fa53 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSource.java
@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.upstream.cache;
+import com.google.android.exoplayer.C;
import com.google.android.exoplayer.upstream.DataSink;
import com.google.android.exoplayer.upstream.DataSource;
import com.google.android.exoplayer.upstream.DataSpec;
@@ -124,7 +125,7 @@ public final class CacheDataSource implements DataSource {
Assertions.checkState(dataSpec.uriIsFullStream);
// TODO: Support caching for unbounded requests. This requires storing the source length
// into the cache (the simplest approach is to incorporate it into each cache file's name).
- Assertions.checkState(dataSpec.length != DataSpec.LENGTH_UNBOUNDED);
+ Assertions.checkState(dataSpec.length != C.LENGTH_UNBOUNDED);
try {
uri = dataSpec.uri;
key = dataSpec.key;