Add experimental prefix to setForce{Audio,Video}Track APIs

These APIs are likely to change/removed in near future.

PiperOrigin-RevId: 743899703
This commit is contained in:
sheenachhabra 2025-04-04 04:56:21 -07:00 committed by Copybara-Service
parent 9a700d21bf
commit 72bb474604
16 changed files with 68 additions and 54 deletions

View File

@ -21,7 +21,7 @@
([#2267](https://github.com/androidx/media/issues/2267)).
* Transformer:
* Filling an initial gap (added via `addGap()`) with silent audio now
requires explicitly setting `setForceAudioTrack(true)` in
requires explicitly setting `experimentalSetForceAudioTrack(true)` in
`EditedMediaItemSequence.Builder`. If the gap is in the middle of the
sequence, then this flag is not required.
* Track Selection:

View File

@ -469,7 +469,7 @@ public final class TransformerActivity extends AppCompatActivity {
EditedMediaItemSequence.Builder editedMediaItemSequenceBuilder =
new EditedMediaItemSequence.Builder(editedMediaItemBuilder.build());
if (bundle != null) {
editedMediaItemSequenceBuilder.setForceAudioTrack(
editedMediaItemSequenceBuilder.experimentalSetForceAudioTrack(
bundle.getBoolean(ConfigurationActivity.FORCE_AUDIO_TRACK));
}
Composition.Builder compositionBuilder =

View File

@ -108,7 +108,7 @@ public class CompositionPlayerSpeedAdjustmentsTest {
compositionPlayer.setComposition(
new Composition.Builder(
new EditedMediaItemSequence.Builder(timestampRecordingEditedMediaItems)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build());
compositionPlayer.prepare();

View File

@ -1357,7 +1357,7 @@ public class TransformerEndToEndTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
ExportTestResult result =
@ -1451,7 +1451,7 @@ public class TransformerEndToEndTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem, editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
ExportTestResult result =
@ -1891,7 +1891,7 @@ public class TransformerEndToEndTest {
new EditedMediaItemSequence.Builder()
.addGap(100_000)
.addItem(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build(),
new EditedMediaItemSequence.Builder(editedMediaItem).build())
.build();

View File

@ -106,7 +106,7 @@ public class TransformerGapsTest {
new Composition.Builder(
new EditedMediaItemSequence.Builder(
AUDIO_ONLY_MEDIA_ITEM, AUDIO_VIDEO_MEDIA_ITEM, AUDIO_VIDEO_MEDIA_ITEM)
.setForceVideoTrack(true)
.experimentalSetForceVideoTrack(true)
.build())
.setEffects(
new Effects(
@ -214,7 +214,7 @@ public class TransformerGapsTest {
.addGap(/* durationUs= */ 1_000_000)
.addItem(VIDEO_ONLY_MEDIA_ITEM)
.addItem(VIDEO_ONLY_MEDIA_ITEM)
.setForceVideoTrack(true)
.experimentalSetForceVideoTrack(true)
.build())
.setEffects(
new Effects(
@ -326,7 +326,7 @@ public class TransformerGapsTest {
.addGap(/* durationUs= */ 1_000_000)
.addItem(AUDIO_VIDEO_MEDIA_ITEM)
.addItem(AUDIO_VIDEO_MEDIA_ITEM)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
TransformerAndroidTestRunner transformerAndroidTestRunner =
@ -361,8 +361,8 @@ public class TransformerGapsTest {
.addGap(/* durationUs= */ 1_000_000)
.addItem(AUDIO_VIDEO_MEDIA_ITEM)
.addItem(AUDIO_VIDEO_MEDIA_ITEM)
.setForceAudioTrack(true)
.setForceVideoTrack(true)
.experimentalSetForceAudioTrack(true)
.experimentalSetForceVideoTrack(true)
.build())
.setEffects(
new Effects(

View File

@ -399,7 +399,7 @@ public class VideoTimestampConsistencyTest {
/* testId= */ testName.getMethodName(),
new Composition.Builder(
new EditedMediaItemSequence.Builder(timestampRecordingEditedMediaItems)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build());
@ -427,7 +427,7 @@ public class VideoTimestampConsistencyTest {
compositionPlayer.setComposition(
new Composition.Builder(
new EditedMediaItemSequence.Builder(timestampRecordingEditedMediaItems)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build());
compositionPlayer.prepare();

View File

@ -120,7 +120,8 @@ public final class Composition {
}
/**
* @deprecated Use {@link EditedMediaItemSequence.Builder#setForceAudioTrack(boolean)} instead.
* @deprecated Use {@link
* EditedMediaItemSequence.Builder#experimentalSetForceAudioTrack(boolean)} instead.
*/
@Deprecated
@CanIgnoreReturnValue
@ -234,7 +235,7 @@ public final class Composition {
new ImmutableList.Builder<>();
for (int i = 0; i < sequences.size(); i++) {
updatedSequencesBuilder.add(
sequences.get(i).buildUpon().setForceAudioTrack(forceAudioTrack).build());
sequences.get(i).buildUpon().experimentalSetForceAudioTrack(forceAudioTrack).build());
}
updatedSequences = updatedSequencesBuilder.build();
} else {
@ -359,8 +360,8 @@ public final class Composition {
public final Effects effects;
/**
* @deprecated Use {@link EditedMediaItemSequence.Builder#setForceAudioTrack(boolean)} to set the
* flag and {@link EditedMediaItemSequence#forceAudioTrack} to read the flag.
* @deprecated Use {@link EditedMediaItemSequence.Builder#experimentalSetForceAudioTrack(boolean)}
* to set the flag and {@link EditedMediaItemSequence#forceAudioTrack} to read the flag.
*/
@Deprecated public final boolean forceAudioTrack;

View File

@ -102,8 +102,8 @@ public final class EditedMediaItemSequence {
* <p>A gap is a period of time with no media.
*
* <p>If the gap is added at the start of the sequence, then {@linkplain
* #setForceAudioTrack(boolean) force audio track} or/and {@linkplain
* #setForceVideoTrack(boolean) force video track} flag must be set appropriately.
* #experimentalSetForceAudioTrack(boolean) force audio track} or/and {@linkplain
* #experimentalSetForceVideoTrack(boolean) force video track} flag must be set appropriately.
*
* @param durationUs The duration of the gap, in milliseconds.
* @return This builder, for convenience.
@ -159,10 +159,12 @@ public final class EditedMediaItemSequence {
*
* <p>The default value is {@code false}.
*
* <p>This method is experimental and will be renamed or removed in a future release.
*
* @param forceAudioTrack Whether to force audio track.
*/
@CanIgnoreReturnValue
public Builder setForceAudioTrack(boolean forceAudioTrack) {
public Builder experimentalSetForceAudioTrack(boolean forceAudioTrack) {
this.forceAudioTrack = forceAudioTrack;
return this;
}
@ -196,10 +198,12 @@ public final class EditedMediaItemSequence {
*
* <p>The default value is {@code false}.
*
* <p>This method is experimental and will be renamed or removed in a future release.
*
* @param forceVideoTrack Whether to force video track.
*/
@CanIgnoreReturnValue
public Builder setForceVideoTrack(boolean forceVideoTrack) {
public Builder experimentalSetForceVideoTrack(boolean forceVideoTrack) {
this.forceVideoTrack = forceVideoTrack;
return this;
}

View File

@ -68,9 +68,9 @@ public final class Effects {
* <p>The {@linkplain AudioProcessor audio processor} and {@linkplain Effect video effect} are
* interlinked to help maintain A/V sync. When using Transformer, if the input file doesn't have
* audio, or audio is being removed, you may have to {@linkplain
* EditedMediaItemSequence.Builder#setForceAudioTrack force an audio track} for the interlinked
* effects to function correctly. Alternatively, you can use {@link SpeedChangeEffect} when input
* has no audio.
* EditedMediaItemSequence.Builder#experimentalSetForceAudioTrack force an audio track} for the
* interlinked effects to function correctly. Alternatively, you can use {@link SpeedChangeEffect}
* when input has no audio.
*
* @param speedProvider The {@link SpeedProvider} determining the speed for the media at specific
* timestamps.

View File

@ -364,11 +364,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
trackType == C.TRACK_TYPE_AUDIO
? "The preceding MediaItem does not contain any audio track. If the sequence starts"
+ " with an item without audio track (like images), followed by items with"
+ " audio tracks, then EditedMediaItemSequence.Builder.setForceAudioTrack()"
+ " needs to be set to true."
+ " audio tracks, then"
+ " EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack() needs to"
+ " be set to true."
: "The preceding MediaItem does not contain any video track. If the sequence starts"
+ " with an item without video track (audio only), followed by items with video"
+ " tracks, then EditedMediaItemSequence.Builder.setForceVideoTrack() needs to"
+ " tracks, then"
+ " EditedMediaItemSequence.Builder.experimentalSetForceVideoTrack() needs to"
+ " be set to true.";
sampleConsumer =
checkStateNotNull(sampleConsumersByTrackType.get(trackType), missingTrackMessage);

View File

@ -942,7 +942,7 @@ public final class Transformer {
* C.TrackType track}, so must all items in that sequence.
* <ul>
* <li>For audio, this condition can be removed by setting {@link
* EditedMediaItemSequence.Builder#setForceAudioTrack(boolean)} flag.
* EditedMediaItemSequence.Builder#experimentalSetForceAudioTrack(boolean)} flag.
* </ul>
* <li>If a sequence starts with an HDR {@link EditedMediaItem}, all the following items in the
* sequence must be HDR.

View File

@ -483,7 +483,7 @@ public class CompositionExportTest {
new Composition.Builder(
new EditedMediaItemSequence.Builder()
.addGap(1_000_000)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build(),
new EditedMediaItemSequence.Builder(audioItem1000ms).build())
.build();
@ -515,7 +515,7 @@ public class CompositionExportTest {
new EditedMediaItemSequence.Builder()
.addGap(100_000)
.addItem(audioEditedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build(),
new EditedMediaItemSequence.Builder(otherAudioEditedMediaItem).build())
.build();
@ -595,7 +595,7 @@ public class CompositionExportTest {
new EditedMediaItemSequence.Builder()
.addGap(200_000)
.addItem(audioEditedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -723,7 +723,7 @@ public class CompositionExportTest {
new EditedMediaItemSequence.Builder(audioItem1000ms).build(),
new EditedMediaItemSequence.Builder()
.addGap(1_000_000)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
@ -743,11 +743,11 @@ public class CompositionExportTest {
new Composition.Builder(
new EditedMediaItemSequence.Builder()
.addGap(500_000)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build(),
new EditedMediaItemSequence.Builder()
.addGap(500_000)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();

View File

@ -148,7 +148,10 @@ public final class MediaItemExportTest {
new TestTransformerBuilder(context).setMuxerFactory(muxerFactory).build();
EditedMediaItemSequence gapSequence =
new EditedMediaItemSequence.Builder().addGap(500_000).setForceAudioTrack(true).build();
new EditedMediaItemSequence.Builder()
.addGap(500_000)
.experimentalSetForceAudioTrack(true)
.build();
transformer.start(new Composition.Builder(gapSequence).build(), outputDir.newFile().getPath());
ExportResult result = TransformerTestRunner.runLooper(transformer);
@ -403,7 +406,7 @@ public final class MediaItemExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
@ -424,7 +427,7 @@ public final class MediaItemExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
@ -451,7 +454,7 @@ public final class MediaItemExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
@ -479,7 +482,7 @@ public final class MediaItemExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();
@ -502,7 +505,7 @@ public final class MediaItemExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(editedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.build();

View File

@ -173,7 +173,9 @@ public final class ParameterizedAudioExportTest {
}
return new Composition.Builder(
new EditedMediaItemSequence.Builder(items.build()).setForceAudioTrack(true).build())
new EditedMediaItemSequence.Builder(items.build())
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
}

View File

@ -136,7 +136,9 @@ public final class ParameterizedItemExportTest {
.build();
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(item).setForceAudioTrack(true).build())
new EditedMediaItemSequence.Builder(item)
.experimentalSetForceAudioTrack(true)
.build())
.build();
transformer.start(composition, outputDir.newFile().getPath());

View File

@ -255,7 +255,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(audioVideoMediaItem, videoOnlyMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -285,7 +285,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(videoOnlyMediaItem, audioVideoMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -321,7 +321,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(audioEditedMediaItem, noAudioEditedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -357,7 +357,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(silenceEditedMediaItem, audioEditedMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -386,7 +386,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(videoOnlyMediaItem, videoOnlyMediaItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -420,7 +420,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(silenceWithEffectsItem, silenceItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -454,7 +454,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(silenceItem, silenceWithEffectsItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -491,7 +491,7 @@ public final class SequenceExportTest {
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence.Builder(firstItem, secondItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build())
.setTransmuxVideo(true)
.build();
@ -554,7 +554,7 @@ public final class SequenceExportTest {
new EditedMediaItemSequence.Builder()
.addGap(500_000)
.addItem(audioVideoItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build();
Composition composition = new Composition.Builder(sequence).build();
@ -574,7 +574,7 @@ public final class SequenceExportTest {
new EditedMediaItemSequence.Builder()
.addGap(300_000)
.addGap(200_000)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build();
Composition composition = new Composition.Builder(sequence).build();
@ -622,7 +622,7 @@ public final class SequenceExportTest {
.addGap(200_000)
.addGap(500_000)
.addItem(audioItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build();
Composition composition = new Composition.Builder(sequence).build();
@ -718,7 +718,7 @@ public final class SequenceExportTest {
.addItem(firstAudioItem)
.addGap(200_000)
.addItem(secondAudioItem)
.setForceAudioTrack(true)
.experimentalSetForceAudioTrack(true)
.build();
Composition composition = new Composition.Builder(sequence).build();