Rename last sample duration behaviour enums

This is to improve readability.

PiperOrigin-RevId: 670563611
This commit is contained in:
sheenachhabra 2024-09-03 08:12:58 -07:00 committed by Copybara-Service
parent 1c61fbadf7
commit a7788e0d60
6 changed files with 32 additions and 29 deletions

View File

@ -1241,16 +1241,15 @@ import org.checkerframework.checker.nullness.qual.PolyNull;
@Mp4Muxer.LastSampleDurationBehavior int lastSampleDurationBehavior,
int lastSampleDurationVuFromEndOfStream) {
switch (lastSampleDurationBehavior) {
case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION:
case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS:
// For a track having less than 3 samples, duplicating the last frame duration will
// significantly increase the overall track duration, so avoid that.
return sampleDurationsExceptLast.size() < 2
? 0
: Iterables.getLast(sampleDurationsExceptLast);
case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE:
// Keep the last sample duration as short as possible.
case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO:
return 0;
case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG:
case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER:
return lastSampleDurationVuFromEndOfStream;
default:
throw new IllegalArgumentException(

View File

@ -23,6 +23,7 @@ import static androidx.media3.muxer.Boxes.BOX_HEADER_SIZE;
import static androidx.media3.muxer.Boxes.MFHD_BOX_CONTENT_SIZE;
import static androidx.media3.muxer.Boxes.TFHD_BOX_CONTENT_SIZE;
import static androidx.media3.muxer.Boxes.getTrunBoxContentSize;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS;
import static androidx.media3.muxer.MuxerUtil.UNSIGNED_INT_MAX_VALUE;
import static java.lang.Math.max;
import static java.lang.Math.min;
@ -100,7 +101,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
this.annexBToAvccConverter = annexBToAvccConverter;
this.fragmentDurationUs = fragmentDurationMs * 1_000;
this.sampleCopyEnabled = sampleCopyEnabled;
lastSampleDurationBehavior = Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION;
lastSampleDurationBehavior = LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS;
tracks = new ArrayList<>();
minInputPresentationTimeUs = Long.MAX_VALUE;
currentFragmentSequenceNumber = 1;
@ -333,7 +334,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
? minInputPresentationTimeUs
: pendingSamplesBufferInfo.get(0).presentationTimeUs,
track.videoUnitTimebase(),
Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION,
LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS,
track.endOfStreamTimestampUs);
List<Integer> sampleCompositionTimeOffsets =

View File

@ -146,20 +146,20 @@ public final class Mp4Muxer implements Muxer {
@Retention(RetentionPolicy.SOURCE)
@Target(TYPE_USE)
@IntDef({
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION,
LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER
})
public @interface LastSampleDurationBehavior {}
/** The duration of the last sample is set to 0. */
public static final int LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE = 0;
public static final int LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO = 0;
/**
* Use the difference between the last timestamp and the one before that as the duration of the
* last sample.
*/
public static final int LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION = 1;
public static final int LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS = 1;
/**
* Use the {@link MediaCodec#BUFFER_FLAG_END_OF_STREAM end of stream sample} to set the duration
@ -176,7 +176,7 @@ public final class Mp4Muxer implements Muxer {
* <p>If no explicit {@link MediaCodec#BUFFER_FLAG_END_OF_STREAM} sample is passed, then the
* duration of the last sample will be set to 0.
*/
public static final int LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG = 2;
public static final int LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER = 2;
/** The specific MP4 file format. */
@Documented
@ -216,7 +216,7 @@ public final class Mp4Muxer implements Muxer {
*/
public Builder(FileOutputStream outputStream) {
this.outputStream = outputStream;
lastSampleDurationBehavior = LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE;
lastSampleDurationBehavior = LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO;
sampleCopyEnabled = true;
attemptStreamableOutputEnabled = true;
outputFileFormat = FILE_FORMAT_DEFAULT;
@ -225,7 +225,7 @@ public final class Mp4Muxer implements Muxer {
/**
* Sets the {@link LastSampleDurationBehavior}.
*
* <p>The default value is {@link #LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE}.
* <p>The default value is {@link #LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO}.
*/
@CanIgnoreReturnValue
public Mp4Muxer.Builder setLastSampleDurationBehavior(

View File

@ -15,8 +15,9 @@
*/
package androidx.media3.muxer;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO;
import static androidx.media3.muxer.MuxerTestUtil.FAKE_AUDIO_FORMAT;
import static androidx.media3.muxer.MuxerTestUtil.FAKE_CSD_0;
import static androidx.media3.muxer.MuxerTestUtil.FAKE_VIDEO_FORMAT;
@ -477,7 +478,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
assertThat(durationsVu).containsExactly(0);
@ -494,7 +495,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
assertThat(durationsVu).containsExactly(0);
@ -511,7 +512,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
assertThat(durationsVu).containsExactly(3_000, 5_000, 0);
@ -528,7 +529,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREV_DURATION,
LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS,
C.TIME_UNSET);
assertThat(durationsVu).containsExactly(3_000, 5_000, 5_000);
@ -545,7 +546,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
assertThat(durationsVu).containsExactly(100, 100, 800, 100, 0);
@ -562,7 +563,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER,
/* endOfStreamTimestampUs= */ 10_000);
assertThat(durationsVu).containsExactly(100, 100, 100, 100, 600);
@ -617,7 +618,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
ByteBuffer cttsBox = Boxes.ctts(sampleBufferInfos, durationsVu, VU_TIMEBASE);
@ -635,7 +636,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
ByteBuffer cttsBox = Boxes.ctts(sampleBufferInfos, durationsVu, VU_TIMEBASE);
@ -655,7 +656,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 0L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
ByteBuffer cttsBox = Boxes.ctts(sampleBufferInfos, durationsVu, VU_TIMEBASE);
@ -676,7 +677,7 @@ public class BoxesTest {
sampleBufferInfos,
/* firstSamplePresentationTimeUs= */ 23698215060L,
VU_TIMEBASE,
LAST_SAMPLE_DURATION_BEHAVIOR_INSERT_SHORT_SAMPLE,
LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO,
C.TIME_UNSET);
ByteBuffer cttsBox = Boxes.ctts(sampleBufferInfos, durationsVu, VU_TIMEBASE);

View File

@ -15,6 +15,7 @@
*/
package androidx.media3.muxer;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER;
import static androidx.media3.muxer.MuxerTestUtil.FAKE_VIDEO_FORMAT;
import static androidx.media3.muxer.MuxerTestUtil.XMP_SAMPLE_DATA;
import static androidx.media3.muxer.MuxerTestUtil.getFakeSampleAndSampleInfo;
@ -682,7 +683,7 @@ public class Mp4MuxerEndToEndTest {
Mp4Muxer mp4Muxer =
new Mp4Muxer.Builder(new FileOutputStream(outputFilePath))
.setLastSampleDurationBehavior(
Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG)
LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER)
.build();
mp4Muxer.addMetadataEntry(
new Mp4TimestampData(
@ -730,7 +731,7 @@ public class Mp4MuxerEndToEndTest {
Mp4Muxer mp4Muxer =
new Mp4Muxer.Builder(new FileOutputStream(outputFilePath))
.setLastSampleDurationBehavior(
Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG)
LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER)
.build();
mp4Muxer.addMetadataEntry(
new Mp4TimestampData(

View File

@ -16,6 +16,7 @@
package androidx.media3.transformer;
import static androidx.media3.common.util.Assertions.checkNotNull;
import static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER;
import android.media.MediaCodec;
import android.media.MediaCodec.BufferInfo;
@ -185,7 +186,7 @@ public final class InAppMuxer implements Muxer {
Mp4Muxer.Builder builder = new Mp4Muxer.Builder(outputStream);
if (videoDurationUs != C.TIME_UNSET) {
builder.setLastSampleDurationBehavior(
Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_USING_END_OF_STREAM_FLAG);
LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER);
}
muxer = builder.build();
}