Commit e8ffc7b6 by kimvde Committed by christosts

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