mirror of
https://github.com/samsonjs/media.git
synced 2026-04-05 11:15:46 +00:00
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:
parent
cd346ca14d
commit
be5b29d92d
4 changed files with 18 additions and 13 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
Loading…
Reference in a new issue