From be5b29d92dd1abb278f4b4d660886bf0dfb17e22 Mon Sep 17 00:00:00 2001 From: tofunmi Date: Thu, 7 Dec 2023 02:50:10 -0800 Subject: [PATCH] Update ExportResult.OptimizationResult options Added a new ABANDONED option so one can tell the difference between when the optimization has been requested but not applied vs not requested at all. also changed the ordering do better represent the hierarchy of failure modes PiperOrigin-RevId: 588720513 --- .../media3/transformer/TransformerEndToEndTest.java | 4 ++-- .../androidx/media3/transformer/ExportResult.java | 13 ++++++++----- .../androidx/media3/transformer/Transformer.java | 5 +++-- .../media3/transformer/MediaItemExportTest.java | 9 +++++---- 4 files changed, 18 insertions(+), 13 deletions(-) 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 d21cb4b960..9ca40982f0 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java @@ -28,6 +28,7 @@ import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects; import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap; import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped; +import static androidx.media3.transformer.ExportResult.OPTIMIZATION_SUCCEEDED; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import static org.junit.Assume.assumeTrue; @@ -473,8 +474,7 @@ public class TransformerEndToEndTest { .build() .run(testId, editedMediaItem); - assertThat(result.exportResult.optimizationResult) - .isEqualTo(ExportResult.OPTIMIZATION_SUCCEEDED); + assertThat(result.exportResult.optimizationResult).isEqualTo(OPTIMIZATION_SUCCEEDED); assertThat(result.exportResult.durationMs).isAtMost(2000); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java index 9b5c30b12f..c111826310 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExportResult.java @@ -290,7 +290,7 @@ public final class ExportResult { /** * Specifies the result of an optimized operation, such as {@link * Transformer.Builder#experimentalSetTrimOptimizationEnabled}. One of {@link #OPTIMIZATION_NONE}, - * {@link #OPTIMIZATION_SUCCEEDED}, {@link #OPTIMIZATION_FAILED_NO_VIDEO_TRACK_TO_TRIM} or {@link + * {@link #OPTIMIZATION_SUCCEEDED}, {@link #OPTIMIZATION_ABANDONED}, or {@link * #OPTIMIZATION_FAILED_EXTRACTION_FAILED}. */ @Documented @@ -299,8 +299,8 @@ public final class ExportResult { @IntDef({ OPTIMIZATION_NONE, OPTIMIZATION_SUCCEEDED, - OPTIMIZATION_FAILED_NO_VIDEO_TRACK_TO_TRIM, - OPTIMIZATION_FAILED_EXTRACTION_FAILED + OPTIMIZATION_ABANDONED, + OPTIMIZATION_FAILED_EXTRACTION_FAILED, }) @interface OptimizationResult {} @@ -310,8 +310,11 @@ public final class ExportResult { /** The optimization was successfully applied. */ public static final int OPTIMIZATION_SUCCEEDED = 1; - /** The trim optimization failed because there was no video track. Normal export proceeded. */ - public static final int OPTIMIZATION_FAILED_NO_VIDEO_TRACK_TO_TRIM = 2; + /** + * The requested optimization would not improve performance so it was abandoned. Normal export + * proceeded. + */ + public static final int OPTIMIZATION_ABANDONED = 2; /** * The optimization failed because mp4 metadata extraction failed (possibly because the file diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index 6ba2e6527d..5e2d265440 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -20,8 +20,8 @@ import static androidx.media3.common.util.Assertions.checkArgument; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.transformer.Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR; +import static androidx.media3.transformer.ExportResult.OPTIMIZATION_ABANDONED; import static androidx.media3.transformer.ExportResult.OPTIMIZATION_FAILED_EXTRACTION_FAILED; -import static androidx.media3.transformer.ExportResult.OPTIMIZATION_FAILED_NO_VIDEO_TRACK_TO_TRIM; import static androidx.media3.transformer.TransmuxTranscodeHelper.buildNewCompositionWithClipTimes; import static java.lang.annotation.ElementType.TYPE_USE; @@ -1238,7 +1238,7 @@ public final class Transformer { if (mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs == C.TIME_UNSET || (trimEndTimeUs != C.TIME_END_OF_SOURCE && trimEndTimeUs < mp4MetadataInfo.firstSyncSampleTimestampUsAfterTimeUs)) { - exportResultBuilder.setOptimizationResult(OPTIMIZATION_FAILED_NO_VIDEO_TRACK_TO_TRIM); + exportResultBuilder.setOptimizationResult(OPTIMIZATION_ABANDONED); processFullInput(); return; } @@ -1253,6 +1253,7 @@ public final class Transformer { firstMediaItem.clippingConfiguration.endPositionUs, mp4MetadataInfo.durationUs, /* startsAtKeyFrame= */ true); + exportResultBuilder.setOptimizationResult(OPTIMIZATION_ABANDONED); processFullInput(); return; } 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 57db7ca0cb..319179a997 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java @@ -19,6 +19,8 @@ package androidx.media3.transformer; import static androidx.media3.test.utils.robolectric.RobolectricUtil.runLooperUntil; import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_DECODED; import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_ENCODED; +import static androidx.media3.transformer.ExportResult.OPTIMIZATION_ABANDONED; +import static androidx.media3.transformer.ExportResult.OPTIMIZATION_FAILED_EXTRACTION_FAILED; import static androidx.media3.transformer.TestUtil.ASSET_URI_PREFIX; import static androidx.media3.transformer.TestUtil.FILE_AUDIO_AMR_NB; import static androidx.media3.transformer.TestUtil.FILE_AUDIO_AMR_WB; @@ -167,7 +169,7 @@ public final class MediaItemExportTest { transformer.start(mediaItem, outputDir.newFile().getPath()); ExportResult exportResult = TransformerTestRunner.runLooper(transformer); - assertThat(exportResult.optimizationResult).isEqualTo(ExportResult.OPTIMIZATION_NONE); + assertThat(exportResult.optimizationResult).isEqualTo(OPTIMIZATION_ABANDONED); // Asserts against file generated when experimentalSetTrimOptimizationEnabled is set to false. DumpFileAsserts.assertOutput( context, @@ -195,7 +197,7 @@ public final class MediaItemExportTest { transformer.start(mediaItem, outputDir.newFile().getPath()); ExportResult exportResult = TransformerTestRunner.runLooper(transformer); - assertThat(exportResult.optimizationResult).isEqualTo(ExportResult.OPTIMIZATION_NONE); + assertThat(exportResult.optimizationResult).isEqualTo(OPTIMIZATION_ABANDONED); DumpFileAsserts.assertOutput( context, muxerFactory.getCreatedMuxer(), @@ -223,8 +225,7 @@ public final class MediaItemExportTest { transformer.start(mediaItem, outputDir.newFile().getPath()); ExportResult exportResult = TransformerTestRunner.runLooper(transformer); - assertThat(exportResult.optimizationResult).isNotEqualTo(ExportResult.OPTIMIZATION_SUCCEEDED); - assertThat(exportResult.optimizationResult).isNotEqualTo(ExportResult.OPTIMIZATION_NONE); + assertThat(exportResult.optimizationResult).isEqualTo(OPTIMIZATION_FAILED_EXTRACTION_FAILED); DumpFileAsserts.assertOutput( context, muxerFactory.getCreatedMuxer(),