Move setMaxDelayBetweenSamplesMs on Transformer builder

This property is transformer specific and does not belong to
muxer interface.
This is to eventually replace muxer interface in Transformer module with
muxer interface in Muxer module.

PiperOrigin-RevId: 618895836
This commit is contained in:
sheenachhabra 2024-03-25 10:58:51 -07:00 committed by Copybara-Service
parent f4e444bdd2
commit 2eaece5ed9
14 changed files with 111 additions and 138 deletions

View File

@ -326,18 +326,13 @@ public final class TransformerActivity extends AppCompatActivity {
.setEnableFallback(bundle.getBoolean(ConfigurationActivity.ENABLE_FALLBACK))
.build());
long maxDelayBetweenSamplesMs = DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS;
if (!bundle.getBoolean(ConfigurationActivity.ABORT_SLOW_EXPORT)) {
maxDelayBetweenSamplesMs = C.TIME_UNSET;
transformerBuilder.setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET);
}
Muxer.Factory muxerFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs);
Muxer.Factory muxerFactory = new DefaultMuxer.Factory();
if (bundle.getBoolean(ConfigurationActivity.PRODUCE_FRAGMENTED_MP4)) {
muxerFactory =
new InAppMuxer.Factory.Builder()
.setMaxDelayBetweenSamplesMs(maxDelayBetweenSamplesMs)
.setFragmentedMp4Enabled(true)
.build();
muxerFactory = new InAppMuxer.Factory.Builder().setFragmentedMp4Enabled(true).build();
}
transformerBuilder.setMuxerFactory(muxerFactory);

View File

@ -471,10 +471,5 @@ public class TransformerPauseResumeTest {
public void release(boolean forCancellation) throws MuxerException {
wrappedMuxer.release(forCancellation);
}
@Override
public long getMaxDelayBetweenSamplesMs() {
return wrappedMuxer.getMaxDelayBetweenSamplesMs();
}
}
}

View File

@ -28,39 +28,22 @@ public final class DefaultMuxer implements Muxer {
/** A {@link Muxer.Factory} for {@link DefaultMuxer}. */
public static final class Factory implements Muxer.Factory {
/** The default value returned by {@link #getMaxDelayBetweenSamplesMs()}. */
public static final long DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS = 10_000;
private final Muxer.Factory muxerFactory;
/**
* Creates an instance with {@link Muxer#getMaxDelayBetweenSamplesMs() maxDelayBetweenSamplesMs}
* set to {@link #DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS}.
*/
/** Creates an instance with {@code videoDurationMs} set to {@link C#TIME_UNSET}. */
public Factory() {
this(/* maxDelayBetweenSamplesMs= */ DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS);
this(/* videoDurationMs= */ C.TIME_UNSET);
}
/**
* Creates an instance.
*
* @param maxDelayBetweenSamplesMs See {@link Muxer#getMaxDelayBetweenSamplesMs()}.
*/
public Factory(long maxDelayBetweenSamplesMs) {
this(maxDelayBetweenSamplesMs, /* videoDurationMs= */ C.TIME_UNSET);
}
/**
* Creates an instance.
*
* @param maxDelayBetweenSamplesMs See {@link Muxer#getMaxDelayBetweenSamplesMs()}.
* @param videoDurationMs The duration of the video track (in milliseconds) to enforce in the
* output, or {@link C#TIME_UNSET} to not enforce. Only applicable when a video track is
* {@linkplain #addTrack(Format) added}.
*/
public Factory(long maxDelayBetweenSamplesMs, long videoDurationMs) {
this.muxerFactory = new FrameworkMuxer.Factory(maxDelayBetweenSamplesMs, videoDurationMs);
public Factory(long videoDurationMs) {
this.muxerFactory = new FrameworkMuxer.Factory(videoDurationMs);
}
@Override
@ -101,9 +84,4 @@ public final class DefaultMuxer implements Muxer {
public void release(boolean forCancellation) throws MuxerException {
muxer.release(forCancellation);
}
@Override
public long getMaxDelayBetweenSamplesMs() {
return muxer.getMaxDelayBetweenSamplesMs();
}
}

View File

@ -181,7 +181,7 @@ public final class ExportException extends Exception {
/**
* Caused by a timeout while muxing media samples.
*
* @see Muxer#getMaxDelayBetweenSamplesMs()
* @see Transformer.Builder#setMaxDelayBetweenMuxerSamplesMs(long)
*/
public static final int ERROR_CODE_MUXING_TIMEOUT = 7002;

View File

@ -47,12 +47,9 @@ import java.nio.ByteBuffer;
/** {@link Muxer.Factory} for {@link FrameworkMuxer}. */
public static final class Factory implements Muxer.Factory {
private final long maxDelayBetweenSamplesMs;
private final long videoDurationMs;
public Factory(long maxDelayBetweenSamplesMs, long videoDurationMs) {
this.maxDelayBetweenSamplesMs = maxDelayBetweenSamplesMs;
public Factory(long videoDurationMs) {
this.videoDurationMs = videoDurationMs;
}
@ -64,7 +61,7 @@ import java.nio.ByteBuffer;
} catch (IOException e) {
throw new MuxerException("Error creating muxer", e);
}
return new FrameworkMuxer(mediaMuxer, maxDelayBetweenSamplesMs, videoDurationMs);
return new FrameworkMuxer(mediaMuxer, videoDurationMs);
}
@Override
@ -79,7 +76,6 @@ import java.nio.ByteBuffer;
}
private final MediaMuxer mediaMuxer;
private final long maxDelayBetweenSamplesMs;
private final long videoDurationUs;
private final MediaCodec.BufferInfo bufferInfo;
private final SparseLongArray trackIndexToLastPresentationTimeUs;
@ -89,10 +85,8 @@ import java.nio.ByteBuffer;
private boolean isStarted;
private FrameworkMuxer(
MediaMuxer mediaMuxer, long maxDelayBetweenSamplesMs, long videoDurationMs) {
private FrameworkMuxer(MediaMuxer mediaMuxer, long videoDurationMs) {
this.mediaMuxer = mediaMuxer;
this.maxDelayBetweenSamplesMs = maxDelayBetweenSamplesMs;
this.videoDurationUs = Util.msToUs(videoDurationMs);
bufferInfo = new MediaCodec.BufferInfo();
trackIndexToLastPresentationTimeUs = new SparseLongArray();
@ -236,11 +230,6 @@ import java.nio.ByteBuffer;
}
}
@Override
public long getMaxDelayBetweenSamplesMs() {
return maxDelayBetweenSamplesMs;
}
// Accesses MediaMuxer state via reflection to ensure that muxer resources can be released even
// if stopping fails.
@SuppressLint("PrivateApi")

View File

@ -62,24 +62,15 @@ public final class InAppMuxer implements Muxer {
/** A builder for {@link Factory} instances. */
public static final class Builder {
private long maxDelayBetweenSamplesMs;
private @Nullable MetadataProvider metadataProvider;
private boolean fragmentedMp4Enabled;
private int fragmentDurationUs;
/** Creates a {@link Builder} instance with default values. */
public Builder() {
maxDelayBetweenSamplesMs = DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS;
fragmentDurationUs = Mp4Muxer.DEFAULT_FRAGMENT_DURATION_US;
}
/** See {@link Muxer#getMaxDelayBetweenSamplesMs()}. */
@CanIgnoreReturnValue
public Builder setMaxDelayBetweenSamplesMs(long maxDelayBetweenSamplesMs) {
this.maxDelayBetweenSamplesMs = maxDelayBetweenSamplesMs;
return this;
}
/**
* Sets an implementation of {@link MetadataProvider}.
*
@ -110,22 +101,18 @@ public final class InAppMuxer implements Muxer {
/** Builds a {@link Factory} instance. */
public Factory build() {
return new Factory(
maxDelayBetweenSamplesMs, metadataProvider, fragmentedMp4Enabled, fragmentDurationUs);
return new Factory(metadataProvider, fragmentedMp4Enabled, fragmentDurationUs);
}
}
private final long maxDelayBetweenSamplesMs;
private final @Nullable MetadataProvider metadataProvider;
private final boolean fragmentedMp4Enabled;
private final int fragmentDurationUs;
private Factory(
long maxDelayBetweenSamplesMs,
@Nullable MetadataProvider metadataProvider,
boolean fragmentedMp4Enabled,
int fragmentDurationUs) {
this.maxDelayBetweenSamplesMs = maxDelayBetweenSamplesMs;
this.metadataProvider = metadataProvider;
this.fragmentedMp4Enabled = fragmentedMp4Enabled;
this.fragmentDurationUs = fragmentDurationUs;
@ -145,7 +132,7 @@ public final class InAppMuxer implements Muxer {
.setFragmentedMp4Enabled(fragmentedMp4Enabled)
.setFragmentDurationUs(fragmentDurationUs)
.build();
return new InAppMuxer(mp4Muxer, maxDelayBetweenSamplesMs, metadataProvider);
return new InAppMuxer(mp4Muxer, metadataProvider);
}
@Override
@ -160,18 +147,13 @@ public final class InAppMuxer implements Muxer {
}
private final Mp4Muxer mp4Muxer;
private final long maxDelayBetweenSamplesMs;
private final @Nullable MetadataProvider metadataProvider;
private final List<TrackToken> trackTokenList;
private final BufferInfo bufferInfo;
private final Set<Metadata.Entry> metadataEntries;
private InAppMuxer(
Mp4Muxer mp4Muxer,
long maxDelayBetweenSamplesMs,
@Nullable MetadataProvider metadataProvider) {
private InAppMuxer(Mp4Muxer mp4Muxer, @Nullable MetadataProvider metadataProvider) {
this.mp4Muxer = mp4Muxer;
this.maxDelayBetweenSamplesMs = maxDelayBetweenSamplesMs;
this.metadataProvider = metadataProvider;
trackTokenList = new ArrayList<>();
bufferInfo = new BufferInfo();
@ -247,11 +229,6 @@ public final class InAppMuxer implements Muxer {
}
}
@Override
public long getMaxDelayBetweenSamplesMs() {
return maxDelayBetweenSamplesMs;
}
private void writeMetadata() {
if (metadataProvider != null) {
Set<Metadata.Entry> metadataEntriesCopy = new LinkedHashSet<>(metadataEntries);

View File

@ -104,16 +104,4 @@ public interface Muxer {
* forCancellation} is false.
*/
void release(boolean forCancellation) throws MuxerException;
/**
* Returns the maximum delay allowed between output samples, in milliseconds, or {@link
* C#TIME_UNSET} if there is no maximum.
*
* <p>This is the maximum delay between samples of any track. They can be of the same or of
* different track types.
*
* <p>This value is used to abort the export when the maximum delay is reached. Note that there is
* no guarantee that the export will be aborted exactly at that time.
*/
long getMaxDelayBetweenSamplesMs();
}

View File

@ -145,6 +145,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private final SparseArray<TrackInfo> trackTypeToInfo;
private final ScheduledExecutorService abortScheduledExecutorService;
private final @MonotonicNonNull Format appendVideoFormat;
private final long maxDelayBetweenSamplesMs;
private boolean isReady;
private boolean isEnded;
@ -177,6 +178,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* presentation timestamps before the first video sample.
* @param appendVideoFormat The format which will be used to write samples after transitioning
* from {@link #MUXER_MODE_MUX_PARTIAL} to {@link #MUXER_MODE_APPEND}.
* @param maxDelayBetweenSamplesMs The maximum delay allowed between output samples regardless of
* the track type, or {@link C#TIME_UNSET} if there is no maximum.
*/
public MuxerWrapper(
String outputPath,
@ -184,7 +187,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
Listener listener,
@MuxerMode int muxerMode,
boolean dropSamplesBeforeFirstVideoSample,
@Nullable Format appendVideoFormat) {
@Nullable Format appendVideoFormat,
long maxDelayBetweenSamplesMs) {
this.outputPath = outputPath;
this.muxerFactory = muxerFactory;
this.listener = listener;
@ -196,6 +200,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|| (muxerMode == MUXER_MODE_MUX_PARTIAL && appendVideoFormat != null),
"appendVideoFormat must be present if and only if muxerMode is MUXER_MODE_MUX_PARTIAL.");
this.appendVideoFormat = appendVideoFormat;
this.maxDelayBetweenSamplesMs = maxDelayBetweenSamplesMs;
trackTypeToInfo = new SparseArray<>();
previousTrackType = C.TRACK_TYPE_NONE;
firstVideoPresentationTimeUs = C.TIME_UNSET;
@ -673,7 +678,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private void resetAbortTimer() {
checkStateNotNull(muxer);
long maxDelayBetweenSamplesMs = muxer.getMaxDelayBetweenSamplesMs();
if (maxDelayBetweenSamplesMs == C.TIME_UNSET) {
return;
}

View File

@ -112,6 +112,7 @@ public final class Transformer {
private boolean flattenForSlowMotion;
private boolean trimOptimizationEnabled;
private boolean fileStartsOnVideoFrameEnabled;
private long maxDelayBetweenMuxerSamplesMs;
private ListenerSet<Transformer.Listener> listeners;
private AssetLoader.@MonotonicNonNull Factory assetLoaderFactory;
private AudioMixer.Factory audioMixerFactory;
@ -129,6 +130,7 @@ public final class Transformer {
*/
public Builder(Context context) {
this.context = context.getApplicationContext();
maxDelayBetweenMuxerSamplesMs = DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS;
audioProcessors = ImmutableList.of();
videoEffects = ImmutableList.of();
audioMixerFactory = new DefaultAudioMixer.Factory();
@ -153,6 +155,7 @@ public final class Transformer {
this.removeVideo = transformer.removeVideo;
this.trimOptimizationEnabled = transformer.trimOptimizationEnabled;
this.fileStartsOnVideoFrameEnabled = transformer.fileStartsOnVideoFrameEnabled;
this.maxDelayBetweenMuxerSamplesMs = transformer.maxDelayBetweenMuxerSamplesMs;
this.listeners = transformer.listeners;
this.assetLoaderFactory = transformer.assetLoaderFactory;
this.audioMixerFactory = transformer.audioMixerFactory;
@ -329,7 +332,7 @@ public final class Transformer {
}
/**
* Set whether to ensure that the output file starts on a video frame.
* Sets whether to ensure that the output file starts on a video frame.
*
* <p>Any audio samples that are earlier than the first video frame will be dropped. This can
* make the output of trimming operations more compatible with player implementations that don't
@ -347,6 +350,24 @@ public final class Transformer {
return this;
}
/**
* Sets the maximum delay allowed between output samples regardless of the track type, or {@link
* C#TIME_UNSET} if there is no maximum. The default value is {@link
* #DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS}.
*
* <p>The export will be aborted when no sample is written in {@code
* maxDelayBetweenMuxerSamplesMs}. Note that there is no guarantee that the export will be
* aborted exactly at that time.
*
* @param maxDelayBetweenMuxerSamplesMs The maximum delay allowed (in microseconds).
* @return This builder.
*/
@CanIgnoreReturnValue
public Builder setMaxDelayBetweenMuxerSamplesMs(long maxDelayBetweenMuxerSamplesMs) {
this.maxDelayBetweenMuxerSamplesMs = maxDelayBetweenMuxerSamplesMs;
return this;
}
/**
* @deprecated Use {@link #addListener(Listener)}, {@link #removeListener(Listener)} or {@link
* #removeAllListeners()} instead.
@ -564,6 +585,7 @@ public final class Transformer {
flattenForSlowMotion,
trimOptimizationEnabled,
fileStartsOnVideoFrameEnabled,
maxDelayBetweenMuxerSamplesMs,
listeners,
assetLoaderFactory,
audioMixerFactory,
@ -730,6 +752,12 @@ public final class Transformer {
/** Indicates that the progress is permanently unavailable. */
public static final int PROGRESS_STATE_UNAVAILABLE = 3;
/**
* The default value for the {@linkplain Builder#setMaxDelayBetweenMuxerSamplesMs maximum delay
* between output samples}.
*/
public static final long DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS = 10_000;
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target(TYPE_USE)
@ -808,6 +836,8 @@ public final class Transformer {
private final boolean flattenForSlowMotion;
private final boolean trimOptimizationEnabled;
private final boolean fileStartsOnVideoFrameEnabled;
private final long maxDelayBetweenMuxerSamplesMs;
private final ListenerSet<Transformer.Listener> listeners;
@Nullable private final AssetLoader.Factory assetLoaderFactory;
private final AudioMixer.Factory audioMixerFactory;
@ -843,6 +873,7 @@ public final class Transformer {
boolean flattenForSlowMotion,
boolean trimOptimizationEnabled,
boolean fileStartsOnVideoFrameEnabled,
long maxDelayBetweenMuxerSamplesMs,
ListenerSet<Listener> listeners,
@Nullable AssetLoader.Factory assetLoaderFactory,
AudioMixer.Factory audioMixerFactory,
@ -862,6 +893,7 @@ public final class Transformer {
this.flattenForSlowMotion = flattenForSlowMotion;
this.trimOptimizationEnabled = trimOptimizationEnabled;
this.fileStartsOnVideoFrameEnabled = fileStartsOnVideoFrameEnabled;
this.maxDelayBetweenMuxerSamplesMs = maxDelayBetweenMuxerSamplesMs;
this.listeners = listeners;
this.assetLoaderFactory = assetLoaderFactory;
this.audioMixerFactory = audioMixerFactory;
@ -1006,7 +1038,8 @@ public final class Transformer {
componentListener,
MuxerWrapper.MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ fileStartsOnVideoFrameEnabled,
/* appendVideoFormat= */ null),
/* appendVideoFormat= */ null,
maxDelayBetweenMuxerSamplesMs),
componentListener,
/* initialTimestampOffsetUs= */ 0,
/* useDefaultAssetLoaderFactory= */ false);
@ -1256,7 +1289,8 @@ public final class Transformer {
componentListener,
MuxerWrapper.MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null),
/* appendVideoFormat= */ null,
maxDelayBetweenMuxerSamplesMs),
componentListener,
/* initialTimestampOffsetUs= */ 0,
/* useDefaultAssetLoaderFactory= */ false);
@ -1289,7 +1323,8 @@ public final class Transformer {
componentListener,
MuxerWrapper.MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ resumeMetadata.videoFormat);
/* appendVideoFormat= */ resumeMetadata.videoFormat,
maxDelayBetweenMuxerSamplesMs);
startInternal(
TransmuxTranscodeHelper.createVideoOnlyComposition(
@ -1340,7 +1375,8 @@ public final class Transformer {
componentListener,
MuxerWrapper.MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
maxDelayBetweenMuxerSamplesMs);
startInternal(
TransmuxTranscodeHelper.createAudioTranscodeAndVideoTransmuxComposition(
@ -1435,7 +1471,8 @@ public final class Transformer {
componentListener,
MuxerWrapper.MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
mp4Info.videoFormat);
mp4Info.videoFormat,
maxDelayBetweenMuxerSamplesMs);
if (shouldTranscodeVideo(
checkNotNull(mp4Info.videoFormat),
composition,

View File

@ -52,11 +52,7 @@ public final class CapturingMuxer implements Muxer, Dumpable {
@Nullable private CapturingMuxer muxer;
public Factory() {
this(/* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
}
public Factory(long maxDelayBetweenSamplesMs) {
this.wrappedFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs);
this.wrappedFactory = new DefaultMuxer.Factory();
}
/** Returns the most recently {@linkplain #create created} {@code TestMuxer}. */
@ -136,11 +132,6 @@ public final class CapturingMuxer implements Muxer, Dumpable {
wrappedMuxer.release(forCancellation);
}
@Override
public long getMaxDelayBetweenSamplesMs() {
return wrappedMuxer.getMaxDelayBetweenSamplesMs();
}
// Dumper.Dumpable implementation.
@Override

View File

@ -69,7 +69,8 @@ public final class EncodedSampleExporterTest {
mock(MuxerWrapper.Listener.class),
MuxerWrapper.MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null),
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS),
fallbackListener,
/* initialTimestampOffsetUs= */ 0);
}

View File

@ -19,7 +19,6 @@ package androidx.media3.transformer;
import static androidx.media3.test.utils.robolectric.RobolectricUtil.runLooperUntil;
import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_DECODED;
import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_ENCODED;
import static androidx.media3.transformer.DefaultMuxer.Factory.DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS;
import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_NA;
import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_TRANSMUXED;
import static androidx.media3.transformer.ExportResult.OPTIMIZATION_ABANDONED_KEYFRAME_PLACEMENT_OPTIMAL_FOR_TRIM;
@ -919,10 +918,10 @@ public final class MediaItemExportTest {
decoderFactory,
new FakeClock(/* isAutoAdvancing= */ true),
mediaSourceFactory);
CapturingMuxer.Factory muxerFactory =
new CapturingMuxer.Factory(/* maxDelayBetweenSamplesMs= */ 1);
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory();
Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false)
.setMaxDelayBetweenMuxerSamplesMs(1)
.setAssetLoaderFactory(assetLoaderFactory)
.build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
@ -936,10 +935,11 @@ public final class MediaItemExportTest {
@Test
public void start_withUnsetMaxDelayBetweenSamples_completesSuccessfully() throws Exception {
CapturingMuxer.Factory muxerFactory =
new CapturingMuxer.Factory(/* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory();
Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
createTransformerBuilder(muxerFactory, /* enableFallback= */ false)
.setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET)
.build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
transformer.start(mediaItem, outputDir.newFile().getPath());
@ -1490,8 +1490,7 @@ public final class MediaItemExportTest {
// FrameworkMuxer.
Transformer transformer =
createTransformerBuilder(
new FrameworkMuxer.Factory(DEFAULT_MAX_DELAY_BETWEEN_SAMPLES_MS, C.TIME_UNSET),
/* enableFallback= */ false)
new FrameworkMuxer.Factory(C.TIME_UNSET), /* enableFallback= */ false)
.build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ELST_SKIP_500MS);

View File

@ -91,7 +91,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setAdditionalRotationDegrees(90);
muxerWrapper.setTrackCount(1);
muxerWrapper.setAdditionalRotationDegrees(180);
@ -109,7 +110,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setAdditionalRotationDegrees(90);
muxerWrapper.setTrackCount(1);
muxerWrapper.setAdditionalRotationDegrees(180);
@ -127,7 +129,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
assertThrows(IllegalStateException.class, muxerWrapper::changeToAppendMode);
}
@ -144,7 +147,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null));
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS));
}
@Test
@ -156,7 +160,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
@ -179,7 +184,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -202,7 +208,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ differentVideoFormat);
/* appendVideoFormat= */ differentVideoFormat,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -237,7 +244,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ differentVideoFormat);
/* appendVideoFormat= */ differentVideoFormat,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -263,7 +271,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -290,7 +299,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ true,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(2);
muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
@ -318,7 +328,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ true,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(2);
muxerWrapper.addTrackFormat(FAKE_AUDIO_TRACK_FORMAT);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
@ -357,7 +368,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -378,7 +390,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(2);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
@ -407,7 +420,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -564,7 +578,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -590,7 +605,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(
@ -615,7 +631,8 @@ public class MuxerWrapperTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_MUX_PARTIAL,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT);
/* appendVideoFormat= */ FAKE_VIDEO_TRACK_FORMAT,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
muxerWrapper.setTrackCount(1);
muxerWrapper.addTrackFormat(FAKE_VIDEO_TRACK_FORMAT);
muxerWrapper.writeSample(

View File

@ -71,7 +71,8 @@ public final class TransformerUtilTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
assertThat(
shouldTranscodeVideo(
@ -104,7 +105,8 @@ public final class TransformerUtilTest {
new NoOpMuxerListenerImpl(),
MUXER_MODE_DEFAULT,
/* dropSamplesBeforeFirstVideoSample= */ false,
/* appendVideoFormat= */ null);
/* appendVideoFormat= */ null,
Transformer.DEFAULT_MAX_DELAY_BETWEEN_MUXER_SAMPLES_MS);
assertThat(
shouldTranscodeVideo(