From 209ecce6b392d10f7eda781c2c314e84fa397652 Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Tue, 1 Apr 2025 06:34:34 -0700 Subject: [PATCH] Change getVideoTrackOutput() to getTrackOutput() The updated method can be used for audio as well. PiperOrigin-RevId: 742673561 --- .../media3/transformer/AndroidTestUtil.java | 16 ++++++++++++---- .../transformer/TransformerEndToEndTest.java | 6 +++--- .../media3/transformer/TransformerGapsTest.java | 17 +++++++++-------- 3 files changed, 24 insertions(+), 15 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 875aaa50b7..7ae068aa31 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -69,6 +69,7 @@ import androidx.media3.effect.ScaleAndRotateTransformation; import androidx.media3.effect.SingleInputVideoGraph; import androidx.media3.exoplayer.mediacodec.MediaCodecSelector; import androidx.media3.exoplayer.mediacodec.MediaCodecUtil; +import androidx.media3.extractor.ExtractorOutput; import androidx.media3.muxer.MuxerException; import androidx.media3.test.utils.BitmapPixelTestUtil; import androidx.media3.test.utils.FakeExtractorOutput; @@ -1239,14 +1240,21 @@ public final class AndroidTestUtil { } /** - * Returns the {@linkplain FakeTrackOutput video track} from the {@link FakeExtractorOutput} or - * {@code null} if a video track is not found. + * Returns a {@link FakeTrackOutput} of given {@link C.TrackType} from the {@link + * FakeExtractorOutput}. + * + * @param extractorOutput The {@link ExtractorOutput} to get the {@link FakeTrackOutput} from. + * @param trackType The {@link C.TrackType}. + * @return The {@link FakeTrackOutput} or {@code null} if a track is not found. */ @Nullable - public static FakeTrackOutput getVideoTrackOutput(FakeExtractorOutput extractorOutput) { + public static FakeTrackOutput getTrackOutput( + FakeExtractorOutput extractorOutput, @C.TrackType int trackType) { for (int i = 0; i < extractorOutput.numberOfTracks; i++) { FakeTrackOutput trackOutput = extractorOutput.trackOutputs.get(i); - if (MimeTypes.isVideo(checkNotNull(trackOutput.lastFormat).sampleMimeType)) { + String sampleMimeType = checkNotNull(trackOutput.lastFormat).sampleMimeType; + if ((trackType == C.TRACK_TYPE_AUDIO && MimeTypes.isAudio(sampleMimeType)) + || (trackType == C.TRACK_TYPE_VIDEO && MimeTypes.isVideo(sampleMimeType))) { return trackOutput; } } diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java index 7732d5ace0..c1f1caafb5 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java @@ -47,7 +47,7 @@ import static androidx.media3.transformer.AndroidTestUtil.createFrameCountingEff import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects; import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap; import static androidx.media3.transformer.AndroidTestUtil.getMuxerFactoryBasedOnApi; -import static androidx.media3.transformer.AndroidTestUtil.getVideoTrackOutput; +import static androidx.media3.transformer.AndroidTestUtil.getTrackOutput; import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped; import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_NA; import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_TRANSCODED; @@ -1057,7 +1057,7 @@ public class TransformerEndToEndTest { TestUtil.extractAllSamplesFromFilePath(mp4Extractor, checkNotNull(result.filePath)); assertThat(result.exportResult.fileSizeBytes).isGreaterThan(0); List videoTimestampsUs = - checkNotNull(getVideoTrackOutput(fakeExtractorOutput)).getSampleTimesUs(); + checkNotNull(getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO)).getSampleTimesUs(); assertThat(videoTimestampsUs).hasSize(270); assertThat(videoTimestampsUs.get(0)).isEqualTo(0); // The second sample is originally at 1_033_333, clipping at 100_000 results in 933_333. @@ -1086,7 +1086,7 @@ public class TransformerEndToEndTest { TestUtil.extractAllSamplesFromFilePath(mp4Extractor, checkNotNull(result.filePath)); assertThat(result.exportResult.fileSizeBytes).isGreaterThan(0); List videoTimestampsUs = - checkNotNull(getVideoTrackOutput(fakeExtractorOutput)).getSampleTimesUs(); + checkNotNull(getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO)).getSampleTimesUs(); assertThat(videoTimestampsUs).hasSize(270); assertThat(videoTimestampsUs.get(0)).isEqualTo(0); // The second sample is originally at 1_033_333, clipping at 100_000 results in 933_333. diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerGapsTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerGapsTest.java index fea77ab6a7..7c4f9918c3 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerGapsTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerGapsTest.java @@ -17,11 +17,12 @@ package androidx.media3.transformer; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET; import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported; -import static androidx.media3.transformer.AndroidTestUtil.getVideoTrackOutput; +import static androidx.media3.transformer.AndroidTestUtil.getTrackOutput; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import android.content.Context; +import androidx.media3.common.C; import androidx.media3.common.MediaItem; import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.text.DefaultSubtitleParserFactory; @@ -98,7 +99,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1024ms with 30 fps. int expectedBlankFrames = 31; assertThat(videoTrackOutput.getSampleCount()) @@ -127,7 +128,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1024ms with 30 fps. int expectedBlankFrames = 31; assertThat(videoTrackOutput.getSampleCount()) @@ -183,7 +184,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1 sec with 30 fps. int expectedBlankFrames = 30; assertThat(videoTrackOutput.getSampleCount()) @@ -216,7 +217,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1 sec with 30 fps. int expectedBlankFrames = 30; assertThat(videoTrackOutput.getSampleCount()) @@ -271,7 +272,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1 sec with 30 fps. int expectedBlankFrames = 30; assertThat(videoTrackOutput.getSampleCount()) @@ -303,7 +304,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1 sec with 30 fps. int expectedBlankFrames = 30; assertThat(videoTrackOutput.getSampleCount()) @@ -336,7 +337,7 @@ public class TransformerGapsTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), result.filePath); - FakeTrackOutput videoTrackOutput = getVideoTrackOutput(fakeExtractorOutput); + FakeTrackOutput videoTrackOutput = getTrackOutput(fakeExtractorOutput, C.TRACK_TYPE_VIDEO); // The gap is for 1024ms with 30 fps. int expectedBlankFramesForAudioOnlyItem = 31; // The gap is for 1 sec with 30 fps.