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 52c35215de..7a269a0c30 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 @@ -163,6 +163,7 @@ public class ChunkSampleSource implements SampleSource, SampleSourceReader, Load downstreamMediaFormat = null; downstreamPositionUs = positionUs; lastSeekPositionUs = positionUs; + pendingDiscontinuity = false; restartFrom(positionUs); } @@ -170,7 +171,6 @@ public class ChunkSampleSource implements SampleSource, SampleSourceReader, Load public void disable(int track) { Assertions.checkState(state == STATE_ENABLED); Assertions.checkState(track == 0); - pendingDiscontinuity = false; state = STATE_PREPARED; try { chunkSource.disable(mediaChunks); @@ -269,12 +269,14 @@ public class ChunkSampleSource implements SampleSource, SampleSourceReader, Load @Override public void seekToUs(long positionUs) { Assertions.checkState(state == STATE_ENABLED); + + long currentPositionUs = isPendingReset() ? pendingResetPositionUs : downstreamPositionUs; + downstreamPositionUs = positionUs; lastSeekPositionUs = positionUs; - if ((isPendingReset() ? pendingResetPositionUs : downstreamPositionUs) == positionUs) { + if (currentPositionUs == positionUs) { return; } - downstreamPositionUs = positionUs; // If we're not pending a reset, see if we can seek within the sample queue. boolean seekInsideBuffer = !isPendingReset() && sampleQueue.skipToKeyframeBefore(positionUs); if (seekInsideBuffer) { 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 155034910b..68ff1b4966 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 @@ -194,6 +194,7 @@ public class ExtractorSampleSource implements SampleSource, SampleSourceReader, if (enabledTrackCount == 1) { seekToUs(positionUs); } + pendingDiscontinuities[track] = false; } @Override @@ -202,8 +203,8 @@ public class ExtractorSampleSource implements SampleSource, SampleSourceReader, Assertions.checkState(trackEnabledStates[track]); enabledTrackCount--; trackEnabledStates[track] = false; - pendingDiscontinuities[track] = false; if (enabledTrackCount == 0) { + downstreamPositionUs = Long.MIN_VALUE; if (loader.isLoading()) { loader.cancelLoading(); } else { @@ -274,13 +275,13 @@ public class ExtractorSampleSource implements SampleSource, SampleSourceReader, positionUs = 0; } + long currentPositionUs = isPendingReset() ? pendingResetPositionUs : downstreamPositionUs; + downstreamPositionUs = positionUs; lastSeekPositionUs = positionUs; - if ((isPendingReset() ? pendingResetPositionUs : downstreamPositionUs) == positionUs) { + if (currentPositionUs == positionUs) { return; } - downstreamPositionUs = positionUs; - // If we're not pending a reset, see if we can seek within the sample queues. boolean seekInsideBuffer = !isPendingReset(); for (int i = 0; seekInsideBuffer && i < sampleQueues.size(); i++) { 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 8427813a50..5ab4c60ef2 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 @@ -193,6 +193,7 @@ public class HlsSampleSource implements SampleSource, SampleSourceReader, Loader if (enabledTrackCount == 1) { seekToUs(positionUs); } + pendingDiscontinuities[track] = false; } @Override @@ -201,8 +202,8 @@ public class HlsSampleSource implements SampleSource, SampleSourceReader, Loader Assertions.checkState(trackEnabledStates[track]); enabledTrackCount--; trackEnabledStates[track] = false; - pendingDiscontinuities[track] = false; if (enabledTrackCount == 0) { + downstreamPositionUs = Long.MIN_VALUE; if (loadControlRegistered) { loadControl.unregister(this); loadControlRegistered = false; @@ -314,8 +315,11 @@ public class HlsSampleSource implements SampleSource, SampleSourceReader, Loader public void seekToUs(long positionUs) { Assertions.checkState(prepared); Assertions.checkState(enabledTrackCount > 0); + + long currentPositionUs = isPendingReset() ? pendingResetPositionUs : downstreamPositionUs; + downstreamPositionUs = positionUs; lastSeekPositionUs = positionUs; - if ((isPendingReset() ? pendingResetPositionUs : downstreamPositionUs) == positionUs) { + if (currentPositionUs == positionUs) { return; }