From 69da26935e25d9c6e965137e06681bf6d0809500 Mon Sep 17 00:00:00 2001 From: claincly Date: Wed, 18 Sep 2024 02:51:36 -0700 Subject: [PATCH] Fix logic that detects the last media item in Sequence After the change in https://github.com/androidx/media/commit/a879bc2154a01a11eb6ad0384a8c77ba93a5cb0e, the Sequence won't have repeated EditedMediaItems. Thus if the sequence is looping, the last EditedMediaItems in the Sequence object might not corresponds to the last item in the "logical" sequence. PiperOrigin-RevId: 675912197 --- .../androidx/media3/transformer/SequenceRenderersFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceRenderersFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceRenderersFactory.java index f028bd0eee..5efb3bab38 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceRenderersFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceRenderersFactory.java @@ -50,7 +50,6 @@ import androidx.media3.exoplayer.video.MediaCodecVideoRenderer; import androidx.media3.exoplayer.video.VideoRendererEventListener; import androidx.media3.exoplayer.video.VideoSink; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import java.util.ArrayList; import java.util.List; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @@ -253,8 +252,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private void onMediaItemChanged() { EditedMediaItem currentEditedMediaItem = checkStateNotNull(pendingEditedMediaItem); // Use reference equality intentionally. + int lastEditedMediaItemIndex = getTimeline().getPeriodCount() - 1; boolean isLastInSequence = - currentEditedMediaItem == Iterables.getLast(sequence.editedMediaItems); + currentEditedMediaItem == getRepeatedEditedMediaItem(sequence, lastEditedMediaItemIndex); audioSink.onMediaItemChanged( currentEditedMediaItem, pendingOffsetToCompositionTimeUs, isLastInSequence); }