From 2a4bae01ef66fe8de8acd99c8b626392f4609c7a Mon Sep 17 00:00:00 2001 From: claincly Date: Tue, 26 Nov 2024 03:41:58 -0800 Subject: [PATCH] Add two missing test cases in seeking PiperOrigin-RevId: 700284751 --- .../CompositionPlayerSeekTest.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerSeekTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerSeekTest.java index df40c6c382..1423b7e27d 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerSeekTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerSeekTest.java @@ -168,6 +168,34 @@ public class CompositionPlayerSeekTest { assertThat(actualTimestampsUs).isEqualTo(expectedTimestampsUs); } + @Test + public void seekToFirstMedia_duringPlayingFirstVideoInSingleSequenceOfTwoVideos() + throws Exception { + ImmutableList mediaItems = ImmutableList.of(VIDEO_MEDIA_ITEM, VIDEO_MEDIA_ITEM); + ImmutableList durationsUs = ImmutableList.of(VIDEO_DURATION_US, VIDEO_DURATION_US); + int numberOfFramesBeforeSeeking = 15; + // 100ms into the first video, should skip the first 3 frames. + long seekTimeMs = 100; + ImmutableList expectedTimestampsUs = + new ImmutableList.Builder() + // Plays the first 15 frames of the first video + .addAll( + Iterables.limit(VIDEO_TIMESTAMPS_US, /* limitSize= */ numberOfFramesBeforeSeeking)) + // Seek, skipping the first 3 frames of the first video + .addAll(Iterables.skip(VIDEO_TIMESTAMPS_US, /* numberToSkip= */ 3)) + // Plays the second video + .addAll( + Iterables.transform( + VIDEO_TIMESTAMPS_US, timestampUs -> (VIDEO_DURATION_US + timestampUs))) + .build(); + + ImmutableList actualTimestampsUs = + playSequenceAndGetTimestampsUs( + mediaItems, durationsUs, numberOfFramesBeforeSeeking, seekTimeMs); + + assertThat(actualTimestampsUs).isEqualTo(expectedTimestampsUs); + } + @Test public void seekToSecondMedia_duringPlayingFirstVideoInSingleSequenceOfTwoVideos() throws Exception { @@ -227,6 +255,37 @@ public class CompositionPlayerSeekTest { assertThat(actualTimestampsUs).isEqualTo(expectedTimestampsUs); } + @Test + public void seekToSecondMedia_duringPlayingSecondVideoInSingleSequenceOfTwoVideos() + throws Exception { + ImmutableList mediaItems = ImmutableList.of(VIDEO_MEDIA_ITEM, VIDEO_MEDIA_ITEM); + ImmutableList durationsUs = ImmutableList.of(VIDEO_DURATION_US, VIDEO_DURATION_US); + int numberOfFramesBeforeSeeking = 45; + // 100ms into the second video, should skip the first 3 frames. + long seekTimeMs = 1124; + ImmutableList expectedTimestampsUs = + new ImmutableList.Builder() + // Play first video + .addAll(VIDEO_TIMESTAMPS_US) + // Play the first 15 frames of the seconds video + .addAll( + Iterables.transform( + Iterables.limit(VIDEO_TIMESTAMPS_US, /* limitSize= */ 15), + timestampUs -> (VIDEO_DURATION_US + timestampUs))) + // Seek to the second, skipping the first 3 frames. + .addAll( + Iterables.transform( + Iterables.skip(VIDEO_TIMESTAMPS_US, /* numberToSkip= */ 3), + timestampUs -> (VIDEO_DURATION_US + timestampUs))) + .build(); + + ImmutableList actualTimestampsUs = + playSequenceAndGetTimestampsUs( + mediaItems, durationsUs, numberOfFramesBeforeSeeking, seekTimeMs); + + assertThat(actualTimestampsUs).isEqualTo(expectedTimestampsUs); + } + @Test public void seekToEndOfFirstMedia_duringPlayingFirstVideoInSingleSequenceOfTwoVideos() throws Exception {