Fix logic that detects the last media item in Sequence

After the change in a879bc2154, 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
This commit is contained in:
claincly 2024-09-18 02:51:36 -07:00 committed by Copybara-Service
parent 3facfbf542
commit 69da26935e

View File

@ -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);
}