From 9e975b25d17127191b0717bfb87126e6a8bc1ccc Mon Sep 17 00:00:00 2001 From: samrobinson Date: Mon, 31 Jul 2023 15:04:58 +0100 Subject: [PATCH] Define TestMuxer Factory and Holder as inner classes. PiperOrigin-RevId: 552469061 --- .../transformer/CompositionExportTest.java | 23 ++- .../transformer/MediaItemExportTest.java | 168 ++++++++---------- .../transformer/SequenceExportTest.java | 73 ++++---- .../media3/transformer/TestMuxer.java | 36 +++- .../androidx/media3/transformer/TestUtil.java | 34 +--- 5 files changed, 158 insertions(+), 176 deletions(-) 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 55e1b5dc6c..3f119a70b7 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/CompositionExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/CompositionExportTest.java @@ -33,7 +33,6 @@ import android.content.Context; import androidx.media3.common.MediaItem; import androidx.media3.common.util.Util; import androidx.media3.test.utils.DumpFileAsserts; -import androidx.media3.transformer.TestUtil.TestMuxerFactory.TestMuxerHolder; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.collect.ImmutableList; @@ -53,13 +52,13 @@ public class CompositionExportTest { private Context context; private String outputPath; - private TestMuxerHolder testMuxerHolder; + private TestMuxer.Holder muxerHolder; @Before public void setUp() throws Exception { context = ApplicationProvider.getApplicationContext(); outputPath = Util.createTempFile(context, "TransformerTest").getPath(); - testMuxerHolder = new TestMuxerHolder(); + muxerHolder = new TestMuxer.Holder(); createEncodersAndDecoders(); } @@ -73,7 +72,7 @@ public class CompositionExportTest { public void start_audioVideoTransmuxedFromDifferentSequences_producesExpectedResult() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); transformer.start(mediaItem, outputPath); ExportResult expectedExportResult = TransformerTestRunner.runLooper(transformer); @@ -105,7 +104,7 @@ public class CompositionExportTest { @Test public void start_loopingTransmuxedAudio_producesExpectedResult() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem audioEditedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build(); EditedMediaItemSequence audioSequence = @@ -135,7 +134,7 @@ public class CompositionExportTest { @Test public void start_loopingTransmuxedVideo_producesExpectedResult() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem audioEditedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build(); EditedMediaItemSequence audioSequence = @@ -165,7 +164,7 @@ public class CompositionExportTest { @Test public void start_loopingRawAudio_producesExpectedResult() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItemSequence audioSequence = new EditedMediaItemSequence( ImmutableList.of( @@ -198,7 +197,7 @@ public class CompositionExportTest { @Test public void start_compositionOfConcurrentAudio_isCorrect() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem rawAudioItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build(); @@ -215,15 +214,13 @@ public class CompositionExportTest { assertThat(exportResult.processedInputs).hasSize(2); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_RAW + ".concurrent")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".concurrent")); } @Test public void start_audioVideoCompositionWithExtraAudio_isCorrect() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem audioVideoItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO)) .build(); @@ -250,7 +247,7 @@ public class CompositionExportTest { @Test public void start_audioVideoCompositionWithLoopingAudio_isCorrect() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem audioVideoItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO)) .build(); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java index ae8bef227b..d4bee63421 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java @@ -73,8 +73,6 @@ import androidx.media3.extractor.PositionHolder; import androidx.media3.test.utils.DumpFileAsserts; import androidx.media3.test.utils.FakeClock; import androidx.media3.transformer.TestUtil.FakeAssetLoader; -import androidx.media3.transformer.TestUtil.TestMuxerFactory; -import androidx.media3.transformer.TestUtil.TestMuxerFactory.TestMuxerHolder; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.collect.ImmutableList; @@ -105,7 +103,7 @@ public final class MediaItemExportTest { private Context context; private String outputPath; - private TestMuxerHolder testMuxerHolder; + private TestMuxer.Holder muxerHolder; private ProgressHolder progressHolder; private ArgumentCaptor compositionArgumentCaptor; @@ -113,7 +111,7 @@ public final class MediaItemExportTest { public void setUp() throws Exception { context = ApplicationProvider.getApplicationContext(); outputPath = Util.createTempFile(context, "TransformerTest").getPath(); - testMuxerHolder = new TestMuxerHolder(); + muxerHolder = new TestMuxer.Holder(); progressHolder = new ProgressHolder(); compositionArgumentCaptor = ArgumentCaptor.forClass(Composition.class); createEncodersAndDecoders(); @@ -128,20 +126,20 @@ public final class MediaItemExportTest { @Test public void start_videoOnlyPassthrough_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); transformer.start(mediaItem, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_VIDEO_ONLY)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_VIDEO_ONLY)); } @Test public void start_audioOnlyPassthrough_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER); transformer.start(mediaItem, outputPath); @@ -149,14 +147,14 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_ENCODER)); } @Test public void start_audioOnlyTranscoding_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); @@ -165,27 +163,27 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_RAW + ".aac")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".aac")); } @Test public void start_audioAndVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); transformer.start(mediaItem, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO)); } @Test public void start_audioAndVideo_withClippingStartAtKeyFrame_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = new MediaItem.Builder() .setUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S) @@ -202,14 +200,14 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S + ".clipped")); } @Test public void start_withSubtitles_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAudioMimeType(MimeTypes.AUDIO_AAC) .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES); @@ -218,13 +216,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_WITH_SUBTITLES)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_WITH_SUBTITLES)); } @Test public void start_successiveExports_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); // Transform first media item. @@ -237,13 +235,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO)); } @Test public void start_concurrentExports_throwsError() { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); transformer.start(mediaItem, outputPath); @@ -254,7 +252,7 @@ public final class MediaItemExportTest { @Test public void start_removeAudio_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)) .setRemoveAudio(true) @@ -264,15 +262,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_VIDEO + ".noaudio")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".noaudio")); } @Test public void start_removeVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)) .setRemoveVideo(true) @@ -282,15 +278,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_VIDEO + ".novideo")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".novideo")); } @Test public void start_forceAudioTrackOnAudioOnly_isIgnored() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build(); EditedMediaItemSequence sequence = @@ -305,14 +299,14 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_ENCODER)); } @Test public void start_forceAudioTrackOnAudioVideo_isIgnored() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build(); EditedMediaItemSequence sequence = @@ -326,13 +320,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO)); } @Test public void start_forceAudioTrackAndRemoveAudio_generatesSilentAudio() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)) .setRemoveAudio(true) @@ -349,7 +343,7 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".silentaudio")); } @@ -357,7 +351,7 @@ public final class MediaItemExportTest { public void start_forceAudioTrackAndRemoveAudioWithEffects_generatesSilentAudio() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor(); sonicAudioProcessor.setOutputSampleRateHz(48000); EditedMediaItem editedMediaItem = @@ -377,14 +371,14 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".silentaudio_48000hz")); } @Test public void start_forceAudioTrackAndRemoveVideo_isIgnored() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)) .setRemoveVideo(true) @@ -399,15 +393,13 @@ public final class MediaItemExportTest { transformer.start(composition, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_VIDEO + ".novideo")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".novideo")); } @Test public void start_forceAudioTrackOnVideoOnly_generatesSilentAudio() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build(); EditedMediaItemSequence sequence = @@ -422,7 +414,7 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_VIDEO_ONLY + ".silentaudio")); } @@ -431,7 +423,7 @@ public final class MediaItemExportTest { SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor(); sonicAudioProcessor.setOutputSampleRateHz(48000); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); ImmutableList audioProcessors = ImmutableList.of(sonicAudioProcessor); Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of()); @@ -442,9 +434,7 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); } @Test @@ -452,7 +442,7 @@ public final class MediaItemExportTest { SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor(); sonicAudioProcessor.setOutputSampleRateHz(48000); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); ImmutableList audioProcessors = ImmutableList.of(sonicAudioProcessor); Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of()); @@ -469,9 +459,7 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); } @Test @@ -480,7 +468,7 @@ public final class MediaItemExportTest { Transformer.Listener mockListener2 = mock(Transformer.Listener.class); Transformer.Listener mockListener3 = mock(Transformer.Listener.class); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .addListener(mockListener1) .addListener(mockListener2) .addListener(mockListener3) @@ -502,7 +490,7 @@ public final class MediaItemExportTest { Transformer.Listener mockListener2 = mock(Transformer.Listener.class); Transformer.Listener mockListener3 = mock(Transformer.Listener.class); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .addListener(mockListener1) .addListener(mockListener2) .addListener(mockListener3) @@ -530,7 +518,7 @@ public final class MediaItemExportTest { TransformationRequest fallbackTransformationRequest = new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ true) + createTransformerBuilder(muxerHolder, /* enableFallback= */ true) .addListener(mockListener1) .addListener(mockListener2) .addListener(mockListener3) @@ -559,7 +547,7 @@ public final class MediaItemExportTest { AtomicBoolean deprecatedFallbackCalled1 = new AtomicBoolean(); AtomicBoolean deprecatedFallbackCalled2 = new AtomicBoolean(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .addListener( new Transformer.Listener() { @Override @@ -591,7 +579,7 @@ public final class MediaItemExportTest { AtomicBoolean deprecatedFallbackCalled2 = new AtomicBoolean(); AtomicBoolean deprecatedFallbackCalled3 = new AtomicBoolean(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .addListener( new Transformer.Listener() { @Override @@ -636,7 +624,7 @@ public final class MediaItemExportTest { public void start_withFallback_callsDeprecatedFallbackCallbacks() throws Exception { AtomicBoolean deprecatedFallbackCalled = new AtomicBoolean(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ true) + createTransformerBuilder(muxerHolder, /* enableFallback= */ true) .addListener( new Transformer.Listener() { @Override @@ -663,7 +651,7 @@ public final class MediaItemExportTest { Transformer.Listener mockListener2 = mock(Transformer.Listener.class); Transformer.Listener mockListener3 = mock(Transformer.Listener.class); Transformer transformer1 = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .addListener(mockListener1) .addListener(mockListener2) .addListener(mockListener3) @@ -682,7 +670,7 @@ public final class MediaItemExportTest { @Test public void start_flattenForSlowMotion_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SEF_SLOW_MOTION)) .setFlattenForSlowMotion(true) @@ -692,15 +680,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_WITH_SEF_SLOW_MOTION)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_WITH_SEF_SLOW_MOTION)); } @Test public void start_completesWithValidBitrate() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); transformer.start(mediaItem, outputPath); @@ -713,7 +699,7 @@ public final class MediaItemExportTest { @Test public void start_withAudioEncoderFormatUnsupported_completesWithError() { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAudioMimeType(MimeTypes.AUDIO_AMR_NB) // unsupported by encoder, supported by muxer .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER); @@ -729,7 +715,7 @@ public final class MediaItemExportTest { @Test public void start_withAudioDecoderFormatUnsupported_completesWithError() { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER); @@ -745,7 +731,7 @@ public final class MediaItemExportTest { @Test public void start_withIoError_completesWithError() { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri("asset:///non-existing-path.mp4"); transformer.start(mediaItem, outputPath); @@ -764,7 +750,7 @@ public final class MediaItemExportTest { TransformationRequest fallbackTransformationRequest = new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .addListener(mockListener) .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER); @@ -774,7 +760,7 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback")); verify(mockListener) .onFallbackApplied( @@ -791,7 +777,7 @@ public final class MediaItemExportTest { TransformationRequest fallbackTransformationRequest = new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ true) + createTransformerBuilder(muxerHolder, /* enableFallback= */ true) .addListener(mockListener) .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER); @@ -801,7 +787,7 @@ public final class MediaItemExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback")); verify(mockListener) .onFallbackApplied( @@ -824,9 +810,9 @@ public final class MediaItemExportTest { new FakeClock(/* isAutoAdvancing= */ true), mediaSourceFactory); Muxer.Factory muxerFactory = - new TestMuxerFactory(testMuxerHolder, /* maxDelayBetweenSamplesMs= */ 1); + new TestMuxer.Factory(muxerHolder, /* maxDelayBetweenSamplesMs= */ 1); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAssetLoaderFactory(assetLoaderFactory) .setMuxerFactory(muxerFactory) .build(); @@ -842,9 +828,9 @@ public final class MediaItemExportTest { @Test public void start_withUnsetMaxDelayBetweenSamples_completesSuccessfully() throws Exception { Muxer.Factory muxerFactory = - new TestMuxerFactory(testMuxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET); + new TestMuxer.Factory(muxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setMuxerFactory(muxerFactory) .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); @@ -853,13 +839,13 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO)); } @Test public void start_afterCancellation_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); transformer.start(mediaItem, outputPath); @@ -880,7 +866,7 @@ public final class MediaItemExportTest { anotherThread.start(); Looper looper = anotherThread.getLooper(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setLooper(looper) .build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); @@ -903,13 +889,13 @@ public final class MediaItemExportTest { assertThat(exception.get()).isNull(); DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO)); } @Test public void start_fromWrongThread_throwsError() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); HandlerThread anotherThread = new HandlerThread("AnotherThread"); AtomicReference illegalStateException = new AtomicReference<>(); @@ -936,7 +922,7 @@ public final class MediaItemExportTest { public void start_withAssetLoaderAlwaysDecoding_exporterExpectsDecoded() throws Exception { AtomicReference sampleConsumerRef = new AtomicReference<>(); Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAssetLoaderFactory( new FakeAssetLoader.Factory(SUPPORTED_OUTPUT_TYPE_DECODED, sampleConsumerRef)) .build(); @@ -951,7 +937,7 @@ public final class MediaItemExportTest { @Test public void start_withAssetLoaderNotDecodingAndDecodingNeeded_completesWithError() { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false) + createTransformerBuilder(muxerHolder, /* enableFallback= */ false) .setAssetLoaderFactory( new FakeAssetLoader.Factory( SUPPORTED_OUTPUT_TYPE_ENCODED, /* sampleConsumerRef= */ null)) @@ -972,7 +958,7 @@ public final class MediaItemExportTest { @Test public void start_withNoOpEffects_transmuxes() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); int mediaItemHeightPixels = 720; ImmutableList videoEffects = @@ -988,13 +974,13 @@ public final class MediaItemExportTest { // Video transcoding in unit tests is not supported. DumpFileAsserts.assertOutput( - context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_VIDEO_ONLY)); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_VIDEO_ONLY)); } @Test public void start_withOnlyRegularRotationEffect_transmuxesAndRotates() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); ImmutableList videoEffects = ImmutableList.of( @@ -1008,15 +994,13 @@ public final class MediaItemExportTest { // Video transcoding in unit tests is not supported. DumpFileAsserts.assertOutput( - context, - checkNotNull(testMuxerHolder.testMuxer), - getDumpFileName(FILE_AUDIO_VIDEO + ".rotated")); + context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".rotated")); } @Test public void getProgress_knownDuration_returnsConsistentStates() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); AtomicInteger previousProgressState = new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY); @@ -1063,7 +1047,7 @@ public final class MediaItemExportTest { @Test public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); List progresses = new ArrayList<>(); Handler progressHandler = @@ -1098,7 +1082,7 @@ public final class MediaItemExportTest { @Test public void getProgress_noCurrentExport_returnsNotStarted() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); @Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder); @@ -1113,7 +1097,7 @@ public final class MediaItemExportTest { @Test public void getProgress_unknownDuration_returnsConsistentStates() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION); AtomicInteger previousProgressState = new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY); @@ -1157,7 +1141,7 @@ public final class MediaItemExportTest { @Test public void getProgress_fromWrongThread_throwsError() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); HandlerThread anotherThread = new HandlerThread("AnotherThread"); AtomicReference illegalStateException = new AtomicReference<>(); CountDownLatch countDownLatch = new CountDownLatch(1); @@ -1182,7 +1166,7 @@ public final class MediaItemExportTest { @Test public void cancel_afterCompletion_doesNotThrow() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY); transformer.start(mediaItem, outputPath); @@ -1193,7 +1177,7 @@ public final class MediaItemExportTest { @Test public void cancel_fromWrongThread_throwsError() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); HandlerThread anotherThread = new HandlerThread("AnotherThread"); AtomicReference illegalStateException = new AtomicReference<>(); CountDownLatch countDownLatch = new CountDownLatch(1); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/SequenceExportTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/SequenceExportTest.java index 4f93cb1aea..fa2a0d164f 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/SequenceExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/SequenceExportTest.java @@ -36,7 +36,6 @@ import androidx.media3.common.audio.SonicAudioProcessor; import androidx.media3.common.util.Util; import androidx.media3.effect.RgbFilter; import androidx.media3.test.utils.DumpFileAsserts; -import androidx.media3.transformer.TestUtil.TestMuxerFactory.TestMuxerHolder; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.collect.ImmutableList; @@ -63,13 +62,13 @@ public final class SequenceExportTest { private Context context; private String outputPath; - private TestMuxerHolder testMuxerHolder; + private TestMuxer.Holder muxerHolder; @Before public void setUp() throws Exception { context = ApplicationProvider.getApplicationContext(); outputPath = Util.createTempFile(context, "TransformerTest").getPath(); - testMuxerHolder = new TestMuxerHolder(); + muxerHolder = new TestMuxer.Holder(); createEncodersAndDecoders(); } @@ -82,7 +81,7 @@ public final class SequenceExportTest { @Test public void start_concatenateSameMediaItemWithTransmux_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build(); EditedMediaItemSequence editedMediaItemSequence = @@ -98,7 +97,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated_transmux")); } @@ -106,7 +105,7 @@ public final class SequenceExportTest { public void start_concatenateSameMediaItemWithEffectsAndTransmux_ignoresEffects() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f); Effect videoEffect = RgbFilter.createGrayscaleFilter(); @@ -127,7 +126,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated_transmux")); } @@ -135,7 +134,7 @@ public final class SequenceExportTest { public void start_concatenateClippedMediaItemsWithTransmux_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem.ClippingConfiguration clippingConfiguration1 = new MediaItem.ClippingConfiguration.Builder() .setStartPositionMs(0) // Corresponds to key frame. @@ -171,7 +170,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName( FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S + ".clipped_concatenated_transmux")); } @@ -180,7 +179,7 @@ public final class SequenceExportTest { public void concatenateAudioAndSilence_withTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem audioVideoMediaItem = new EditedMediaItem.Builder(mediaItem).build(); EditedMediaItem videoOnlyMediaItem = @@ -198,7 +197,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".audio_then_silence")); } @@ -206,7 +205,7 @@ public final class SequenceExportTest { public void concatenateSilenceAndAudio_withTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem videoOnlyMediaItem = new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build(); @@ -224,7 +223,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_audio")); } @@ -232,7 +231,7 @@ public final class SequenceExportTest { public void concatenateAudioAndSilence_withEffectsAndTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem audioEditedMediaItem = new EditedMediaItem.Builder(mediaItem) @@ -262,7 +261,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".audio_then_silence_with_effects")); } @@ -270,7 +269,7 @@ public final class SequenceExportTest { public void concatenateSilenceAndAudio_withEffectsAndTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem noAudioEditedMediaItem = new EditedMediaItem.Builder(mediaItem) @@ -301,7 +300,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_audio_with_effects")); } @@ -309,7 +308,7 @@ public final class SequenceExportTest { public void concatenateSilenceAndSilence_withTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem videoOnlyMediaItem = new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build(); @@ -326,7 +325,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence")); } @@ -334,7 +333,7 @@ public final class SequenceExportTest { public void concatenateEditedSilenceAndSilence_withTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem silenceWithEffectsItem = new EditedMediaItem.Builder(mediaItem) @@ -365,7 +364,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence-effects_then_silence")); } @@ -373,7 +372,7 @@ public final class SequenceExportTest { public void concatenateSilenceAndEditedSilence_withTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem silenceWithEffectsItem = new EditedMediaItem.Builder(mediaItem) @@ -404,7 +403,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence-effects")); } @@ -412,7 +411,7 @@ public final class SequenceExportTest { public void concatenateSilenceAndSilence_withEffectsAndTransmuxVideo_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO); EditedMediaItem firstItem = new EditedMediaItem.Builder(mediaItem) @@ -443,14 +442,14 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence_with_effects")); } @Test public void concatenateTwoAudioItems_withSameFormat_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(audioOnlyMediaItem).build(); EditedMediaItemSequence editedMediaItemSequence = @@ -463,7 +462,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".concatenated")); } @@ -471,7 +470,7 @@ public final class SequenceExportTest { public void concatenateTwoAudioItems_withSameFormatAndSameEffects_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f); Effects effects = @@ -488,7 +487,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".concatenated_high_pitch")); } @@ -496,7 +495,7 @@ public final class SequenceExportTest { public void concatenateTwoAudioItems_withSameFormatAndDiffEffects_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); Effects highPitchEffects = new Effects( @@ -525,14 +524,14 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".high_pitch_then_low_pitch")); } @Test public void concatenateTwoAudioItems_withDiffFormat_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); MediaItem stereo48000Audio = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ); MediaItem mono44100Audio = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); @@ -549,7 +548,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "_then_sample.wav")); } @@ -557,7 +556,7 @@ public final class SequenceExportTest { public void concatenateTwoAudioItems_withDiffFormatAndSameEffects_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); Effects highPitch = new Effects( @@ -584,7 +583,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "-high_pitch_then_sample.wav-high_pitch")); } @@ -592,7 +591,7 @@ public final class SequenceExportTest { public void concatenateTwoAudioItems_withDiffFormatAndDiffEffects_completesSuccessfully() throws Exception { Transformer transformer = - createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build(); + createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build(); EditedMediaItem stereo48000AudioHighPitch = new EditedMediaItem.Builder( @@ -620,7 +619,7 @@ public final class SequenceExportTest { DumpFileAsserts.assertOutput( context, - checkNotNull(testMuxerHolder.testMuxer), + checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "-high_pitch_then_sample.wav-low_pitch")); } } diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java b/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java index e1c4d32db5..d8161ae438 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java @@ -15,11 +15,13 @@ */ package androidx.media3.transformer; +import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; import androidx.media3.test.utils.DumpableFormat; import androidx.media3.test.utils.Dumper; +import com.google.common.collect.ImmutableList; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; @@ -34,13 +36,43 @@ import java.util.Map; */ public final class TestMuxer implements Muxer, Dumper.Dumpable { + public static final class Holder { + @Nullable public TestMuxer muxer; + } + + public static final class Factory implements Muxer.Factory { + + private final Holder muxerHolder; + private final Muxer.Factory defaultMuxerFactory; + + public Factory(Holder muxerHolder) { + this(muxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET); + } + + public Factory(Holder muxerHolder, long maxDelayBetweenSamplesMs) { + this.muxerHolder = muxerHolder; + defaultMuxerFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs); + } + + @Override + public Muxer create(String path) throws Muxer.MuxerException { + muxerHolder.muxer = new TestMuxer(defaultMuxerFactory.create(path)); + return muxerHolder.muxer; + } + + @Override + public ImmutableList getSupportedSampleMimeTypes(@C.TrackType int trackType) { + return defaultMuxerFactory.getSupportedSampleMimeTypes(trackType); + } + } + private final Muxer muxer; private final Map> trackIndexToSampleDumpables; private final List dumpables; /** Creates a new test muxer. */ - public TestMuxer(String path, Muxer.Factory muxerFactory) throws MuxerException { - muxer = muxerFactory.create(path); + private TestMuxer(Muxer muxer) { + this.muxer = muxer; dumpables = new ArrayList<>(); trackIndexToSampleDumpables = new HashMap<>(); } 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 297de0cad4..6ada6e6265 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/TestUtil.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/TestUtil.java @@ -43,36 +43,6 @@ import org.robolectric.shadows.ShadowMediaCodecList; @UnstableApi public final class TestUtil { - public static final class TestMuxerFactory implements Muxer.Factory { - - public static final class TestMuxerHolder { - @Nullable public TestMuxer testMuxer; - } - - private final TestMuxerHolder testMuxerHolder; - private final Muxer.Factory defaultMuxerFactory; - - public TestMuxerFactory(TestMuxerHolder testMuxerHolder) { - this(testMuxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET); - } - - public TestMuxerFactory(TestMuxerHolder testMuxerHolder, long maxDelayBetweenSamplesMs) { - this.testMuxerHolder = testMuxerHolder; - defaultMuxerFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs); - } - - @Override - public Muxer create(String path) throws Muxer.MuxerException { - testMuxerHolder.testMuxer = new TestMuxer(path, defaultMuxerFactory); - return testMuxerHolder.testMuxer; - } - - @Override - public ImmutableList getSupportedSampleMimeTypes(@C.TrackType int trackType) { - return defaultMuxerFactory.getSupportedSampleMimeTypes(trackType); - } - } - public static final class FakeAssetLoader implements AssetLoader { public static final class Factory implements AssetLoader.Factory { @@ -234,11 +204,11 @@ public final class TestUtil { } public static Transformer.Builder createTransformerBuilder( - TestMuxerFactory.TestMuxerHolder testMuxerHolder, boolean enableFallback) { + TestMuxer.Holder testMuxerHolder, boolean enableFallback) { Context context = ApplicationProvider.getApplicationContext(); return new Transformer.Builder(context) .setClock(new FakeClock(/* isAutoAdvancing= */ true)) - .setMuxerFactory(new TestMuxerFactory(testMuxerHolder)) + .setMuxerFactory(new TestMuxer.Factory(testMuxerHolder)) .setEncoderFactory( new DefaultEncoderFactory.Builder(context).setEnableFallback(enableFallback).build()); }