diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeSequenceableLoader.java b/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeSequenceableLoader.java index c28a016581..343d4f0bbe 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeSequenceableLoader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/CompositeSequenceableLoader.java @@ -29,7 +29,19 @@ public final class CompositeSequenceableLoader implements SequenceableLoader { } @Override - public long getNextLoadPositionUs() { + public final long getBufferedPositionUs() { + long bufferedPositionUs = Long.MAX_VALUE; + for (SequenceableLoader loader : loaders) { + long loaderBufferedPositionUs = loader.getBufferedPositionUs(); + if (loaderBufferedPositionUs != C.TIME_END_OF_SOURCE) { + bufferedPositionUs = Math.min(bufferedPositionUs, loaderBufferedPositionUs); + } + } + return bufferedPositionUs == Long.MAX_VALUE ? C.TIME_END_OF_SOURCE : bufferedPositionUs; + } + + @Override + public final long getNextLoadPositionUs() { long nextLoadPositionUs = Long.MAX_VALUE; for (SequenceableLoader loader : loaders) { long loaderNextLoadPositionUs = loader.getNextLoadPositionUs(); @@ -41,7 +53,7 @@ public final class CompositeSequenceableLoader implements SequenceableLoader { } @Override - public boolean continueLoading(long positionUs) { + public final boolean continueLoading(long positionUs) { boolean madeProgress = false; boolean madeProgressThisIteration; do { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MediaPeriod.java index 24b7fdc75f..7a43dd7562 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/MediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MediaPeriod.java @@ -128,16 +128,6 @@ public interface MediaPeriod extends SequenceableLoader { */ long readDiscontinuity(); - /** - * Returns an estimate of the position up to which data is buffered for the enabled tracks. - *
- * 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#TIME_END_OF_SOURCE} if the track is fully buffered. - */ - long getBufferedPositionUs(); - /** * Attempts to seek to the specified position in microseconds. *
@@ -153,6 +143,17 @@ public interface MediaPeriod extends SequenceableLoader { // SequenceableLoader interface. Overridden to provide more specific documentation. + /** + * Returns an estimate of the position up to which data is buffered for the enabled tracks. + *
+ * 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#TIME_END_OF_SOURCE} if the track is fully buffered. + */ + @Override + long getBufferedPositionUs(); + /** * Returns the next load time, or {@link C#TIME_END_OF_SOURCE} if loading has finished. *
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaPeriod.java
index cfb75b1b87..e6a4d4e603 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaPeriod.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MergingMediaPeriod.java
@@ -168,14 +168,7 @@ import java.util.IdentityHashMap;
@Override
public long getBufferedPositionUs() {
- long bufferedPositionUs = Long.MAX_VALUE;
- for (MediaPeriod period : enabledPeriods) {
- long rendererBufferedPositionUs = period.getBufferedPositionUs();
- if (rendererBufferedPositionUs != C.TIME_END_OF_SOURCE) {
- bufferedPositionUs = Math.min(bufferedPositionUs, rendererBufferedPositionUs);
- }
- }
- return bufferedPositionUs == Long.MAX_VALUE ? C.TIME_END_OF_SOURCE : bufferedPositionUs;
+ return sequenceableLoader.getBufferedPositionUs();
}
@Override
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SequenceableLoader.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SequenceableLoader.java
index f287153719..26cb9a2666 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/SequenceableLoader.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SequenceableLoader.java
@@ -36,6 +36,14 @@ public interface SequenceableLoader {
}
+ /**
+ * Returns an estimate of the position up to which data is buffered.
+ *
+ * @return An estimate of the absolute position in microseconds up to which data is buffered, or
+ * {@link C#TIME_END_OF_SOURCE} if the data is fully buffered.
+ */
+ long getBufferedPositionUs();
+
/**
* Returns the next load time, or {@link C#TIME_END_OF_SOURCE} if loading has finished.
*/
diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java
index b74dcc4f5c..81b4a4ceed 100644
--- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java
+++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java
@@ -209,14 +209,7 @@ import java.util.List;
@Override
public long getBufferedPositionUs() {
- long bufferedPositionUs = Long.MAX_VALUE;
- for (ChunkSampleStream