From 5a1322c9f953dc0a6c3028cc2b5dfc4d9d7bb01c Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 8 Sep 2023 03:29:05 -0700 Subject: [PATCH] Remove restriction from ConcatenatingMediaSource2 The class currently disallows offsets of periods in their windows except for the very first window. This is not necessary because we can use TimeOffsetMediaPeriod to eliminate the offset if needed. This makes the class more useful for many use cases, in particular for using it with ClippingMediaSource. Issue: google/ExoPlayer#11226 PiperOrigin-RevId: 563702120 --- RELEASENOTES.md | 3 + .../source/ConcatenatingMediaSource2.java | 122 +++++++++++++----- .../e2etest/ClippingPlaylistPlaybackTest.java | 58 ++++++++- .../source/ConcatenatingMediaSource2Test.java | 62 +++++++++ 4 files changed, 211 insertions(+), 34 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0cdee0f8b8..44d7d535b2 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -18,6 +18,9 @@ ([#612](https://github.com/androidx/media/issues/612)). * Add `MediaPeriodId` parameter to `CompositeMediaSource.getMediaTimeForChildMediaTime`. + * Support `ClippingMediaSource` (and other sources with period/window time + offsets) in `ConcatenatingMediaSource2` + ([#11226](https://github.com/google/ExoPlayer/issues/11226)). * Transformer: * Changed `frameRate` and `durationUs` parameters of `SampleConsumer.queueInputBitmap` to `TimestampIterator`. diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ConcatenatingMediaSource2.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ConcatenatingMediaSource2.java index fe3289308e..d09b204741 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ConcatenatingMediaSource2.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ConcatenatingMediaSource2.java @@ -37,19 +37,21 @@ import androidx.media3.datasource.TransferListener; import androidx.media3.exoplayer.upstream.Allocator; import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import java.util.HashMap; import java.util.IdentityHashMap; /** * Concatenates multiple {@link MediaSource MediaSources}, combining everything in one single {@link * Timeline.Window}. * - *

This class can only be used under the following conditions: + *

This class can be used under the following conditions: * *

*/ @UnstableApi @@ -155,6 +157,13 @@ public final class ConcatenatingMediaSource2 extends CompositeMediaSource periodTimeOffsetsByUid; public int activeMediaPeriods; @@ -500,6 +541,7 @@ public final class ConcatenatingMediaSource2 extends CompositeMediaSource(); } } @@ -547,8 +589,7 @@ public final class ConcatenatingMediaSource2 extends CompositeMediaSource) uid).first instanceof Integer)) { return C.INDEX_UNSET; } @@ -607,7 +650,7 @@ public final class ConcatenatingMediaSource2 extends CompositeMediaSource