From 86637facdd16f95a4ba2b444234dea722696daa5 Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 14 Jan 2019 14:02:46 +0000 Subject: [PATCH] Don't forget isSeekable in ExtractorMediaSource. We currently forget whether a source is seekable at re-preparation. This was implemented intentionally this way under the assumption that we really can't seek until we have loaded the seek map again. However, seek operations are only allowed after a media period is prepared. So there is no harm in remembering whether a source is seekable. This problem currently prevents reusing ClippingMediaSources with ExtractorMediaSource and a non-zero start clip position. Issue: #5351 PiperOrigin-RevId: 229169441 --- RELEASENOTES.md | 3 +++ .../google/android/exoplayer2/source/ExtractorMediaSource.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 1634b8de74..307b0534a1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -41,6 +41,9 @@ * Add `Handler` parameter to `ConcatenatingMediaSource` methods which take a callback `Runnable`. * Remove `player` and `isTopLevelSource` parameters from `MediaSource.prepare`. +* Fix issue with reusing a `ClippingMediaSource` with an inner + `ExtractorMediaSource` and a non-zero start position + ([#5351](https://github.com/google/ExoPlayer/issues/5351)). ### 2.9.3 ### diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java index 86f00ff099..91273626c9 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java @@ -366,7 +366,7 @@ public final class ExtractorMediaSource extends BaseMediaSource @Override public void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) { transferListener = mediaTransferListener; - notifySourceInfoRefreshed(timelineDurationUs, /* isSeekable= */ false); + notifySourceInfoRefreshed(timelineDurationUs, timelineIsSeekable); } @Override