mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Don't optimize for trim if the media is not clipped
PiperOrigin-RevId: 688120868
This commit is contained in:
parent
0ecd35e24c
commit
73790cf2a4
@ -1084,7 +1084,9 @@ public final class Transformer {
|
||||
public void start(Composition composition, String path) {
|
||||
verifyApplicationThread();
|
||||
initialize(composition, path);
|
||||
if (!trimOptimizationEnabled || isMultiAsset()) {
|
||||
if (shouldOptimizeForTrimming()) {
|
||||
processMediaBeforeFirstSyncSampleAfterTrimStartTime();
|
||||
} else {
|
||||
startInternal(
|
||||
composition,
|
||||
new MuxerWrapper(
|
||||
@ -1098,8 +1100,6 @@ public final class Transformer {
|
||||
componentListener,
|
||||
/* initialTimestampOffsetUs= */ 0,
|
||||
/* useDefaultAssetLoaderFactory= */ false);
|
||||
} else {
|
||||
processMediaBeforeFirstSyncSampleAfterTrimStartTime();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1225,6 +1225,26 @@ public final class Transformer {
|
||||
: transformerInternal.getProgress(progressHolder);
|
||||
}
|
||||
|
||||
private boolean shouldOptimizeForTrimming() {
|
||||
if (isMultiAsset()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MediaItem.ClippingConfiguration clippingConfiguration =
|
||||
checkNotNull(composition)
|
||||
.sequences
|
||||
.get(0)
|
||||
.editedMediaItems
|
||||
.get(0)
|
||||
.mediaItem
|
||||
.clippingConfiguration;
|
||||
if (clippingConfiguration.equals(MediaItem.ClippingConfiguration.UNSET)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return trimOptimizationEnabled;
|
||||
}
|
||||
|
||||
private boolean isExportResumed() {
|
||||
return transformerState == TRANSFORMER_STATE_REMUX_PROCESSED_VIDEO
|
||||
|| transformerState == TRANSFORMER_STATE_PROCESS_REMAINING_VIDEO
|
||||
|
@ -23,6 +23,7 @@ import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_NA;
|
||||
import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_TRANSMUXED;
|
||||
import static androidx.media3.transformer.ExportResult.OPTIMIZATION_ABANDONED_KEYFRAME_PLACEMENT_OPTIMAL_FOR_TRIM;
|
||||
import static androidx.media3.transformer.ExportResult.OPTIMIZATION_FAILED_EXTRACTION_FAILED;
|
||||
import static androidx.media3.transformer.ExportResult.OPTIMIZATION_NONE;
|
||||
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;
|
||||
@ -216,7 +217,7 @@ public final class MediaItemExportTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void start_trimOptimizationEnabled_clippingConfigurationUnset_outputMatchesOriginal()
|
||||
public void start_trimOptimizationEnabled_clippingConfigurationUnset_doesNotOptimize()
|
||||
throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ false);
|
||||
Transformer transformer =
|
||||
@ -231,50 +232,7 @@ public final class MediaItemExportTest {
|
||||
transformer.start(mediaItem, outputDir.newFile().getPath());
|
||||
ExportResult result = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(result.optimizationResult)
|
||||
.isEqualTo(OPTIMIZATION_ABANDONED_KEYFRAME_PLACEMENT_OPTIMAL_FOR_TRIM);
|
||||
// Asserts against file generated when experimentalSetTrimOptimizationEnabled is set to false.
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getDumpFileName(/* originalFileName= */ FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S));
|
||||
assertThat(result.videoConversionProcess).isEqualTo(CONVERSION_PROCESS_TRANSMUXED);
|
||||
assertThat(result.audioConversionProcess).isEqualTo(CONVERSION_PROCESS_TRANSMUXED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void
|
||||
start_trimOptimizationEnabled_clippingConfigurationUnsetAndRotated_outputMatchesOriginalRotated()
|
||||
throws Exception {
|
||||
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ false);
|
||||
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false)
|
||||
.experimentalSetTrimOptimizationEnabled(true)
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
new MediaItem.Builder()
|
||||
.setUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S)
|
||||
.build();
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(
|
||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
transformer.start(editedMediaItem, outputDir.newFile().getPath());
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.optimizationResult)
|
||||
.isEqualTo(OPTIMIZATION_ABANDONED_KEYFRAME_PLACEMENT_OPTIMAL_FOR_TRIM);
|
||||
// Asserts against file generated when experimentalSetTrimOptimizationEnabled is set to false.
|
||||
DumpFileAsserts.assertOutput(
|
||||
context,
|
||||
muxerFactory.getCreatedMuxer(),
|
||||
getDumpFileName(
|
||||
/* originalFileName= */ FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S,
|
||||
/* modifications...= */ "rotated"));
|
||||
assertThat(result.optimizationResult).isEqualTo(OPTIMIZATION_NONE);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user