mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Use AndroidTestUtil constants so test asset information is consistent.
PiperOrigin-RevId: 643984158
This commit is contained in:
parent
ded1adc092
commit
6dcbafad21
5 changed files with 66 additions and 55 deletions
|
|
@ -75,6 +75,7 @@ public final class AndroidTestUtil {
|
||||||
"asset:///media/png/loremipsum_1920x720.png";
|
"asset:///media/png/loremipsum_1920x720.png";
|
||||||
public static final String JPG_ASSET_URI_STRING = "asset:///media/jpeg/london.jpg";
|
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_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 ULTRA_HDR_URI_STRING = "asset:///media/jpeg/ultraHDR.jpg";
|
||||||
|
|
||||||
public static final String MP4_TRIM_OPTIMIZATION_URI_STRING =
|
public static final String MP4_TRIM_OPTIMIZATION_URI_STRING =
|
||||||
|
|
@ -98,6 +99,7 @@ public final class AndroidTestUtil {
|
||||||
.setFrameRate(29.97f)
|
.setFrameRate(29.97f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
.build();
|
.build();
|
||||||
|
public static final long MP4_ASSET_DURATION_US = 1_024_000L;
|
||||||
|
|
||||||
// Result of the following command for MP4_ASSET_URI_STRING
|
// 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
|
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames sample.mp4
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.common.PlaybackException.ERROR_CODE_DECODER_INIT_FAILED;
|
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.truth.Truth.assertThat;
|
||||||
import static com.google.common.util.concurrent.Futures.immediateFuture;
|
import static com.google.common.util.concurrent.Futures.immediateFuture;
|
||||||
import static org.junit.Assert.assertThrows;
|
import static org.junit.Assert.assertThrows;
|
||||||
|
|
@ -70,8 +72,6 @@ import org.junit.runner.RunWith;
|
||||||
public class CompositionPlayerTest {
|
public class CompositionPlayerTest {
|
||||||
|
|
||||||
private static final long TEST_TIMEOUT_MS = 10_000;
|
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
|
@Rule
|
||||||
public ActivityScenarioRule<SurfaceTestActivity> rule =
|
public ActivityScenarioRule<SurfaceTestActivity> rule =
|
||||||
|
|
@ -122,7 +122,7 @@ public class CompositionPlayerTest {
|
||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
|
|
@ -142,7 +142,7 @@ public class CompositionPlayerTest {
|
||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
|
|
@ -166,7 +166,7 @@ public class CompositionPlayerTest {
|
||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
|
|
@ -188,7 +188,7 @@ public class CompositionPlayerTest {
|
||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
|
|
@ -232,7 +232,7 @@ public class CompositionPlayerTest {
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(1_000)
|
.setImageDurationMs(1_000)
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
|
|
@ -273,7 +273,7 @@ public class CompositionPlayerTest {
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setMimeType(MimeTypes.APPLICATION_EXTERNALLY_LOADED_IMAGE)
|
.setMimeType(MimeTypes.APPLICATION_EXTERNALLY_LOADED_IMAGE)
|
||||||
.setImageDurationMs(1_000)
|
.setImageDurationMs(1_000)
|
||||||
.build())
|
.build())
|
||||||
|
|
@ -291,7 +291,10 @@ public class CompositionPlayerTest {
|
||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
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)
|
.setDurationUs(500_000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
@ -316,12 +319,17 @@ public class CompositionPlayerTest {
|
||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
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)
|
.setDurationUs(500_000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem video =
|
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(
|
instrumentation.runOnMainSync(
|
||||||
() -> {
|
() -> {
|
||||||
|
|
@ -343,10 +351,15 @@ public class CompositionPlayerTest {
|
||||||
public void composition_videoThenImage() throws Exception {
|
public void composition_videoThenImage() throws Exception {
|
||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem video =
|
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 =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
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)
|
.setDurationUs(500_000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
@ -370,7 +383,9 @@ public class CompositionPlayerTest {
|
||||||
public void playback_videoSinkProviderFails_playerRaisesError() {
|
public void playback_videoSinkProviderFails_playerRaisesError() {
|
||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem video =
|
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(
|
instrumentation.runOnMainSync(
|
||||||
() -> {
|
() -> {
|
||||||
|
|
@ -405,7 +420,9 @@ public class CompositionPlayerTest {
|
||||||
throws Exception {
|
throws Exception {
|
||||||
PlayerTestListener playerTestListener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener playerTestListener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem video =
|
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(
|
instrumentation.runOnMainSync(
|
||||||
() -> {
|
() -> {
|
||||||
compositionPlayer =
|
compositionPlayer =
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,9 @@
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Util.usToMs;
|
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 static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.app.Instrumentation;
|
import android.app.Instrumentation;
|
||||||
|
|
@ -46,15 +49,12 @@ import org.junit.runner.RunWith;
|
||||||
public class VideoTimestampConsistencyTest {
|
public class VideoTimestampConsistencyTest {
|
||||||
|
|
||||||
private static final long TEST_TIMEOUT_MS = 10_000;
|
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<Long> MP4_ASSET_FRAME_TIMESTAMPS_US =
|
private static final ImmutableList<Long> MP4_ASSET_FRAME_TIMESTAMPS_US =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
0L, 33366L, 66733L, 100100L, 133466L, 166833L, 200200L, 233566L, 266933L, 300300L,
|
0L, 33366L, 66733L, 100100L, 133466L, 166833L, 200200L, 233566L, 266933L, 300300L,
|
||||||
333666L, 367033L, 400400L, 433766L, 467133L, 500500L, 533866L, 567233L, 600600L, 633966L,
|
333666L, 367033L, 400400L, 433766L, 467133L, 500500L, 533866L, 567233L, 600600L, 633966L,
|
||||||
667333L, 700700L, 734066L, 767433L, 800800L, 834166L, 867533L, 900900L, 934266L, 967633L);
|
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<Long> IMAGE_TIMESTAMPS_US_500_MS_30_FPS =
|
private static final ImmutableList<Long> IMAGE_TIMESTAMPS_US_500_MS_30_FPS =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
0L, 33333L, 66667L, 100000L, 133333L, 166667L, 200000L, 233333L, 266667L, 300000L,
|
0L, 33333L, 66667L, 100000L, 133333L, 166667L, 200000L, 233333L, 266667L, 300000L,
|
||||||
|
|
@ -89,7 +89,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
|
|
@ -102,7 +102,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
@Test
|
@Test
|
||||||
public void oneVideoComposition_timestampsAreConsistent() throws Exception {
|
public void oneVideoComposition_timestampsAreConsistent() throws Exception {
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
@ -115,7 +115,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
long clippedStartUs = 500_000L;
|
long clippedStartUs = 500_000L;
|
||||||
EditedMediaItem video1 =
|
EditedMediaItem video1 =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(MP4_ASSET)
|
MediaItem.fromUri(MP4_ASSET_URI_STRING)
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
|
|
@ -126,7 +126,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem video2 =
|
EditedMediaItem video2 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
@ -145,12 +145,12 @@ public class VideoTimestampConsistencyTest {
|
||||||
@Test
|
@Test
|
||||||
public void twoVideosComposition_timestampsAreConsistent() throws Exception {
|
public void twoVideosComposition_timestampsAreConsistent() throws Exception {
|
||||||
EditedMediaItem video1 =
|
EditedMediaItem video1 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem video2 =
|
EditedMediaItem video2 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
@ -173,7 +173,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
EditedMediaItem image1 =
|
EditedMediaItem image1 =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
|
|
@ -182,7 +182,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
EditedMediaItem image2 =
|
EditedMediaItem image2 =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
|
|
@ -209,14 +209,14 @@ public class VideoTimestampConsistencyTest {
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
@ -236,13 +236,13 @@ public class VideoTimestampConsistencyTest {
|
||||||
long imageDurationUs = 500_000L;
|
long imageDurationUs = 500_000L;
|
||||||
|
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
|
|
@ -268,7 +268,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
|
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(MP4_ASSET)
|
MediaItem.fromUri(MP4_ASSET_URI_STRING)
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
|
|
@ -280,7 +280,7 @@ public class VideoTimestampConsistencyTest {
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(IMAGE_ASSET)
|
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,12 @@
|
||||||
|
|
||||||
package androidx.media3.transformer.mh.performance;
|
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.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888BitmapFromRgba8888Image;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888BitmapFromRgba8888Image;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
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 androidx.media3.transformer.mh.performance.PlaybackTestUtil.createTimestampOverlay;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static com.google.common.truth.Truth.assertWithMessage;
|
import static com.google.common.truth.Truth.assertWithMessage;
|
||||||
|
|
@ -30,7 +31,6 @@ import android.graphics.Bitmap;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
import android.media.Image;
|
import android.media.Image;
|
||||||
import android.media.ImageReader;
|
import android.media.ImageReader;
|
||||||
import androidx.media3.common.Format;
|
|
||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.util.ConditionVariable;
|
import androidx.media3.common.util.ConditionVariable;
|
||||||
import androidx.media3.common.util.Size;
|
import androidx.media3.common.util.Size;
|
||||||
|
|
@ -58,17 +58,6 @@ import org.junit.runner.RunWith;
|
||||||
public class CompositionPlaybackTest {
|
public class CompositionPlaybackTest {
|
||||||
|
|
||||||
private static final String TEST_DIRECTORY = "test-generated-goldens/ExoPlayerPlaybackTest";
|
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;
|
private static final long TEST_TIMEOUT_MS = 10_000;
|
||||||
|
|
||||||
@Rule public final TestName testName = new TestName();
|
@Rule public final TestName testName = new TestName();
|
||||||
|
|
@ -102,8 +91,8 @@ public class CompositionPlaybackTest {
|
||||||
ConditionVariable hasRenderedFirstFrameCondition = new ConditionVariable();
|
ConditionVariable hasRenderedFirstFrameCondition = new ConditionVariable();
|
||||||
outputImageReader =
|
outputImageReader =
|
||||||
ImageReader.newInstance(
|
ImageReader.newInstance(
|
||||||
MP4_ASSET_VIDEO_SIZE.getWidth(),
|
MP4_ASSET_FORMAT.width,
|
||||||
MP4_ASSET_VIDEO_SIZE.getHeight(),
|
MP4_ASSET_FORMAT.height,
|
||||||
PixelFormat.RGBA_8888,
|
PixelFormat.RGBA_8888,
|
||||||
/* maxImages= */ 1);
|
/* maxImages= */ 1);
|
||||||
|
|
||||||
|
|
@ -119,7 +108,9 @@ public class CompositionPlaybackTest {
|
||||||
},
|
},
|
||||||
Util.createHandlerForCurrentOrMainLooper());
|
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(
|
player.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@
|
||||||
package androidx.media3.transformer.mh.performance;
|
package androidx.media3.transformer.mh.performance;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Util.usToMs;
|
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.collect.Iterables.getLast;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.GlTextureInfo;
|
||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.effect.GlEffect;
|
import androidx.media3.effect.GlEffect;
|
||||||
|
import androidx.media3.transformer.AndroidTestUtil;
|
||||||
import androidx.media3.transformer.Composition;
|
import androidx.media3.transformer.Composition;
|
||||||
import androidx.media3.transformer.CompositionPlayer;
|
import androidx.media3.transformer.CompositionPlayer;
|
||||||
import androidx.media3.transformer.EditedMediaItem;
|
import androidx.media3.transformer.EditedMediaItem;
|
||||||
|
|
@ -58,8 +61,6 @@ import org.junit.runner.RunWith;
|
||||||
public class CompositionPlayerSeekTest {
|
public class CompositionPlayerSeekTest {
|
||||||
|
|
||||||
private static final long TEST_TIMEOUT_MS = 10_000;
|
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<Long> MP4_ASSET_TIMESTAMPS_US =
|
private static final ImmutableList<Long> MP4_ASSET_TIMESTAMPS_US =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
0L, 33366L, 66733L, 100100L, 133466L, 166833L, 200200L, 233566L, 266933L, 300300L,
|
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
|
* Plays the {@link AndroidTestUtil#MP4_ASSET_URI_STRING} for {@code videoLoopCount} times, seeks
|
||||||
* numberOfFramesBeforeSeeking} frames to {@code seekTimeMs}, and returns the timestamps of the
|
* after {@code numberOfFramesBeforeSeeking} frames to {@code seekTimeMs}, and returns the
|
||||||
* processed frames, in microsecond.
|
* timestamps of the processed frames, in microsecond.
|
||||||
*/
|
*/
|
||||||
private ImmutableList<Long> playCompositionOfTwoVideosAndGetTimestamps(
|
private ImmutableList<Long> playCompositionOfTwoVideosAndGetTimestamps(
|
||||||
PlayerTestListener listener, int numberOfFramesBeforeSeeking, long seekTimeMs)
|
PlayerTestListener listener, int numberOfFramesBeforeSeeking, long seekTimeMs)
|
||||||
|
|
@ -352,8 +353,8 @@ public class CompositionPlayerSeekTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static EditedMediaItem createEditedMediaItem(List<Effect> videoEffects) {
|
private static EditedMediaItem createEditedMediaItem(List<Effect> videoEffects) {
|
||||||
return new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET))
|
return new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||||
.setDurationUs(1_024_000)
|
.setDurationUs(MP4_ASSET_DURATION_US)
|
||||||
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue