Add varargs convenience constructors to Sequence & Composition.Builder
Improves API ease-of-use & readability and reduces verbose boilerplate. PiperOrigin-RevId: 558163557
This commit is contained in:
parent
7f1ee0b390
commit
99ac6feeee
@ -102,7 +102,6 @@ import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@ -371,10 +370,8 @@ public final class TransformerActivity extends AppCompatActivity {
|
||||
bundle.getBoolean(ConfigurationActivity.SHOULD_FLATTEN_FOR_SLOW_MOTION))
|
||||
.setEffects(new Effects(audioProcessors, videoEffects));
|
||||
}
|
||||
List<EditedMediaItem> editedMediaItems = ImmutableList.of(editedMediaItemBuilder.build());
|
||||
List<EditedMediaItemSequence> sequences =
|
||||
ImmutableList.of(new EditedMediaItemSequence(editedMediaItems));
|
||||
Composition.Builder compositionBuilder = new Composition.Builder(sequences);
|
||||
Composition.Builder compositionBuilder =
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItemBuilder.build()));
|
||||
if (bundle != null) {
|
||||
compositionBuilder
|
||||
.setHdrMode(bundle.getInt(ConfigurationActivity.HDR_MODE))
|
||||
|
@ -33,7 +33,6 @@ import androidx.media3.common.util.Util;
|
||||
import androidx.media3.decoder.DecoderInputBuffer;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import org.json.JSONException;
|
||||
@ -126,12 +125,10 @@ public class ForceEndOfStreamTest {
|
||||
|
||||
private static Composition createComposition(MediaItem mediaItem) {
|
||||
return new Composition.Builder(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||
.build()))))
|
||||
new EditedMediaItemSequence(
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||
.build()))
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,6 @@ import androidx.media3.effect.DebugTraceUtil;
|
||||
import androidx.media3.test.utils.SsimHelper;
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import com.google.common.base.Ascii;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -227,9 +226,8 @@ public class TransformerAndroidTestRunner {
|
||||
* @throws Exception The cause of the export not completing.
|
||||
*/
|
||||
public ExportTestResult run(String testId, EditedMediaItem editedMediaItem) throws Exception {
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition = new Composition.Builder(ImmutableList.of(sequence)).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem)).build();
|
||||
return run(testId, composition);
|
||||
}
|
||||
|
||||
|
@ -102,28 +102,27 @@ public class TransformerEndToEndTest {
|
||||
.build();
|
||||
|
||||
EditedMediaItemSequence audioVideoSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioVideoItem, imageItem, audioVideoItem));
|
||||
new EditedMediaItemSequence(audioVideoItem, imageItem, audioVideoItem);
|
||||
|
||||
EditedMediaItem.Builder audioBuilder =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)).setRemoveVideo(true);
|
||||
|
||||
EditedMediaItemSequence audioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
audioBuilder
|
||||
.setEffects(
|
||||
new Effects(
|
||||
ImmutableList.of(createSonic(/* pitch= */ 1.3f)),
|
||||
/* videoEffects= */ ImmutableList.of()))
|
||||
.build(),
|
||||
audioBuilder
|
||||
.setEffects(
|
||||
new Effects(
|
||||
ImmutableList.of(createSonic(/* pitch= */ 0.85f)),
|
||||
/* videoEffects= */ ImmutableList.of()))
|
||||
.build()));
|
||||
audioBuilder
|
||||
.setEffects(
|
||||
new Effects(
|
||||
ImmutableList.of(createSonic(/* pitch= */ 1.3f)),
|
||||
/* videoEffects= */ ImmutableList.of()))
|
||||
.build(),
|
||||
audioBuilder
|
||||
.setEffects(
|
||||
new Effects(
|
||||
ImmutableList.of(createSonic(/* pitch= */ 0.85f)),
|
||||
/* videoEffects= */ ImmutableList.of()))
|
||||
.build());
|
||||
|
||||
EditedMediaItemSequence audioLoopingSequence =
|
||||
EditedMediaItemSequence loopingAudioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
audioBuilder
|
||||
@ -135,9 +134,7 @@ public class TransformerEndToEndTest {
|
||||
/* isLooping= */ true);
|
||||
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
ImmutableList.of(audioVideoSequence, audioSequence, audioLoopingSequence))
|
||||
.build();
|
||||
new Composition.Builder(audioVideoSequence, audioSequence, loopingAudioSequence).build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
@ -148,7 +145,7 @@ public class TransformerEndToEndTest {
|
||||
// Image asset duration is ~1.5s.
|
||||
// audioVideoSequence duration: ~3.5s (3 inputs).
|
||||
// audioSequence duration: ~2s (2 inputs).
|
||||
// audioLoopingSequence: Matches max other sequence (~3.5s) -> 4 inputs of ~1s audio item.
|
||||
// loopingAudioSequence: Matches max other sequence (~3.5s) -> 4 inputs of ~1s audio item.
|
||||
assertThat(result.exportResult.processedInputs).hasSize(9);
|
||||
}
|
||||
|
||||
@ -496,22 +493,22 @@ public class TransformerEndToEndTest {
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(testId, editedMediaItem);
|
||||
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setEffects(new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of()))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem));
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(videoEditedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence)).build();
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(audioEditedMediaItem),
|
||||
new EditedMediaItemSequence(videoEditedMediaItem))
|
||||
.build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
@ -538,7 +535,7 @@ public class TransformerEndToEndTest {
|
||||
}
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
EditedMediaItemSequence loopingAudioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem), /* isLooping= */ true);
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
@ -548,11 +545,9 @@ public class TransformerEndToEndTest {
|
||||
.build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem, videoEditedMediaItem));
|
||||
videoEditedMediaItem, videoEditedMediaItem, videoEditedMediaItem);
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence))
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
new Composition.Builder(loopingAudioSequence, videoSequence).setTransmuxVideo(true).build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
@ -580,16 +575,15 @@ public class TransformerEndToEndTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem));
|
||||
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
EditedMediaItemSequence loopingVideoSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem), /* isLooping= */ true);
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence)).build();
|
||||
Composition composition = new Composition.Builder(audioSequence, loopingVideoSequence).build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
@ -610,17 +604,16 @@ public class TransformerEndToEndTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem));
|
||||
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
||||
EditedMediaItem imageEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_URI_STRING))
|
||||
.setDurationUs(1_000_000)
|
||||
.setFrameRate(30)
|
||||
.build();
|
||||
EditedMediaItemSequence imageSequence =
|
||||
EditedMediaItemSequence loopingImageSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(imageEditedMediaItem, imageEditedMediaItem), /* isLooping= */ true);
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, imageSequence)).build();
|
||||
Composition composition = new Composition.Builder(audioSequence, loopingImageSequence).build();
|
||||
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
|
@ -77,9 +77,7 @@ public class TransformerMixedInputEndToEndTest {
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(
|
||||
testId,
|
||||
buildComposition(ImmutableList.of(imageEditedMediaItem, videoEditedMediaItem)));
|
||||
.run(testId, buildComposition(imageEditedMediaItem, videoEditedMediaItem));
|
||||
|
||||
assertThat(result.exportResult.videoFrameCount)
|
||||
.isEqualTo(imageFrameCount + VIDEO_FRAME_COUNT_FOR_MP4_ASSET);
|
||||
@ -110,9 +108,7 @@ public class TransformerMixedInputEndToEndTest {
|
||||
ExportTestResult result =
|
||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||
.build()
|
||||
.run(
|
||||
testId,
|
||||
buildComposition(ImmutableList.of(videoEditedMediaItem, imageEditedMediaItem)));
|
||||
.run(testId, buildComposition(videoEditedMediaItem, imageEditedMediaItem));
|
||||
|
||||
assertThat(result.exportResult.videoFrameCount)
|
||||
.isEqualTo(imageFrameCount + VIDEO_FRAME_COUNT_FOR_MP4_ASSET);
|
||||
@ -150,14 +146,13 @@ public class TransformerMixedInputEndToEndTest {
|
||||
.run(
|
||||
testId,
|
||||
buildComposition(
|
||||
ImmutableList.of(
|
||||
videoEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem1,
|
||||
imageEditedMediaItem2,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem1,
|
||||
videoEditedMediaItem)));
|
||||
videoEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem1,
|
||||
imageEditedMediaItem2,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem1,
|
||||
videoEditedMediaItem));
|
||||
|
||||
assertThat(result.exportResult.videoFrameCount)
|
||||
.isEqualTo(3 * imageFrameCount + 4 * VIDEO_FRAME_COUNT_FOR_MP4_ASSET);
|
||||
@ -195,14 +190,13 @@ public class TransformerMixedInputEndToEndTest {
|
||||
.run(
|
||||
testId,
|
||||
buildComposition(
|
||||
ImmutableList.of(
|
||||
imageEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem,
|
||||
imageEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem)));
|
||||
imageEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem,
|
||||
imageEditedMediaItem,
|
||||
videoEditedMediaItem,
|
||||
imageEditedMediaItem));
|
||||
|
||||
assertThat(result.exportResult.videoFrameCount)
|
||||
.isEqualTo(4 * imageFrameCount + 3 * VIDEO_FRAME_COUNT_FOR_MP4_ASSET);
|
||||
@ -230,11 +224,11 @@ public class TransformerMixedInputEndToEndTest {
|
||||
.build();
|
||||
}
|
||||
|
||||
private static Composition buildComposition(ImmutableList<EditedMediaItem> editedMediaItems) {
|
||||
return new Composition.Builder(ImmutableList.of(new EditedMediaItemSequence(editedMediaItems)))
|
||||
private static Composition buildComposition(EditedMediaItem... editedMediaItems) {
|
||||
return new Composition.Builder(new EditedMediaItemSequence(editedMediaItems))
|
||||
.setEffects(
|
||||
new Effects(
|
||||
ImmutableList.of(),
|
||||
/* audioProcessors= */ ImmutableList.of(),
|
||||
ImmutableList.of(
|
||||
// To ensure that software encoders can encode.
|
||||
Presentation.createForWidthAndHeight(
|
||||
|
@ -221,8 +221,7 @@ public final class TransformerSequenceEffectTest {
|
||||
private static Composition createComposition(
|
||||
@Nullable Presentation presentation, EditedMediaItem... editedMediaItems) {
|
||||
Composition.Builder builder =
|
||||
new Composition.Builder(
|
||||
ImmutableList.of(new EditedMediaItemSequence(ImmutableList.copyOf(editedMediaItems))));
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItems));
|
||||
if (presentation != null) {
|
||||
builder.setEffects(
|
||||
new Effects(/* audioProcessors= */ ImmutableList.of(), ImmutableList.of(presentation)));
|
||||
|
@ -38,7 +38,6 @@ import androidx.media3.transformer.Transformer;
|
||||
import androidx.media3.transformer.TransformerAndroidTestRunner;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@ -74,12 +73,11 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
||||
}
|
||||
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10)))
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setHdrMode(Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR)
|
||||
.build();
|
||||
ExportTestResult exportTestResult =
|
||||
@ -114,12 +112,11 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
||||
}
|
||||
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setHdrMode(Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR)
|
||||
.build();
|
||||
ExportTestResult exportTestResult =
|
||||
|
@ -39,7 +39,6 @@ import androidx.media3.transformer.Transformer;
|
||||
import androidx.media3.transformer.TransformerAndroidTestRunner;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.util.Objects;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@ -83,12 +82,11 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
}
|
||||
})
|
||||
.build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10)))
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setHdrMode(Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)
|
||||
.build();
|
||||
|
||||
@ -145,12 +143,11 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
}
|
||||
})
|
||||
.build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setHdrMode(Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)
|
||||
.build();
|
||||
|
||||
@ -207,13 +204,12 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
}
|
||||
})
|
||||
.build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10)))
|
||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setHdrMode(Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)
|
||||
.build();
|
||||
|
||||
@ -270,13 +266,12 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
||||
}
|
||||
})
|
||||
.build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
|
||||
EditedMediaItem editedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setHdrMode(Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)
|
||||
.build();
|
||||
|
||||
|
@ -42,7 +42,6 @@ import androidx.media3.transformer.Transformer;
|
||||
import androidx.media3.transformer.TransformerAndroidTestRunner;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.IOException;
|
||||
import org.json.JSONException;
|
||||
import org.junit.Test;
|
||||
@ -92,12 +91,10 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
|
||||
|
||||
private void runTransformerWithOpenGlToneMapping(String testId, String fileUri) throws Exception {
|
||||
Transformer transformer = new Transformer.Builder(context).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(fileUri);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(fileUri)).build()))
|
||||
.setHdrMode(Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
|
||||
.build();
|
||||
ExportTestResult exportTestResult =
|
||||
|
@ -60,6 +60,15 @@ public final class Composition {
|
||||
hdrMode = composition.hdrMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* @see Builder#Builder(List)
|
||||
*/
|
||||
public Builder(EditedMediaItemSequence... sequences) {
|
||||
this(ImmutableList.copyOf(sequences));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
|
@ -48,11 +48,12 @@ public final class EditedMediaItemSequence {
|
||||
*/
|
||||
public final boolean isLooping;
|
||||
|
||||
/**
|
||||
* Creates an instance.
|
||||
*
|
||||
* @param editedMediaItems The {@link #editedMediaItems}.
|
||||
*/
|
||||
/** Creates a {@linkplain #isLooping non-looping} instance. */
|
||||
public EditedMediaItemSequence(EditedMediaItem... editedMediaItems) {
|
||||
this(ImmutableList.copyOf(editedMediaItems));
|
||||
}
|
||||
|
||||
/** Creates a {@linkplain #isLooping non-looping} instance. */
|
||||
public EditedMediaItemSequence(List<EditedMediaItem> editedMediaItems) {
|
||||
this(editedMediaItems, /* isLooping= */ false);
|
||||
}
|
||||
|
@ -900,9 +900,7 @@ public final class Transformer {
|
||||
* @throws IllegalStateException If an export is already in progress.
|
||||
*/
|
||||
public void start(EditedMediaItem editedMediaItem, String path) {
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
start(new Composition.Builder(ImmutableList.of(sequence)).build(), path);
|
||||
start(new Composition.Builder(new EditedMediaItemSequence(editedMediaItem)).build(), path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -78,16 +78,15 @@ public class CompositionExportTest {
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||
transformer.start(mediaItem, outputPath);
|
||||
ExportResult expectedExportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveVideo(true).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem));
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(videoEditedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence))
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(audioEditedMediaItem),
|
||||
new EditedMediaItemSequence(videoEditedMediaItem))
|
||||
.setTransmuxAudio(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -109,16 +108,16 @@ public class CompositionExportTest {
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
EditedMediaItemSequence loopingAudioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem), /* isLooping= */ true);
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem, videoEditedMediaItem));
|
||||
videoEditedMediaItem, videoEditedMediaItem, videoEditedMediaItem);
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence))
|
||||
new Composition.Builder(loopingAudioSequence, videoSequence)
|
||||
.setTransmuxAudio(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -141,14 +140,14 @@ public class CompositionExportTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem));
|
||||
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
EditedMediaItemSequence loopingVideoSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem), /* isLooping= */ true);
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence))
|
||||
new Composition.Builder(audioSequence, loopingVideoSequence)
|
||||
.setTransmuxAudio(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -167,24 +166,21 @@ public class CompositionExportTest {
|
||||
public void start_loopingRawAudio_producesExpectedResult() throws Exception {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItemSequence audioSequence =
|
||||
EditedMediaItemSequence loopingAudioSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
|
||||
.build()),
|
||||
/* isLooping= */ true);
|
||||
|
||||
EditedMediaItem videoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
EditedMediaItemSequence videoSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem));
|
||||
new EditedMediaItemSequence(videoEditedMediaItem, videoEditedMediaItem);
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(audioSequence, videoSequence))
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
new Composition.Builder(loopingAudioSequence, videoSequence).setTransmuxVideo(true).build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
@ -201,17 +197,15 @@ public class CompositionExportTest {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
|
||||
EditedMediaItem rawAudioItem =
|
||||
EditedMediaItem rawAudioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||
EditedMediaItemSequence firstSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(rawAudioItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(rawAudioEditedMediaItem),
|
||||
new EditedMediaItemSequence(rawAudioEditedMediaItem))
|
||||
.build();
|
||||
|
||||
EditedMediaItemSequence secondSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(rawAudioItem));
|
||||
|
||||
transformer.start(
|
||||
new Composition.Builder(ImmutableList.of(firstSequence, secondSequence)).build(),
|
||||
outputPath);
|
||||
transformer.start(composition, outputPath);
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(2);
|
||||
@ -223,23 +217,21 @@ public class CompositionExportTest {
|
||||
public void start_audioVideoCompositionWithExtraAudio_isCorrect() throws Exception {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioVideoItem =
|
||||
EditedMediaItem audioVideoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.build();
|
||||
EditedMediaItemSequence audioVideoSeq =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioVideoItem));
|
||||
|
||||
EditedMediaItem audioItem =
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
EditedMediaItemSequence audioSeq = new EditedMediaItemSequence(ImmutableList.of(audioItem));
|
||||
|
||||
transformer.start(
|
||||
new Composition.Builder(ImmutableList.of(audioVideoSeq, audioSeq))
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(audioVideoEditedMediaItem),
|
||||
new EditedMediaItemSequence(audioEditedMediaItem))
|
||||
.setTransmuxVideo(true)
|
||||
.build(),
|
||||
outputPath);
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(2);
|
||||
@ -250,25 +242,25 @@ public class CompositionExportTest {
|
||||
public void start_audioVideoCompositionWithLoopingAudio_isCorrect() throws Exception {
|
||||
Transformer transformer =
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
EditedMediaItem audioVideoItem =
|
||||
EditedMediaItem audioVideoEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.build();
|
||||
EditedMediaItemSequence audioVideoSeq =
|
||||
EditedMediaItemSequence audioVideoSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(audioVideoItem, audioVideoItem, audioVideoItem));
|
||||
|
||||
EditedMediaItem audioItem =
|
||||
audioVideoEditedMediaItem, audioVideoEditedMediaItem, audioVideoEditedMediaItem);
|
||||
EditedMediaItem audioEditedMediaItem =
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
EditedMediaItemSequence audioSeq =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioItem), /* isLooping= */ true);
|
||||
EditedMediaItemSequence loopingAudioSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem), /* isLooping= */ true);
|
||||
|
||||
transformer.start(
|
||||
new Composition.Builder(ImmutableList.of(audioVideoSeq, audioSeq))
|
||||
Composition composition =
|
||||
new Composition.Builder(audioVideoSequence, loopingAudioSequence)
|
||||
.setTransmuxVideo(true)
|
||||
.build(),
|
||||
outputPath);
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
ExportResult exportResult = TransformerTestRunner.runLooper(transformer);
|
||||
|
||||
assertThat(exportResult.processedInputs).hasSize(7);
|
||||
|
@ -29,7 +29,6 @@ import androidx.media3.common.util.Clock;
|
||||
import androidx.media3.common.util.HandlerWrapper;
|
||||
import androidx.media3.common.util.ListenerSet;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.shadows.ShadowLooper;
|
||||
@ -40,10 +39,8 @@ public class FallbackListenerTest {
|
||||
|
||||
private static final Composition PLACEHOLDER_COMPOSITION =
|
||||
new Composition.Builder(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.EMPTY)).build()))))
|
||||
new EditedMediaItemSequence(
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.EMPTY)).build()))
|
||||
.build();
|
||||
|
||||
@Test
|
||||
|
@ -298,10 +298,8 @@ public final class MediaItemExportTest {
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_AMR_NB);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.build();
|
||||
|
||||
@ -318,10 +316,8 @@ public final class MediaItemExportTest {
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.build();
|
||||
|
||||
@ -340,10 +336,8 @@ public final class MediaItemExportTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||
.setRemoveAudio(true)
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.build();
|
||||
|
||||
@ -368,10 +362,8 @@ public final class MediaItemExportTest {
|
||||
.setRemoveAudio(true)
|
||||
.setEffects(createAudioEffects(sonicAudioProcessor))
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.build();
|
||||
|
||||
@ -392,10 +384,8 @@ public final class MediaItemExportTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||
.setRemoveVideo(true)
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.build();
|
||||
|
||||
@ -411,10 +401,8 @@ public final class MediaItemExportTest {
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.build();
|
||||
|
||||
@ -456,10 +444,8 @@ public final class MediaItemExportTest {
|
||||
new EditedMediaItem.Builder(mediaItem)
|
||||
.setEffects(createAudioEffects(sonicAudioProcessor))
|
||||
.build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||
.setTransmuxAudio(true)
|
||||
.build();
|
||||
|
||||
|
@ -131,16 +131,13 @@ public final class ParameterizedAudioExportTest {
|
||||
this.itemConfigs = itemConfigs;
|
||||
}
|
||||
|
||||
public EditedMediaItemSequence asSequence() {
|
||||
public Composition asComposition() {
|
||||
ImmutableList.Builder<EditedMediaItem> items = new ImmutableList.Builder<>();
|
||||
for (ItemConfig itemConfig : itemConfigs) {
|
||||
items.add(itemConfig.asItem());
|
||||
}
|
||||
return new EditedMediaItemSequence(items.build());
|
||||
}
|
||||
|
||||
public Composition asComposition() {
|
||||
return new Composition.Builder(ImmutableList.of(asSequence())).build();
|
||||
return new Composition.Builder(new EditedMediaItemSequence(items.build())).build();
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -85,10 +85,8 @@ public final class SequenceExportTest {
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem, editedMediaItem))
|
||||
.setTransmuxAudio(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -115,10 +113,8 @@ public final class SequenceExportTest {
|
||||
ImmutableList.of(createPitchChangingAudioProcessor(/* pitch= */ 2f)),
|
||||
ImmutableList.of(RgbFilter.createGrayscaleFilter())))
|
||||
.build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem, editedMediaItem))
|
||||
.setTransmuxAudio(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -159,10 +155,8 @@ public final class SequenceExportTest {
|
||||
.setClippingConfiguration(clippingConfiguration2)
|
||||
.build();
|
||||
EditedMediaItem editedMediaItem2 = new EditedMediaItem.Builder(mediaItem2).build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem1, editedMediaItem2));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem1, editedMediaItem2))
|
||||
.setTransmuxAudio(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -186,10 +180,9 @@ public final class SequenceExportTest {
|
||||
EditedMediaItem audioVideoMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItem videoOnlyMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioVideoMediaItem, videoOnlyMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(audioVideoMediaItem, videoOnlyMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -212,10 +205,9 @@ public final class SequenceExportTest {
|
||||
EditedMediaItem videoOnlyMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
EditedMediaItem audioVideoMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(videoOnlyMediaItem, audioVideoMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(videoOnlyMediaItem, audioVideoMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -244,10 +236,9 @@ public final class SequenceExportTest {
|
||||
.setRemoveAudio(true)
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(audioEditedMediaItem, noAudioEditedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(audioEditedMediaItem, noAudioEditedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -278,9 +269,7 @@ public final class SequenceExportTest {
|
||||
.build();
|
||||
Composition composition =
|
||||
new Composition.Builder(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(noAudioEditedMediaItem, audioEditedMediaItem))))
|
||||
new EditedMediaItemSequence(noAudioEditedMediaItem, audioEditedMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -302,10 +291,8 @@ public final class SequenceExportTest {
|
||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||
EditedMediaItem videoOnlyMediaItem =
|
||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(videoOnlyMediaItem, videoOnlyMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(videoOnlyMediaItem, videoOnlyMediaItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -335,10 +322,8 @@ public final class SequenceExportTest {
|
||||
.setRemoveAudio(true)
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(silenceWithEffectsItem, silenceItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(silenceWithEffectsItem, silenceItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -368,10 +353,8 @@ public final class SequenceExportTest {
|
||||
.setRemoveAudio(true)
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(silenceItem, silenceWithEffectsItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(silenceItem, silenceWithEffectsItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -401,10 +384,8 @@ public final class SequenceExportTest {
|
||||
.setRemoveAudio(true)
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(firstItem, secondItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(sequence))
|
||||
new Composition.Builder(new EditedMediaItemSequence(firstItem, secondItem))
|
||||
.experimentalSetForceAudioTrack(true)
|
||||
.setTransmuxVideo(true)
|
||||
.build();
|
||||
@ -424,10 +405,9 @@ public final class SequenceExportTest {
|
||||
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(audioOnlyMediaItem).build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence)).build();
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem, editedMediaItem))
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -446,10 +426,9 @@ public final class SequenceExportTest {
|
||||
new EditedMediaItem.Builder(audioOnlyMediaItem)
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
|
||||
.build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence)).build();
|
||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem, editedMediaItem))
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -476,9 +455,9 @@ public final class SequenceExportTest {
|
||||
.setRemoveVideo(true)
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 0.5f)))
|
||||
.build();
|
||||
EditedMediaItemSequence sequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(highPitchMediaItem, lowPitchMediaItem));
|
||||
Composition composition = new Composition.Builder(ImmutableList.of(sequence)).build();
|
||||
Composition composition =
|
||||
new Composition.Builder(new EditedMediaItemSequence(highPitchMediaItem, lowPitchMediaItem))
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -496,13 +475,12 @@ public final class SequenceExportTest {
|
||||
MediaItem stereo48000Audio =
|
||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ);
|
||||
MediaItem mono44100Audio = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItem.Builder(stereo48000Audio).build(),
|
||||
new EditedMediaItem.Builder(mono44100Audio).build()));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence)).build();
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(
|
||||
new EditedMediaItem.Builder(stereo48000Audio).build(),
|
||||
new EditedMediaItem.Builder(mono44100Audio).build()))
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -528,11 +506,9 @@ public final class SequenceExportTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 2f)))
|
||||
.build();
|
||||
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(ImmutableList.of(stereo48000Audio, mono44100Audio));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence)).build();
|
||||
new Composition.Builder(new EditedMediaItemSequence(stereo48000Audio, mono44100Audio))
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
@ -558,11 +534,10 @@ public final class SequenceExportTest {
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
|
||||
.setEffects(createAudioEffects(createPitchChangingAudioProcessor(/* pitch= */ 0.5f)))
|
||||
.build();
|
||||
EditedMediaItemSequence editedMediaItemSequence =
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(stereo48000AudioHighPitch, mono44100AudioLowPitch));
|
||||
Composition composition =
|
||||
new Composition.Builder(ImmutableList.of(editedMediaItemSequence)).build();
|
||||
new Composition.Builder(
|
||||
new EditedMediaItemSequence(stereo48000AudioHighPitch, mono44100AudioLowPitch))
|
||||
.build();
|
||||
|
||||
transformer.start(composition, outputPath);
|
||||
TransformerTestRunner.runLooper(transformer);
|
||||
|
@ -46,10 +46,8 @@ import org.robolectric.shadows.ShadowMediaCodecList;
|
||||
public final class VideoEncoderWrapperTest {
|
||||
private static final Composition FAKE_COMPOSITION =
|
||||
new Composition.Builder(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItemSequence(
|
||||
ImmutableList.of(
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.EMPTY)).build()))))
|
||||
new EditedMediaItemSequence(
|
||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.EMPTY)).build()))
|
||||
.build();
|
||||
|
||||
private final TransformationRequest emptyTransformationRequest =
|
||||
|
Loading…
x
Reference in New Issue
Block a user