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
This commit is contained in:
tofunmi 2023-12-07 02:50:10 -08:00 committed by Copybara-Service
parent cd346ca14d
commit be5b29d92d
4 changed files with 18 additions and 13 deletions

View file

@ -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);
}

View file

@ -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

View file

@ -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;
}

View file

@ -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(),