Move removeAudio/Video to EditedMediaItem
Also add a Builder to EditedMediaItem to avoid having a constructor with many optional parameters, or a chain of constructors. PiperOrigin-RevId: 504588544
This commit is contained in:
parent
50beec56f4
commit
e8ffc7b6f8
@ -286,8 +286,6 @@ public final class TransformerActivity extends AppCompatActivity {
|
||||
transformerBuilder.setTransformationRequest(requestBuilder.build());
|
||||
|
||||
transformerBuilder
|
||||
.setRemoveAudio(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_AUDIO))
|
||||
.setRemoveVideo(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_VIDEO))
|
||||
.experimentalSetGenerateSilentAudio(
|
||||
bundle.getBoolean(ConfigurationActivity.GENERATE_SILENT_AUDIO))
|
||||
.setEncoderFactory(
|
||||
@ -345,14 +343,17 @@ public final class TransformerActivity extends AppCompatActivity {
|
||||
})
|
||||
private EditedMediaItem createEditedMediaItem(MediaItem mediaItem, @Nullable Bundle bundle)
|
||||
throws PackageManager.NameNotFoundException {
|
||||
EditedMediaItem.Builder editedMediaItemBuilder = new EditedMediaItem.Builder(mediaItem);
|
||||
if (bundle == null) {
|
||||
return new EditedMediaItem(mediaItem);
|
||||
return editedMediaItemBuilder.build();
|
||||
}
|
||||
|
||||
ImmutableList<AudioProcessor> audioProcessors = createAudioProcessorsFromBundle(bundle);
|
||||
ImmutableList<Effect> videoEffects = createVideoEffectsFromBundle(bundle);
|
||||
Effects effects = new Effects(audioProcessors, videoEffects);
|
||||
return new EditedMediaItem(mediaItem, effects);
|
||||
return editedMediaItemBuilder
|
||||
.setRemoveAudio(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_AUDIO))
|
||||
.setRemoveVideo(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_VIDEO))
|
||||
.setEffects(new Effects(audioProcessors, videoEffects))
|
||||
.build();
|
||||
}
|
||||
|
||||
private ImmutableList<AudioProcessor> createAudioProcessorsFromBundle(Bundle bundle) {
|
||||
|
@ -173,19 +173,6 @@ public class TransformerAndroidTestRunner {
|
||||
this.inputValues = inputValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the {@link MediaItem}, saving a summary of the transformation to the application
|
||||
* cache.
|
||||
*
|
||||
* @param testId A unique identifier for the transformer test run.
|
||||
* @param mediaItem The {@link MediaItem} to transform.
|
||||
* @return The {@link TransformationTestResult}.
|
||||
* @throws Exception The cause of the transformation not completing.
|
||||
*/
|
||||
public TransformationTestResult run(String testId, MediaItem mediaItem) throws Exception {
|
||||
return run(testId, new EditedMediaItem(mediaItem));
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms the {@link EditedMediaItem}, saving a summary of the transformation to the
|
||||
* application cache.
|
||||
|
@ -51,7 +51,8 @@ public class TransformerEndToEndTest {
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING));
|
||||
ImmutableList<Effect> videoEffects = ImmutableList.of(Presentation.createForHeight(480));
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
// Result of the following command:
|
||||
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames sample.mp4
|
||||
int expectedFrameCount = 30;
|
||||
@ -68,14 +69,14 @@ public class TransformerEndToEndTest {
|
||||
public void videoOnly_completesWithConsistentDuration() throws Exception {
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveAudio(true)
|
||||
.setEncoderFactory(
|
||||
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
||||
.build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING));
|
||||
ImmutableList<Effect> videoEffects = ImmutableList.of(Presentation.createForHeight(480));
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).setEffects(effects).build();
|
||||
long expectedDurationMs = 967;
|
||||
|
||||
TransformationTestResult result =
|
||||
@ -100,11 +101,12 @@ public class TransformerEndToEndTest {
|
||||
.setEndPositionMs(clippingEndMs)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
TransformationTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(/* testId= */ "clippedMedia_completesWithClippedDuration", mediaItem);
|
||||
.run(/* testId= */ "clippedMedia_completesWithClippedDuration", editedMediaItem);
|
||||
|
||||
assertThat(result.transformationResult.durationMs).isAtMost(clippingEndMs - clippingStartMs);
|
||||
}
|
||||
@ -114,6 +116,9 @@ public class TransformerEndToEndTest {
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setEncoderFactory(new VideoUnsupportedEncoderFactory(context))
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
|
||||
@ -125,7 +130,7 @@ public class TransformerEndToEndTest {
|
||||
.build()
|
||||
.run(
|
||||
/* testId= */ "videoEncoderFormatUnsupported_completesWithError",
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING))));
|
||||
editedMediaItem));
|
||||
|
||||
assertThat(exception).hasCauseThat().isInstanceOf(IllegalArgumentException.class);
|
||||
assertThat(exception.errorCode)
|
||||
|
@ -27,6 +27,7 @@ import androidx.media3.common.C;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.Log;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.TransformationException;
|
||||
import androidx.media3.transformer.TransformationRequest;
|
||||
import androidx.media3.transformer.TransformationTestResult;
|
||||
@ -67,11 +68,14 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
||||
TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
|
||||
.build();
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)));
|
||||
.run(testId, editedMediaItem);
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
|
||||
Log.i(TAG, "Transformed.");
|
||||
} catch (TransformationException exception) {
|
||||
@ -103,11 +107,14 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
||||
TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.build();
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)));
|
||||
.run(testId, editedMediaItem);
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
|
||||
Log.i(TAG, "Transformed.");
|
||||
} catch (TransformationException exception) {
|
||||
|
@ -74,12 +74,15 @@ public class HdrEditingTest {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
|
||||
.build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)));
|
||||
.run(testId, editedMediaItem);
|
||||
Log.i(TAG, "Transformed.");
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_ST2084);
|
||||
} catch (TransformationException exception) {
|
||||
@ -96,12 +99,15 @@ public class HdrEditingTest {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)));
|
||||
.run(testId, editedMediaItem);
|
||||
Log.i(TAG, "Transformed.");
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_HLG);
|
||||
} catch (TransformationException exception) {
|
||||
@ -127,7 +133,8 @@ public class HdrEditingTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
@ -151,7 +158,8 @@ public class HdrEditingTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
@ -194,7 +202,8 @@ public class HdrEditingTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
@ -249,7 +258,8 @@ public class HdrEditingTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
@ -283,11 +293,12 @@ public class HdrEditingTest {
|
||||
}
|
||||
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_1_SECOND_HDR10_VIDEO_SDR_CONTAINER));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(
|
||||
testId,
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_1_SECOND_HDR10_VIDEO_SDR_CONTAINER)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) {
|
||||
|
@ -59,7 +59,8 @@ public final class RepeatedTranscodeTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(45).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
Set<Long> differentOutputSizesBytes = new HashSet<>();
|
||||
for (int i = 0; i < TRANSCODE_COUNT; i++) {
|
||||
@ -83,7 +84,6 @@ public final class RepeatedTranscodeTest {
|
||||
new TransformerAndroidTestRunner.Builder(
|
||||
context,
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveAudio(true)
|
||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||
.build())
|
||||
.build();
|
||||
@ -92,7 +92,8 @@ public final class RepeatedTranscodeTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(45).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).setEffects(effects).build();
|
||||
|
||||
Set<Long> differentOutputSizesBytes = new HashSet<>();
|
||||
for (int i = 0; i < TRANSCODE_COUNT; i++) {
|
||||
@ -117,11 +118,14 @@ public final class RepeatedTranscodeTest {
|
||||
new TransformerAndroidTestRunner.Builder(
|
||||
context,
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveVideo(true)
|
||||
.setTransformationRequest(new TransformationRequest.Builder().build())
|
||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||
.build())
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveVideo(true).build();
|
||||
|
||||
Set<Long> differentOutputSizesBytes = new HashSet<>();
|
||||
for (int i = 0; i < TRANSCODE_COUNT; i++) {
|
||||
@ -129,7 +133,7 @@ public final class RepeatedTranscodeTest {
|
||||
TransformationTestResult testResult =
|
||||
transformerRunner.run(
|
||||
/* testId= */ "repeatedTranscodeNoVideo_givesConsistentLengthOutput_" + i,
|
||||
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS_URI_STRING)));
|
||||
editedMediaItem);
|
||||
differentOutputSizesBytes.add(checkNotNull(testResult.transformationResult.fileSizeBytes));
|
||||
}
|
||||
|
||||
|
@ -75,12 +75,15 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
}
|
||||
})
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
|
||||
.build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)));
|
||||
.run(testId, editedMediaItem);
|
||||
Log.i(TAG, "Tone mapped.");
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
|
||||
} catch (TransformationException exception) {
|
||||
@ -118,12 +121,15 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
}
|
||||
})
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)));
|
||||
.run(testId, editedMediaItem);
|
||||
Log.i(TAG, "Tone mapped.");
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
|
||||
} catch (TransformationException exception) {
|
||||
@ -165,7 +171,8 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
@ -213,7 +220,8 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(180).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
|
@ -32,6 +32,7 @@ import androidx.media3.common.util.GlUtil;
|
||||
import androidx.media3.common.util.Log;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.TransformationException;
|
||||
import androidx.media3.transformer.TransformationRequest;
|
||||
import androidx.media3.transformer.TransformationTestResult;
|
||||
@ -85,11 +86,14 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
|
||||
.setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.build();
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)));
|
||||
.run(testId, editedMediaItem);
|
||||
Log.i(TAG, "Tone mapped.");
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
|
||||
} catch (TransformationException exception) {
|
||||
@ -135,11 +139,14 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
|
||||
.setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
|
||||
.build();
|
||||
try {
|
||||
TransformationTestResult transformationTestResult =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)));
|
||||
.run(testId, editedMediaItem);
|
||||
Log.i(TAG, "Tone mapped.");
|
||||
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
|
||||
} catch (TransformationException exception) {
|
||||
|
@ -24,6 +24,7 @@ import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.MimeTypes;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.TransformationRequest;
|
||||
import androidx.media3.transformer.TransformationTestResult;
|
||||
import androidx.media3.transformer.Transformer;
|
||||
@ -62,17 +63,18 @@ public final class TranscodeQualityTest {
|
||||
.experimentalSetEnableHighQualityTargeting(true)
|
||||
.build())
|
||||
.build())
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(
|
||||
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
|
||||
TransformationTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(
|
||||
testId,
|
||||
MediaItem.fromUri(
|
||||
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
|
||||
if (result.ssim != TransformationTestResult.SSIM_UNSET) {
|
||||
assertThat(result.ssim).isGreaterThan(0.90);
|
||||
@ -99,17 +101,18 @@ public final class TranscodeQualityTest {
|
||||
new Transformer.Builder(context)
|
||||
.setTransformationRequest(
|
||||
new TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H265).build())
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(
|
||||
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
|
||||
TransformationTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(
|
||||
testId,
|
||||
MediaItem.fromUri(
|
||||
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
|
||||
if (result.ssim != TransformationTestResult.SSIM_UNSET) {
|
||||
assertThat(result.ssim).isGreaterThan(0.90);
|
||||
@ -129,19 +132,19 @@ public final class TranscodeQualityTest {
|
||||
.setTransformationRequest(
|
||||
new TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H264).build())
|
||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(
|
||||
Uri.parse(
|
||||
AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
|
||||
TransformationTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(
|
||||
testId,
|
||||
MediaItem.fromUri(
|
||||
Uri.parse(
|
||||
AndroidTestUtil
|
||||
.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
|
||||
if (result.ssim != TransformationTestResult.SSIM_UNSET) {
|
||||
assertThat(result.ssim).isGreaterThan(0.90);
|
||||
|
@ -59,10 +59,13 @@ public class TransformationTest {
|
||||
new Transformer.Builder(context)
|
||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -70,10 +73,13 @@ public class TransformationTest {
|
||||
String testId = TAG + "_transformWithoutDecodeEncode";
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
// No need to calculate SSIM because no decode/encoding, so input frames match output frames.
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -82,7 +88,6 @@ public class TransformationTest {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveAudio(true)
|
||||
.setEncoderFactory(
|
||||
new ForceEncodeEncoderFactory(
|
||||
/* wrappedEncoderFactory= */ new DefaultEncoderFactory.Builder(context)
|
||||
@ -90,10 +95,14 @@ public class TransformationTest {
|
||||
new VideoEncoderSettings.Builder().setBitrate(5_000_000).build())
|
||||
.build()))
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -113,11 +122,13 @@ public class TransformationTest {
|
||||
new Transformer.Builder(context)
|
||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||
.build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_REMOTE_4K60_PORTRAIT_URI_STRING));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.setTimeoutSeconds(180)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_REMOTE_4K60_PORTRAIT_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -136,11 +147,14 @@ public class TransformationTest {
|
||||
new Transformer.Builder(context)
|
||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_REMOTE_8K24_URI_STRING)))
|
||||
.build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.setTimeoutSeconds(180)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_REMOTE_8K24_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -150,12 +164,15 @@ public class TransformationTest {
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
MediaItem mediaItem =
|
||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -165,11 +182,14 @@ public class TransformationTest {
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -188,9 +208,11 @@ public class TransformationTest {
|
||||
.setTransformationRequest(
|
||||
new TransformationRequest.Builder().setFlattenForSlowMotion(true).build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF_URI_STRING))).build();
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF_URI_STRING)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -204,7 +226,8 @@ public class TransformationTest {
|
||||
ImmutableList<Effect> videoEffects =
|
||||
ImmutableList.of(new ScaleToFitTransformation.Builder().setRotationDegrees(45).build());
|
||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
|
@ -42,6 +42,7 @@ import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.Assertions;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.Transformer;
|
||||
import androidx.media3.transformer.TransformerAndroidTestRunner;
|
||||
import androidx.media3.transformer.VideoEncoderSettings;
|
||||
@ -142,7 +143,6 @@ public class BitrateAnalysisTest {
|
||||
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveAudio(true)
|
||||
.setEncoderFactory(
|
||||
new AndroidTestUtil.ForceEncodeEncoderFactory(
|
||||
/* wrappedEncoderFactory= */ new DefaultEncoderFactory.Builder(context)
|
||||
@ -154,11 +154,15 @@ public class BitrateAnalysisTest {
|
||||
.setEnableFallback(false)
|
||||
.build()))
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(fileUri)))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setInputValues(inputValues)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(fileUri)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.Transformer;
|
||||
import androidx.media3.transformer.TransformerAndroidTestRunner;
|
||||
import androidx.media3.transformer.VideoEncoderSettings;
|
||||
@ -118,7 +119,6 @@ public class EncoderPerformanceAnalysisTest {
|
||||
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveAudio(true)
|
||||
.setEncoderFactory(
|
||||
new AndroidTestUtil.ForceEncodeEncoderFactory(
|
||||
/* wrappedEncoderFactory= */ new DefaultEncoderFactory.Builder(context)
|
||||
@ -129,10 +129,14 @@ public class EncoderPerformanceAnalysisTest {
|
||||
.setEnableFallback(false)
|
||||
.build()))
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(fileUri)))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.setInputValues(inputValues)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(fileUri)));
|
||||
.run(testId, editedMediaItem);
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ import androidx.media3.common.MimeTypes;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.TransformationRequest;
|
||||
import androidx.media3.transformer.Transformer;
|
||||
import androidx.media3.transformer.TransformerAndroidTestRunner;
|
||||
@ -287,7 +288,6 @@ public class SsimMapperTest {
|
||||
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setRemoveAudio(true)
|
||||
.setTransformationRequest(
|
||||
new TransformationRequest.Builder().setVideoMimeType(outputMimeType).build())
|
||||
.setEncoderFactory(
|
||||
@ -300,6 +300,10 @@ public class SsimMapperTest {
|
||||
.setEnableFallback(false)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(videoUri)))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
|
||||
transformationsLeft--;
|
||||
|
||||
@ -308,7 +312,7 @@ public class SsimMapperTest {
|
||||
.setInputValues(inputValues)
|
||||
.setRequestCalculateSsim(true)
|
||||
.build()
|
||||
.run(testId, MediaItem.fromUri(Uri.parse(videoUri)))
|
||||
.run(testId, editedMediaItem)
|
||||
.ssim;
|
||||
|
||||
checkState(ssim != SSIM_UNSET, "SSIM has not been calculated.");
|
||||
|
@ -15,34 +15,106 @@
|
||||
*/
|
||||
package androidx.media3.transformer;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkState;
|
||||
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
|
||||
/** A {@link MediaItem} with the transformations to apply to it. */
|
||||
@UnstableApi
|
||||
public class EditedMediaItem {
|
||||
|
||||
/* package */ final MediaItem mediaItem;
|
||||
/* package */ final Effects effects;
|
||||
/** A builder for {@link EditedMediaItem} instances. */
|
||||
public static final class Builder {
|
||||
|
||||
/**
|
||||
* Creates an instance with no {@link Effects}.
|
||||
*
|
||||
* @param mediaItem The {@link MediaItem} to edit.
|
||||
*/
|
||||
public EditedMediaItem(MediaItem mediaItem) {
|
||||
this(mediaItem, new Effects(ImmutableList.of(), ImmutableList.of()));
|
||||
private final MediaItem mediaItem;
|
||||
|
||||
private boolean removeAudio;
|
||||
private boolean removeVideo;
|
||||
private @MonotonicNonNull Effects effects;
|
||||
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* @param mediaItem The {@link MediaItem} on which transformations are applied.
|
||||
*/
|
||||
public Builder(MediaItem mediaItem) {
|
||||
this.mediaItem = mediaItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether to remove the audio from the {@link MediaItem}.
|
||||
*
|
||||
* <p>The default value is {@code false}.
|
||||
*
|
||||
* <p>The audio and video cannot both be removed because the output would not contain any
|
||||
* samples.
|
||||
*
|
||||
* @param removeAudio Whether to remove the audio.
|
||||
* @return This builder.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setRemoveAudio(boolean removeAudio) {
|
||||
this.removeAudio = removeAudio;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether to remove the video from the {@link MediaItem}.
|
||||
*
|
||||
* <p>The default value is {@code false}.
|
||||
*
|
||||
* <p>The audio and video cannot both be removed because the output would not contain any
|
||||
* samples.
|
||||
*
|
||||
* @param removeVideo Whether to remove the video.
|
||||
* @return This builder.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setRemoveVideo(boolean removeVideo) {
|
||||
this.removeVideo = removeVideo;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link Effects} to apply to the {@link MediaItem}.
|
||||
*
|
||||
* <p>The default value is an empty {@link Effects} instance.
|
||||
*
|
||||
* @param effects The {@link Effects} to apply.
|
||||
* @return This builder.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setEffects(Effects effects) {
|
||||
this.effects = effects;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Builds an {@link EditedMediaItem} instance. */
|
||||
public EditedMediaItem build() {
|
||||
if (effects == null) {
|
||||
effects =
|
||||
new Effects(
|
||||
/* audioProcessors= */ ImmutableList.of(), /* videoEffects= */ ImmutableList.of());
|
||||
}
|
||||
return new EditedMediaItem(mediaItem, removeAudio, removeVideo, effects);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* @param mediaItem The {@link MediaItem} to edit.
|
||||
* @param effects The {@link Effects} to apply to the {@code mediaItem}.
|
||||
*/
|
||||
public EditedMediaItem(MediaItem mediaItem, Effects effects) {
|
||||
/* package */ final MediaItem mediaItem;
|
||||
/* package */ final boolean removeAudio;
|
||||
/* package */ final boolean removeVideo;
|
||||
/* package */ final Effects effects;
|
||||
|
||||
private EditedMediaItem(
|
||||
MediaItem mediaItem, boolean removeAudio, boolean removeVideo, Effects effects) {
|
||||
checkState(!removeAudio || !removeVideo, "Audio and video cannot both be removed");
|
||||
this.mediaItem = mediaItem;
|
||||
this.removeAudio = removeAudio;
|
||||
this.removeVideo = removeVideo;
|
||||
this.effects = effects;
|
||||
}
|
||||
}
|
||||
|
@ -175,34 +175,24 @@ public final class Transformer {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether to remove the audio from the output.
|
||||
*
|
||||
* <p>The default value is {@code false}.
|
||||
*
|
||||
* <p>The audio and video cannot both be removed because the output would not contain any
|
||||
* samples.
|
||||
*
|
||||
* @param removeAudio Whether to remove the audio.
|
||||
* @return This builder.
|
||||
* @deprecated Use {@link EditedMediaItem.Builder#setRemoveAudio(boolean)} to remove the audio
|
||||
* from the {@link EditedMediaItem} passed to {@link #startTransformation(EditedMediaItem,
|
||||
* String)} or {@link #startTransformation(EditedMediaItem, ParcelFileDescriptor)} instead.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
@Deprecated
|
||||
public Builder setRemoveAudio(boolean removeAudio) {
|
||||
this.removeAudio = removeAudio;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether to remove the video from the output.
|
||||
*
|
||||
* <p>The default value is {@code false}.
|
||||
*
|
||||
* <p>The audio and video cannot both be removed because the output would not contain any
|
||||
* samples.
|
||||
*
|
||||
* @param removeVideo Whether to remove the video.
|
||||
* @return This builder.
|
||||
* @deprecated Use {@link EditedMediaItem.Builder#setRemoveVideo(boolean)} to remove the video
|
||||
* from the {@link EditedMediaItem} passed to {@link #startTransformation(EditedMediaItem,
|
||||
* String)} or {@link #startTransformation(EditedMediaItem, ParcelFileDescriptor)} instead.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
@Deprecated
|
||||
public Builder setRemoveVideo(boolean removeVideo) {
|
||||
this.removeVideo = removeVideo;
|
||||
return this;
|
||||
@ -384,7 +374,9 @@ public final class Transformer {
|
||||
*
|
||||
* <p>This method is experimental and may be removed or changed without warning.
|
||||
*
|
||||
* <p>To replace existing audio with silence, call {@link #setRemoveAudio(boolean)} as well.
|
||||
* <p>To replace existing audio with silence, {@linkplain
|
||||
* EditedMediaItem.Builder#setRemoveAudio(boolean) remove the audio} from the {@link
|
||||
* EditedMediaItem} to transform.
|
||||
*
|
||||
* <p>Audio properties/format:
|
||||
*
|
||||
@ -721,8 +713,11 @@ public final class Transformer {
|
||||
@Deprecated
|
||||
public void startTransformation(MediaItem mediaItem, String path) {
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
mediaItem, new Effects(audioProcessors, videoEffects, frameProcessorFactory));
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setRemoveAudio(removeAudio)
|
||||
.setRemoveVideo(removeVideo)
|
||||
.setEffects(new Effects(audioProcessors, videoEffects, frameProcessorFactory))
|
||||
.build();
|
||||
startTransformationInternal(editedMediaItem, path, /* parcelFileDescriptor= */ null);
|
||||
}
|
||||
|
||||
@ -733,8 +728,11 @@ public final class Transformer {
|
||||
@RequiresApi(26)
|
||||
public void startTransformation(MediaItem mediaItem, ParcelFileDescriptor parcelFileDescriptor) {
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
mediaItem, new Effects(audioProcessors, videoEffects, frameProcessorFactory));
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setRemoveAudio(removeAudio)
|
||||
.setRemoveVideo(removeVideo)
|
||||
.setEffects(new Effects(audioProcessors, videoEffects, frameProcessorFactory))
|
||||
.build();
|
||||
startTransformationInternal(editedMediaItem, /* path= */ null, parcelFileDescriptor);
|
||||
}
|
||||
|
||||
@ -765,8 +763,6 @@ public final class Transformer {
|
||||
path,
|
||||
parcelFileDescriptor,
|
||||
transformationRequest,
|
||||
removeAudio,
|
||||
removeVideo,
|
||||
generateSilentAudio,
|
||||
assetLoaderFactory,
|
||||
encoderFactory,
|
||||
|
@ -118,8 +118,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
@Nullable String outputPath,
|
||||
@Nullable ParcelFileDescriptor outputParcelFileDescriptor,
|
||||
TransformationRequest transformationRequest,
|
||||
boolean removeAudio,
|
||||
boolean removeVideo,
|
||||
boolean generateSilentAudio,
|
||||
AssetLoader.Factory assetLoaderFactory,
|
||||
Codec.EncoderFactory encoderFactory,
|
||||
@ -144,8 +142,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
ComponentListener componentListener = new ComponentListener(mediaItem, fallbackListener);
|
||||
assetLoader =
|
||||
assetLoaderFactory
|
||||
.setRemoveAudio(removeAudio)
|
||||
.setRemoveVideo(removeVideo)
|
||||
.setRemoveAudio(editedMediaItem.removeAudio)
|
||||
.setRemoveVideo(editedMediaItem.removeVideo)
|
||||
.setFlattenVideoForSlowMotion(transformationRequest.flattenForSlowMotion)
|
||||
.createAssetLoader(mediaItem, internalLooper, componentListener);
|
||||
effects = editedMediaItem.effects;
|
||||
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2023 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package androidx.media3.transformer;
|
||||
|
||||
import static org.junit.Assert.assertThrows;
|
||||
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/** Unit test for {@link EditedMediaItem.Builder}. */
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class EditedMediaItemBuilderTest {
|
||||
|
||||
@Test
|
||||
public void build_removeAudioAndVideo_throws() {
|
||||
MediaItem mediaItem = MediaItem.fromUri("uri");
|
||||
|
||||
assertThrows(
|
||||
IllegalStateException.class,
|
||||
() ->
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setRemoveAudio(true)
|
||||
.setRemoveVideo(true)
|
||||
.build());
|
||||
}
|
||||
}
|
@ -29,15 +29,6 @@ import org.junit.runner.RunWith;
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class TransformerBuilderTest {
|
||||
|
||||
@Test
|
||||
public void build_removeAudioAndVideo_throws() {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
|
||||
assertThrows(
|
||||
IllegalStateException.class,
|
||||
() -> new Transformer.Builder(context).setRemoveAudio(true).setRemoveVideo(true).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void build_withUnsupportedAudioMimeType_throws() {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
|
@ -131,7 +131,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_videoOnlyPassthrough_completesSuccessfully() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -142,9 +142,8 @@ public final class TransformerEndToEndTest {
|
||||
@Test
|
||||
public void startTransformation_audioOnlyPassthrough_completesSuccessfully() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -162,9 +161,8 @@ public final class TransformerEndToEndTest {
|
||||
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -177,7 +175,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_audioAndVideo_completesSuccessfully() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -199,7 +197,7 @@ public final class TransformerEndToEndTest {
|
||||
.setStartsAtKeyFrame(true)
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -218,7 +216,8 @@ public final class TransformerEndToEndTest {
|
||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES))
|
||||
.build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -231,7 +230,7 @@ public final class TransformerEndToEndTest {
|
||||
throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
// Transform first media item.
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
@ -249,7 +248,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_concurrentTransformations_throwsError() {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
|
||||
@ -260,10 +259,11 @@ public final class TransformerEndToEndTest {
|
||||
|
||||
@Test
|
||||
public void startTransformation_removeAudio_completesSuccessfully() throws Exception {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false).setRemoveAudio(true).build();
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -274,10 +274,11 @@ public final class TransformerEndToEndTest {
|
||||
|
||||
@Test
|
||||
public void startTransformation_removeVideo_completesSuccessfully() throws Exception {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false).setRemoveVideo(true).build();
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -292,9 +293,8 @@ public final class TransformerEndToEndTest {
|
||||
createTransformerBuilder(/* enableFallback= */ false)
|
||||
.experimentalSetGenerateSilentAudio(true)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -310,7 +310,7 @@ public final class TransformerEndToEndTest {
|
||||
.experimentalSetGenerateSilentAudio(true)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -323,10 +323,11 @@ public final class TransformerEndToEndTest {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false)
|
||||
.experimentalSetGenerateSilentAudio(true)
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -340,10 +341,11 @@ public final class TransformerEndToEndTest {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false)
|
||||
.experimentalSetGenerateSilentAudio(true)
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -358,7 +360,7 @@ public final class TransformerEndToEndTest {
|
||||
.experimentalSetGenerateSilentAudio(true)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -375,7 +377,8 @@ public final class TransformerEndToEndTest {
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
|
||||
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -396,7 +399,7 @@ public final class TransformerEndToEndTest {
|
||||
.addListener(mockListener3)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -419,9 +422,8 @@ public final class TransformerEndToEndTest {
|
||||
.setTransformationRequest( // Request transcoding so that decoder is used.
|
||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationException exception =
|
||||
@ -451,8 +453,8 @@ public final class TransformerEndToEndTest {
|
||||
.addListener(mockListener2)
|
||||
.addListener(mockListener3)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -488,7 +490,7 @@ public final class TransformerEndToEndTest {
|
||||
.build();
|
||||
Transformer transformer2 = transformer1.buildUpon().removeListener(mockListener2).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer2.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer2);
|
||||
@ -506,7 +508,8 @@ public final class TransformerEndToEndTest {
|
||||
new TransformationRequest.Builder().setFlattenForSlowMotion(true).build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SEF_SLOW_MOTION));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SEF_SLOW_MOTION))
|
||||
.build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -518,7 +521,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_completesWithValidBitrate() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationResult result = TransformerTestRunner.runLooper(transformer);
|
||||
@ -537,8 +540,8 @@ public final class TransformerEndToEndTest {
|
||||
MimeTypes.AUDIO_AMR_NB) // unsupported by encoder, supported by muxer
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationException exception =
|
||||
@ -558,9 +561,8 @@ public final class TransformerEndToEndTest {
|
||||
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
||||
.build())
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationException exception =
|
||||
@ -575,7 +577,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_withIoError_completesWithError() {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri("asset:///non-existing-path.mp4"));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri("asset:///non-existing-path.mp4")).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationException exception =
|
||||
@ -596,8 +598,8 @@ public final class TransformerEndToEndTest {
|
||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false).addListener(mockListener).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -621,8 +623,8 @@ public final class TransformerEndToEndTest {
|
||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ true).addListener(mockListener).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER));
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -651,7 +653,7 @@ public final class TransformerEndToEndTest {
|
||||
.setMuxerFactory(muxerFactory)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationException exception =
|
||||
@ -668,7 +670,7 @@ public final class TransformerEndToEndTest {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false).setMuxerFactory(muxerFactory).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -680,7 +682,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_afterCancellation_completesSuccessfully() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
transformer.cancel();
|
||||
@ -702,7 +704,7 @@ public final class TransformerEndToEndTest {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(/* enableFallback= */ false).setLooper(looper).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
AtomicReference<Exception> exception = new AtomicReference<>();
|
||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||
|
||||
@ -728,7 +730,7 @@ public final class TransformerEndToEndTest {
|
||||
public void startTransformation_fromWrongThread_throwsError() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
||||
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||
@ -760,7 +762,7 @@ public final class TransformerEndToEndTest {
|
||||
new FakeAssetLoader.Factory(SUPPORTED_OUTPUT_TYPE_DECODED, sampleConsumerRef))
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
runLooperUntil(transformer.getApplicationLooper(), () -> sampleConsumerRef.get() != null);
|
||||
@ -779,7 +781,8 @@ public final class TransformerEndToEndTest {
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(new SonicAudioProcessor());
|
||||
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformationException transformationException =
|
||||
@ -799,7 +802,8 @@ public final class TransformerEndToEndTest {
|
||||
Presentation.createForHeight(mediaItemHeightPixels),
|
||||
new ScaleToFitTransformation.Builder().build());
|
||||
Effects effects = new Effects(ImmutableList.of(), videoEffects);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem(mediaItem, effects);
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(effects).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -812,7 +816,7 @@ public final class TransformerEndToEndTest {
|
||||
public void getProgress_knownDuration_returnsConsistentStates() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
AtomicInteger previousProgressState =
|
||||
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
||||
AtomicBoolean foundInconsistentState = new AtomicBoolean();
|
||||
@ -859,7 +863,7 @@ public final class TransformerEndToEndTest {
|
||||
public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
List<Integer> progresses = new ArrayList<>();
|
||||
Handler progressHandler =
|
||||
new Handler(Looper.myLooper()) {
|
||||
@ -895,7 +899,7 @@ public final class TransformerEndToEndTest {
|
||||
public void getProgress_noCurrentTransformation_returnsNoTransformation() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
|
||||
@Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder);
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
@ -910,7 +914,8 @@ public final class TransformerEndToEndTest {
|
||||
public void getProgress_unknownDuration_returnsConsistentStates() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION))
|
||||
.build();
|
||||
AtomicInteger previousProgressState =
|
||||
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
||||
AtomicBoolean foundInconsistentState = new AtomicBoolean();
|
||||
@ -978,7 +983,7 @@ public final class TransformerEndToEndTest {
|
||||
public void cancel_afterCompletion_doesNotThrow() throws Exception {
|
||||
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
|
||||
transformer.startTransformation(editedMediaItem, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
Loading…
x
Reference in New Issue
Block a user