From 6dcbafad21c40eaca59c354344748e4541b833d1 Mon Sep 17 00:00:00 2001 From: samrobinson Date: Mon, 17 Jun 2024 06:20:34 -0700 Subject: [PATCH] Use AndroidTestUtil constants so test asset information is consistent. PiperOrigin-RevId: 643984158 --- .../media3/transformer/AndroidTestUtil.java | 2 + .../transformer/CompositionPlayerTest.java | 47 +++++++++++++------ .../VideoTimestampConsistencyTest.java | 34 +++++++------- .../performance/CompositionPlaybackTest.java | 23 +++------ .../CompositionPlayerSeekTest.java | 15 +++--- 5 files changed, 66 insertions(+), 55 deletions(-) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java index 8e5f538f86..af57567435 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -75,6 +75,7 @@ public final class AndroidTestUtil { "asset:///media/png/loremipsum_1920x720.png"; public static final String JPG_ASSET_URI_STRING = "asset:///media/jpeg/london.jpg"; public static final String JPG_PORTRAIT_ASSET_URI_STRING = "asset:///media/jpeg/tokyo.jpg"; + public static final String JPG_SINGLE_PIXEL_URI_STRING = "asset:///media/jpeg/white-1x1.jpg"; public static final String ULTRA_HDR_URI_STRING = "asset:///media/jpeg/ultraHDR.jpg"; public static final String MP4_TRIM_OPTIMIZATION_URI_STRING = @@ -98,6 +99,7 @@ public final class AndroidTestUtil { .setFrameRate(29.97f) .setCodecs("avc1.64001F") .build(); + public static final long MP4_ASSET_DURATION_US = 1_024_000L; // Result of the following command for MP4_ASSET_URI_STRING // ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames sample.mp4 diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerTest.java index da0a977d96..1045535252 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlayerTest.java @@ -16,6 +16,8 @@ package androidx.media3.transformer; import static androidx.media3.common.PlaybackException.ERROR_CODE_DECODER_INIT_FAILED; +import static androidx.media3.transformer.AndroidTestUtil.JPG_SINGLE_PIXEL_URI_STRING; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static com.google.common.truth.Truth.assertThat; import static com.google.common.util.concurrent.Futures.immediateFuture; import static org.junit.Assert.assertThrows; @@ -70,8 +72,6 @@ import org.junit.runner.RunWith; public class CompositionPlayerTest { private static final long TEST_TIMEOUT_MS = 10_000; - private static final String MP4_ASSET = "asset:///media/mp4/sample.mp4"; - private static final String IMAGE_ASSET = "asset:///media/jpeg/white-1x1.jpg"; @Rule public ActivityScenarioRule rule = @@ -122,7 +122,7 @@ public class CompositionPlayerTest { compositionPlayer.setComposition( new Composition.Builder( new EditedMediaItemSequence( - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(1_000_000) .build())) .build()); @@ -142,7 +142,7 @@ public class CompositionPlayerTest { compositionPlayer.setComposition( new Composition.Builder( new EditedMediaItemSequence( - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(1_000_000) .build())) .build()); @@ -166,7 +166,7 @@ public class CompositionPlayerTest { compositionPlayer.setComposition( new Composition.Builder( new EditedMediaItemSequence( - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(1_000_000) .build())) .build()); @@ -188,7 +188,7 @@ public class CompositionPlayerTest { compositionPlayer.setComposition( new Composition.Builder( new EditedMediaItemSequence( - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(1_000_000) .build())) .build()); @@ -232,7 +232,7 @@ public class CompositionPlayerTest { new EditedMediaItemSequence( new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(1_000) .build()) .setDurationUs(1_000_000) @@ -273,7 +273,7 @@ public class CompositionPlayerTest { new EditedMediaItemSequence( new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setMimeType(MimeTypes.APPLICATION_EXTERNALLY_LOADED_IMAGE) .setImageDurationMs(1_000) .build()) @@ -291,7 +291,10 @@ public class CompositionPlayerTest { PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS); EditedMediaItem image = new EditedMediaItem.Builder( - new MediaItem.Builder().setUri(IMAGE_ASSET).setImageDurationMs(500).build()) + new MediaItem.Builder() + .setUri(JPG_SINGLE_PIXEL_URI_STRING) + .setImageDurationMs(500) + .build()) .setDurationUs(500_000) .build(); @@ -316,12 +319,17 @@ public class CompositionPlayerTest { PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS); EditedMediaItem image = new EditedMediaItem.Builder( - new MediaItem.Builder().setUri(IMAGE_ASSET).setImageDurationMs(500).build()) + new MediaItem.Builder() + .setUri(JPG_SINGLE_PIXEL_URI_STRING) + .setImageDurationMs(500) + .build()) .setDurationUs(500_000) .build(); EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)).setDurationUs(1_000_000).build(); + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) + .setDurationUs(1_000_000) + .build(); instrumentation.runOnMainSync( () -> { @@ -343,10 +351,15 @@ public class CompositionPlayerTest { public void composition_videoThenImage() throws Exception { PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS); EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)).setDurationUs(1_000_000).build(); + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) + .setDurationUs(1_000_000) + .build(); EditedMediaItem image = new EditedMediaItem.Builder( - new MediaItem.Builder().setUri(IMAGE_ASSET).setImageDurationMs(500).build()) + new MediaItem.Builder() + .setUri(JPG_SINGLE_PIXEL_URI_STRING) + .setImageDurationMs(500) + .build()) .setDurationUs(500_000) .build(); @@ -370,7 +383,9 @@ public class CompositionPlayerTest { public void playback_videoSinkProviderFails_playerRaisesError() { PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS); EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)).setDurationUs(1_000_000).build(); + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) + .setDurationUs(1_000_000) + .build(); instrumentation.runOnMainSync( () -> { @@ -405,7 +420,9 @@ public class CompositionPlayerTest { throws Exception { PlayerTestListener playerTestListener = new PlayerTestListener(TEST_TIMEOUT_MS); EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)).setDurationUs(1_000_000).build(); + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) + .setDurationUs(1_000_000) + .build(); instrumentation.runOnMainSync( () -> { compositionPlayer = diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/VideoTimestampConsistencyTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/VideoTimestampConsistencyTest.java index 2fdbd88ed2..34b74f2790 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/VideoTimestampConsistencyTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/VideoTimestampConsistencyTest.java @@ -17,6 +17,9 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Util.usToMs; +import static androidx.media3.transformer.AndroidTestUtil.JPG_SINGLE_PIXEL_URI_STRING; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DURATION_US; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static com.google.common.truth.Truth.assertThat; import android.app.Instrumentation; @@ -46,15 +49,12 @@ import org.junit.runner.RunWith; public class VideoTimestampConsistencyTest { private static final long TEST_TIMEOUT_MS = 10_000; - private static final String MP4_ASSET = "asset:///media/mp4/sample.mp4"; - private static final long MP4_ASSET_DURATION_US = 1_024_000L; private static final ImmutableList MP4_ASSET_FRAME_TIMESTAMPS_US = ImmutableList.of( 0L, 33366L, 66733L, 100100L, 133466L, 166833L, 200200L, 233566L, 266933L, 300300L, 333666L, 367033L, 400400L, 433766L, 467133L, 500500L, 533866L, 567233L, 600600L, 633966L, 667333L, 700700L, 734066L, 767433L, 800800L, 834166L, 867533L, 900900L, 934266L, 967633L); - private static final String IMAGE_ASSET = "asset:///media/jpeg/white-1x1.jpg"; private static final ImmutableList IMAGE_TIMESTAMPS_US_500_MS_30_FPS = ImmutableList.of( 0L, 33333L, 66667L, 100000L, 133333L, 166667L, 200000L, 233333L, 266667L, 300000L, @@ -89,7 +89,7 @@ public class VideoTimestampConsistencyTest { EditedMediaItem image = new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(usToMs(imageDurationUs)) .build()) .setDurationUs(imageDurationUs) @@ -102,7 +102,7 @@ public class VideoTimestampConsistencyTest { @Test public void oneVideoComposition_timestampsAreConsistent() throws Exception { EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(MP4_ASSET_DURATION_US) .build(); @@ -115,7 +115,7 @@ public class VideoTimestampConsistencyTest { long clippedStartUs = 500_000L; EditedMediaItem video1 = new EditedMediaItem.Builder( - MediaItem.fromUri(MP4_ASSET) + MediaItem.fromUri(MP4_ASSET_URI_STRING) .buildUpon() .setClippingConfiguration( new MediaItem.ClippingConfiguration.Builder() @@ -126,7 +126,7 @@ public class VideoTimestampConsistencyTest { .build(); EditedMediaItem video2 = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(MP4_ASSET_DURATION_US) .build(); @@ -145,12 +145,12 @@ public class VideoTimestampConsistencyTest { @Test public void twoVideosComposition_timestampsAreConsistent() throws Exception { EditedMediaItem video1 = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(MP4_ASSET_DURATION_US) .build(); EditedMediaItem video2 = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(MP4_ASSET_DURATION_US) .build(); @@ -173,7 +173,7 @@ public class VideoTimestampConsistencyTest { EditedMediaItem image1 = new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(usToMs(imageDurationUs)) .build()) .setDurationUs(imageDurationUs) @@ -182,7 +182,7 @@ public class VideoTimestampConsistencyTest { EditedMediaItem image2 = new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(usToMs(imageDurationUs)) .build()) .setDurationUs(imageDurationUs) @@ -209,14 +209,14 @@ public class VideoTimestampConsistencyTest { EditedMediaItem image = new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(usToMs(imageDurationUs)) .build()) .setDurationUs(imageDurationUs) .setFrameRate(30) .build(); EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(MP4_ASSET_DURATION_US) .build(); @@ -236,13 +236,13 @@ public class VideoTimestampConsistencyTest { long imageDurationUs = 500_000L; EditedMediaItem video = - new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) + new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) .setDurationUs(MP4_ASSET_DURATION_US) .build(); EditedMediaItem image = new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(usToMs(imageDurationUs)) .build()) .setDurationUs(imageDurationUs) @@ -268,7 +268,7 @@ public class VideoTimestampConsistencyTest { EditedMediaItem video = new EditedMediaItem.Builder( - MediaItem.fromUri(MP4_ASSET) + MediaItem.fromUri(MP4_ASSET_URI_STRING) .buildUpon() .setClippingConfiguration( new MediaItem.ClippingConfiguration.Builder() @@ -280,7 +280,7 @@ public class VideoTimestampConsistencyTest { EditedMediaItem image = new EditedMediaItem.Builder( new MediaItem.Builder() - .setUri(IMAGE_ASSET) + .setUri(JPG_SINGLE_PIXEL_URI_STRING) .setImageDurationMs(usToMs(imageDurationUs)) .build()) .setDurationUs(imageDurationUs) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java index 4635085905..89bb3f96f3 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java @@ -16,11 +16,12 @@ package androidx.media3.transformer.mh.performance; -import static androidx.media3.common.MimeTypes.VIDEO_H264; import static androidx.media3.test.utils.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE; import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888BitmapFromRgba8888Image; import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888; import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static androidx.media3.transformer.mh.performance.PlaybackTestUtil.createTimestampOverlay; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; @@ -30,7 +31,6 @@ import android.graphics.Bitmap; import android.graphics.PixelFormat; import android.media.Image; import android.media.ImageReader; -import androidx.media3.common.Format; import androidx.media3.common.MediaItem; import androidx.media3.common.util.ConditionVariable; import androidx.media3.common.util.Size; @@ -58,17 +58,6 @@ import org.junit.runner.RunWith; public class CompositionPlaybackTest { private static final String TEST_DIRECTORY = "test-generated-goldens/ExoPlayerPlaybackTest"; - private static final String MP4_ASSET_URI_STRING = "asset:///media/mp4/sample.mp4"; - private static final Format MP4_ASSET_FORMAT = - new Format.Builder() - .setSampleMimeType(VIDEO_H264) - .setWidth(1080) - .setHeight(720) - .setFrameRate(29.97f) - .setCodecs("avc1.64001F") - .build(); - private static final Size MP4_ASSET_VIDEO_SIZE = - new Size(MP4_ASSET_FORMAT.width, MP4_ASSET_FORMAT.height); private static final long TEST_TIMEOUT_MS = 10_000; @Rule public final TestName testName = new TestName(); @@ -102,8 +91,8 @@ public class CompositionPlaybackTest { ConditionVariable hasRenderedFirstFrameCondition = new ConditionVariable(); outputImageReader = ImageReader.newInstance( - MP4_ASSET_VIDEO_SIZE.getWidth(), - MP4_ASSET_VIDEO_SIZE.getHeight(), + MP4_ASSET_FORMAT.width, + MP4_ASSET_FORMAT.height, PixelFormat.RGBA_8888, /* maxImages= */ 1); @@ -119,7 +108,9 @@ public class CompositionPlaybackTest { }, Util.createHandlerForCurrentOrMainLooper()); - player.setVideoSurface(outputImageReader.getSurface(), MP4_ASSET_VIDEO_SIZE); + player.setVideoSurface( + outputImageReader.getSurface(), + new Size(MP4_ASSET_FORMAT.width, MP4_ASSET_FORMAT.height)); player.setComposition( new Composition.Builder( new EditedMediaItemSequence( diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlayerSeekTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlayerSeekTest.java index def7ed5481..0e14df4ce4 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlayerSeekTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlayerSeekTest.java @@ -17,6 +17,8 @@ package androidx.media3.transformer.mh.performance; import static androidx.media3.common.util.Util.usToMs; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DURATION_US; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static com.google.common.collect.Iterables.getLast; import static com.google.common.truth.Truth.assertThat; @@ -28,6 +30,7 @@ import androidx.media3.common.GlObjectsProvider; import androidx.media3.common.GlTextureInfo; import androidx.media3.common.MediaItem; import androidx.media3.effect.GlEffect; +import androidx.media3.transformer.AndroidTestUtil; import androidx.media3.transformer.Composition; import androidx.media3.transformer.CompositionPlayer; import androidx.media3.transformer.EditedMediaItem; @@ -58,8 +61,6 @@ import org.junit.runner.RunWith; public class CompositionPlayerSeekTest { private static final long TEST_TIMEOUT_MS = 10_000; - private static final String MP4_ASSET = "asset:///media/mp4/sample.mp4"; - private static final long MP4_ASSET_DURATION_US = 1_024_000L; private static final ImmutableList MP4_ASSET_TIMESTAMPS_US = ImmutableList.of( 0L, 33366L, 66733L, 100100L, 133466L, 166833L, 200200L, 233566L, 266933L, 300300L, @@ -278,9 +279,9 @@ public class CompositionPlayerSeekTest { } /** - * Plays the {@link #MP4_ASSET} for {@code videoLoopCount} times, seeks after {@code - * numberOfFramesBeforeSeeking} frames to {@code seekTimeMs}, and returns the timestamps of the - * processed frames, in microsecond. + * Plays the {@link AndroidTestUtil#MP4_ASSET_URI_STRING} for {@code videoLoopCount} times, seeks + * after {@code numberOfFramesBeforeSeeking} frames to {@code seekTimeMs}, and returns the + * timestamps of the processed frames, in microsecond. */ private ImmutableList playCompositionOfTwoVideosAndGetTimestamps( PlayerTestListener listener, int numberOfFramesBeforeSeeking, long seekTimeMs) @@ -352,8 +353,8 @@ public class CompositionPlayerSeekTest { } private static EditedMediaItem createEditedMediaItem(List videoEffects) { - return new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET)) - .setDurationUs(1_024_000) + return new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)) + .setDurationUs(MP4_ASSET_DURATION_US) .setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects)) .build(); }