From 5eba716410a84a1772188aead4c279a2b2e78ae9 Mon Sep 17 00:00:00 2001 From: samrobinson Date: Fri, 30 Aug 2024 09:18:37 -0700 Subject: [PATCH] Add a composition export dump test with a shorter second sequence. PiperOrigin-RevId: 669348374 --- ...seq-sample.wav_clipped_100ms_to_400ms.dump | 117 ++++++++++++++++++ .../transformer/CompositionExportTest.java | 67 ++++++++++ .../androidx/media3/transformer/TestUtil.java | 9 ++ 3 files changed, 193 insertions(+) create mode 100644 libraries/test_data/src/test/assets/transformerdumps/composition/seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms.dump diff --git a/libraries/test_data/src/test/assets/transformerdumps/composition/seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms.dump b/libraries/test_data/src/test/assets/transformerdumps/composition/seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms.dump new file mode 100644 index 0000000000..cadbc7f8b5 --- /dev/null +++ b/libraries/test_data/src/test/assets/transformerdumps/composition/seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms.dump @@ -0,0 +1,117 @@ +format audio: + averageBitrate = 131072 + sampleMimeType = audio/mp4a-latm + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 2 +sample: + trackType = audio + dataHashCode = -477126770 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 779113371 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 45842530 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 2001000243 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -187462316 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -309708822 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1030869338 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -1134039798 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -2131288947 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1159697593 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -889164698 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1380568930 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1722863050 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -1365744081 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -81471997 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -6915052 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1634845963 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = -1252305359 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 2127515647 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 2077308846 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1055925064 + size = 4096 + isKeyFrame = true +sample: + trackType = audio + dataHashCode = 1077088737 + size = 1912 + isKeyFrame = true +released = true diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/CompositionExportTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/CompositionExportTest.java index 999b897e32..ba117e5eaa 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/CompositionExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/CompositionExportTest.java @@ -28,6 +28,7 @@ import static androidx.media3.transformer.TestUtil.addAudioEncoders; import static androidx.media3.transformer.TestUtil.createAudioEffects; import static androidx.media3.transformer.TestUtil.createTransformerBuilder; import static androidx.media3.transformer.TestUtil.createVolumeScalingAudioProcessor; +import static androidx.media3.transformer.TestUtil.getCompositionDumpFilePath; import static androidx.media3.transformer.TestUtil.getDumpFileName; import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders; import static com.google.common.truth.Truth.assertThat; @@ -378,6 +379,72 @@ public class CompositionExportTest { "48000hz")); } + @Test + public void start_firstSequenceFinishesEarly_works() throws Exception { + CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true); + Transformer transformer = + createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); + EditedMediaItem audioItem300ms = + new EditedMediaItem.Builder( + MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW) + .buildUpon() + .setClippingConfiguration( + new MediaItem.ClippingConfiguration.Builder() + .setStartPositionMs(100) + .setEndPositionMs(400) + .build()) + .build()) + .build(); + EditedMediaItem audioItem1000ms = + new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build(); + Composition composition = + new Composition.Builder( + new EditedMediaItemSequence(audioItem300ms), + new EditedMediaItemSequence(audioItem1000ms)) + .build(); + + transformer.start(composition, outputDir.newFile().getPath()); + TransformerTestRunner.runLooper(transformer); + + DumpFileAsserts.assertOutput( + context, + muxerFactory.getCreatedMuxer(), + getCompositionDumpFilePath("seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms")); + } + + @Test + public void start_secondSequenceFinishesEarly_works() throws Exception { + CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true); + Transformer transformer = + createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); + EditedMediaItem audioItem1000ms = + new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build(); + EditedMediaItem audioItem300ms = + new EditedMediaItem.Builder( + MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW) + .buildUpon() + .setClippingConfiguration( + new MediaItem.ClippingConfiguration.Builder() + .setStartPositionMs(100) + .setEndPositionMs(400) + .build()) + .build()) + .build(); + Composition composition = + new Composition.Builder( + new EditedMediaItemSequence(audioItem1000ms), + new EditedMediaItemSequence(audioItem300ms)) + .build(); + + transformer.start(composition, outputDir.newFile().getPath()); + TransformerTestRunner.runLooper(transformer); + + DumpFileAsserts.assertOutput( + context, + muxerFactory.getCreatedMuxer(), + getCompositionDumpFilePath("seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms")); + } + private static String getFileName(String filePath) { int lastSeparator = filePath.lastIndexOf("/"); return filePath.substring(lastSeparator + 1); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/TestUtil.java b/libraries/transformer/src/test/java/androidx/media3/transformer/TestUtil.java index 3750d57f34..ea9959f4ac 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/TestUtil.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/TestUtil.java @@ -149,6 +149,15 @@ public final class TestUtil { return stringJoiner.toString(); } + /** Returns the file path of the composition export dump file, based on the summary provided. */ + public static String getCompositionDumpFilePath(String compositionSummary) { + return DUMP_FILE_OUTPUT_DIRECTORY + + "/composition/" + + compositionSummary + + "." + + DUMP_FILE_EXTENSION; + } + /** * Adds an audio decoder for each {@linkplain MimeTypes mime type}. *