diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java index 55cb2c2b12..625f1b104c 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java @@ -821,7 +821,7 @@ import org.checkerframework.checker.nullness.qual.PolyNull; currentSampleTimeUs = nextSampleTimeUs; } - long lastSampleDurationVuFromEndOfStream = 0; + long lastSampleDurationVuFromEndOfStream = C.LENGTH_UNSET; if (endOfStreamTimestampUs != C.TIME_UNSET) { lastSampleDurationVuFromEndOfStream = vuFromUs(endOfStreamTimestampUs, videoUnitTimescale) @@ -1244,16 +1244,18 @@ import org.checkerframework.checker.nullness.qual.PolyNull; @Mp4Muxer.LastSampleDurationBehavior int lastSampleDurationBehavior, int lastSampleDurationVuFromEndOfStream) { switch (lastSampleDurationBehavior) { - case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS: + case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO: + return 0; + case Mp4Muxer + .LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS: + if (lastSampleDurationVuFromEndOfStream != C.LENGTH_UNSET) { + return lastSampleDurationVuFromEndOfStream; + } // 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_SET_TO_ZERO: - return 0; - case Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER: - return lastSampleDurationVuFromEndOfStream; default: throw new IllegalArgumentException( "Unexpected value for the last frame duration behavior " + lastSampleDurationBehavior); diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java index e2d35f338e..50d2de8a40 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java @@ -23,7 +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.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS; import static androidx.media3.muxer.MuxerUtil.UNSIGNED_INT_MAX_VALUE; import static java.lang.Math.max; import static java.lang.Math.min; @@ -101,7 +101,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; this.annexBToAvccConverter = annexBToAvccConverter; this.fragmentDurationUs = fragmentDurationMs * 1_000; this.sampleCopyEnabled = sampleCopyEnabled; - lastSampleDurationBehavior = LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS; + lastSampleDurationBehavior = + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS; tracks = new ArrayList<>(); minInputPresentationTimeUs = Long.MAX_VALUE; currentFragmentSequenceNumber = 1; @@ -334,7 +335,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ? minInputPresentationTimeUs : pendingSamplesBufferInfo.get(0).presentationTimeUs, track.videoUnitTimebase(), - LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS, + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS, track.endOfStreamTimestampUs); List sampleCompositionTimeOffsets = diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java index d41d642c0c..9be6cf794d 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java @@ -147,20 +147,13 @@ public final class Mp4Muxer implements Muxer { @Target(TYPE_USE) @IntDef({ LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO, - LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS, - LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS }) public @interface LastSampleDurationBehavior {} /** The duration of the last sample is set to 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_PREVIOUS = 1; - /** * Use the {@link MediaCodec#BUFFER_FLAG_END_OF_STREAM end of stream sample} to set the duration * of the last sample. @@ -174,9 +167,10 @@ public final class Mp4Muxer implements Muxer { * #writeSampleData written}, no more samples can be written for that track. * *

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. + * duration of the last sample will be same as that of the sample before that. */ - public static final int LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER = 2; + public static final int + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS = 1; /** The specific MP4 file format. */ @Documented @@ -216,7 +210,8 @@ public final class Mp4Muxer implements Muxer { */ public Builder(FileOutputStream outputStream) { this.outputStream = outputStream; - lastSampleDurationBehavior = LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO; + lastSampleDurationBehavior = + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS; sampleCopyEnabled = true; attemptStreamableOutputEnabled = true; outputFileFormat = FILE_FORMAT_DEFAULT; @@ -225,7 +220,8 @@ public final class Mp4Muxer implements Muxer { /** * Sets the {@link LastSampleDurationBehavior}. * - *

The default value is {@link #LAST_SAMPLE_DURATION_BEHAVIOR_SET_TO_ZERO}. + *

The default value is {@link + * #LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS}. */ @CanIgnoreReturnValue public Mp4Muxer.Builder setLastSampleDurationBehavior( diff --git a/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java b/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java index f137ce66fd..db598f46a9 100644 --- a/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java +++ b/libraries/muxer/src/test/java/androidx/media3/muxer/BoxesTest.java @@ -15,8 +15,7 @@ */ package androidx.media3.muxer; -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_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS; 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; @@ -534,7 +533,7 @@ public class BoxesTest { sampleBufferInfos, /* firstSamplePresentationTimeUs= */ 0L, VU_TIMEBASE, - LAST_SAMPLE_DURATION_BEHAVIOR_DUPLICATE_PREVIOUS, + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS, C.TIME_UNSET); assertThat(durationsVu).containsExactly(3_000, 5_000, 5_000); @@ -568,7 +567,7 @@ public class BoxesTest { sampleBufferInfos, /* firstSamplePresentationTimeUs= */ 0L, VU_TIMEBASE, - LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER, + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS, /* endOfStreamTimestampUs= */ 10_000); assertThat(durationsVu).containsExactly(100, 100, 100, 100, 600); diff --git a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java index d708d90ba8..82661b8454 100644 --- a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java +++ b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java @@ -15,7 +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.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS; 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; @@ -683,7 +683,7 @@ public class Mp4MuxerEndToEndTest { Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) .setLastSampleDurationBehavior( - LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER) + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS) .build(); mp4Muxer.addMetadataEntry( new Mp4TimestampData( @@ -725,13 +725,13 @@ public class Mp4MuxerEndToEndTest { @Test public void - createMp4File_withLastSampleDurationBehaviorUsingEndOfStreamFlagButNoEndOfStreamSample_outputsDurationEqualsToLastSampleTimestamp() + createMp4File_withLastSampleDurationBehaviorUsingEndOfStreamFlagButNoEndOfStreamSample_writesExpectedDurationForTheLastSample() throws Exception { String outputFilePath = temporaryFolder.newFile().getPath(); Mp4Muxer mp4Muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) .setLastSampleDurationBehavior( - LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER) + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS) .build(); mp4Muxer.addMetadataEntry( new Mp4TimestampData( @@ -742,8 +742,8 @@ public class Mp4MuxerEndToEndTest { getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 100L); Pair sample3 = getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 200L); - long lastSampleTimestampUs = 300L; - Pair sample4 = getFakeSampleAndSampleInfo(lastSampleTimestampUs); + Pair sample4 = + getFakeSampleAndSampleInfo(/* presentationTimeUs= */ 300L); try { TrackToken track = mp4Muxer.addTrack(FAKE_VIDEO_FORMAT); @@ -759,7 +759,7 @@ public class Mp4MuxerEndToEndTest { TestUtil.extractAllSamplesFromFilePath( new Mp4Extractor(new DefaultSubtitleParserFactory()), outputFilePath); fakeExtractorOutput.track(/* id= */ 0, C.TRACK_TYPE_VIDEO).assertSampleCount(4); - assertThat(fakeExtractorOutput.seekMap.getDurationUs()).isEqualTo(lastSampleTimestampUs); + assertThat(fakeExtractorOutput.seekMap.getDurationUs()).isEqualTo(400L); } private static void writeFakeSamples(Mp4Muxer muxer, TrackToken trackToken, int sampleCount) diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump index 11ba771b68..3dcb21f07b 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_128kbps_15fps_h263.3gp.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 933300 + duration = 999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] - getPosition(466650) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] - getPosition(933300) = [[timeUs=533322, position=428455]] + getPosition(499950) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] + getPosition(999900) = [[timeUs=533322, position=428455]] numberOfTracks = 1 track 0: total output bytes = 50100 @@ -15,7 +15,7 @@ track 0: maxInputSize = 10464 width = 176 height = 144 - frameRate = 16.072002 + frameRate = 15.0015 colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_192kbps_15fps_mpeg4.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_192kbps_15fps_mpeg4.mp4.dump index 708f85f29b..bfa3edbd05 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_192kbps_15fps_mpeg4.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_176x144_192kbps_15fps_mpeg4.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 933300 + duration = 999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(466650) = [[timeUs=0, position=400052]] - getPosition(933300) = [[timeUs=0, position=400052]] + getPosition(499950) = [[timeUs=0, position=400052]] + getPosition(999900) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 45694 @@ -17,7 +17,7 @@ track 0: maxInputSize = 9256 width = 176 height = 144 - frameRate = 16.072002 + frameRate = 15.0015 colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_1ch_16kHz_q10_vorbis.ogg.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_1ch_16kHz_q10_vorbis.ogg.dump index ef1d41a16b..600f7364c7 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_1ch_16kHz_q10_vorbis.ogg.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_1ch_16kHz_q10_vorbis.ogg.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 2992000 + duration = 3008000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400241]] - getPosition(1496000) = [[timeUs=1496000, position=412467]] - getPosition(2992000) = [[timeUs=2992000, position=424658]] + getPosition(1504000) = [[timeUs=1504000, position=412467]] + getPosition(3008000) = [[timeUs=3008000, position=424658]] numberOfTracks = 1 track 0: total output bytes = 24785 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_642x642_768kbps_30fps_vp9.webm.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_642x642_768kbps_30fps_vp9.webm.dump index a7d961c2d0..d7923796e1 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_642x642_768kbps_30fps_vp9.webm.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_642x642_768kbps_30fps_vp9.webm.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 2966600 + duration = 3000000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=1000000, position=578564]] - getPosition(1483300) = [[timeUs=1000000, position=578564], [timeUs=2000000, position=671623]] - getPosition(2966600) = [[timeUs=2000000, position=671623]] + getPosition(1500000) = [[timeUs=1000000, position=578564], [timeUs=2000000, position=671623]] + getPosition(3000000) = [[timeUs=2000000, position=671623]] numberOfTracks = 1 track 0: total output bytes = 378802 @@ -15,7 +15,7 @@ track 0: maxInputSize = 115022 width = 642 height = 642 - frameRate = 30.33776 + frameRate = 30.0 colorInfo: colorSpace = 1 colorRange = 2 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_6ch_8kHz_opus.ogg.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_6ch_8kHz_opus.ogg.dump index 5222799a74..63f06d56a0 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_6ch_8kHz_opus.ogg.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_6ch_8kHz_opus.ogg.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 2993500 + duration = 3013500 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400052]] - getPosition(1496750) = [[timeUs=1496750, position=449844]] - getPosition(2993500) = [[timeUs=2993500, position=499769]] + getPosition(1506750) = [[timeUs=1506750, position=449844]] + getPosition(3013500) = [[timeUs=3013500, position=499769]] numberOfTracks = 1 track 0: total output bytes = 100872 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump index d452da1c65..0dc3ce81dd 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3966600 + duration = 3999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=1000000, position=552554]] - getPosition(1983300) = [[timeUs=1000000, position=552554], [timeUs=2000000, position=638317]] - getPosition(3966600) = [[timeUs=3000000, position=753611]] + getPosition(1999950) = [[timeUs=1000000, position=552554], [timeUs=2000000, position=638317]] + getPosition(3999900) = [[timeUs=3000000, position=753611]] numberOfTracks = 1 track 0: total output bytes = 416333 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 1 width = 800 height = 640 - frameRate = 30.25261 + frameRate = 30.00075 colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump index 2ffbb4a1eb..c0dbc7d789 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3966600 + duration = 3999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=1000000, position=547447]] - getPosition(1983300) = [[timeUs=1000000, position=547447], [timeUs=2000000, position=631674]] - getPosition(3966600) = [[timeUs=3000000, position=744000]] + getPosition(1999950) = [[timeUs=1000000, position=547447], [timeUs=2000000, position=631674]] + getPosition(3999900) = [[timeUs=3000000, position=744000]] numberOfTracks = 1 track 0: total output bytes = 406132 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 2 width = 800 height = 640 - frameRate = 30.25261 + frameRate = 30.00075 colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_vp9.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_vp9.mp4.dump index 767fecd5c8..bbaadb8441 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_vp9.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_vp9.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3966600 + duration = 3999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(1983300) = [[timeUs=0, position=400052]] - getPosition(3966600) = [[timeUs=0, position=400052]] + getPosition(1999950) = [[timeUs=0, position=400052]] + getPosition(3999900) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 305806 @@ -15,7 +15,7 @@ track 0: maxInputSize = 100600 width = 800 height = 640 - frameRate = 30.25261 + frameRate = 30.00075 colorInfo: colorRange = 2 lumaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_16kHz_23.05kbps_amrwb.3gp.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_16kHz_23.05kbps_amrwb.3gp.dump index 5412e4734a..c91c0aa549 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_16kHz_23.05kbps_amrwb.3gp.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_16kHz_23.05kbps_amrwb.3gp.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 2980000 + duration = 3000000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400052]] - getPosition(1490000) = [[timeUs=1490000, position=404418]] - getPosition(2980000) = [[timeUs=2980000, position=408843]] + getPosition(1500000) = [[timeUs=1500000, position=404477]] + getPosition(3000000) = [[timeUs=3000000, position=408843]] numberOfTracks = 1 track 0: total output bytes = 8850 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_8kHz_12.2kbps_amrnb.3gp.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_8kHz_12.2kbps_amrnb.3gp.dump index c73ebb42f7..bb7c3c74f3 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_8kHz_12.2kbps_amrnb.3gp.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_mono_8kHz_12.2kbps_amrnb.3gp.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3000000 + duration = 3020000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400052]] - getPosition(1500000) = [[timeUs=1500000, position=402452]] - getPosition(3000000) = [[timeUs=3000000, position=404852]] + getPosition(1510000) = [[timeUs=1510000, position=402452]] + getPosition(3020000) = [[timeUs=3020000, position=404852]] numberOfTracks = 1 track 0: total output bytes = 4832 diff --git a/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump index e51c271d43..931fbd8a33 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 66700 + duration = 100000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(33350) = [[timeUs=0, position=400052]] - getPosition(66700) = [[timeUs=0, position=400052]] + getPosition(50000) = [[timeUs=0, position=400052]] + getPosition(100000) = [[timeUs=0, position=400052]] numberOfTracks = 3 track 0: total output bytes = 387 @@ -65,7 +65,7 @@ track 2: maxNumReorderSamples = 0 width = 1920 height = 1080 - frameRate = 44.977512 + frameRate = 30.0 colorInfo: colorSpace = 2 colorRange = 1 diff --git a/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump index 29f8d1e1c7..15bb7dc9ae 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 4203200 + duration = 4236500 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=1002944, position=2283470]] - getPosition(2101600) = [[timeUs=2003555, position=4184649], [timeUs=3003433, position=4426916]] - getPosition(4203200) = [[timeUs=4003266, position=6438541]] + getPosition(2118250) = [[timeUs=2003555, position=4184649], [timeUs=3003433, position=4426916]] + getPosition(4236500) = [[timeUs=4003266, position=6438541]] numberOfTracks = 2 track 0: total output bytes = 7944083 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 0 width = 1280 height = 720 - frameRate = 30.215075 + frameRate = 29.977577 colorInfo: colorSpace = 6 colorRange = 2 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump index 55a53a82f9..e7b1f0afcd 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3000 + duration = 4000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=3000, position=400108]] - getPosition(1500) = [[timeUs=0, position=400052], [timeUs=3000, position=400108]] - getPosition(3000) = [[timeUs=3000, position=400108]] + getPosition(2000) = [[timeUs=0, position=400052], [timeUs=3000, position=400108]] + getPosition(4000) = [[timeUs=2000, position=400220]] numberOfTracks = 1 track 0: total output bytes = 224 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 2 width = 12 height = 10 - frameRate = 1333.3334 + frameRate = 999.99994 colorInfo: colorRange = 1 lumaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump index 97e13a1a04..536a75972d 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 273900 + duration = 414800 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=273900, position=400108]] - getPosition(136950) = [[timeUs=0, position=400052], [timeUs=273900, position=400108]] - getPosition(273900) = [[timeUs=273900, position=400108]] + getPosition(207400) = [[timeUs=0, position=400052], [timeUs=273900, position=400108]] + getPosition(414800) = [[timeUs=33188, position=400220]] numberOfTracks = 1 track 0: total output bytes = 224 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 2 width = 12 height = 10 - frameRate = 14.603869 + frameRate = 9.643202 colorInfo: colorRange = 1 lumaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump index 991d4b778e..ba48bde18a 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 4137400 + duration = 4171600 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=1002944, position=2283470]] - getPosition(2068700) = [[timeUs=2003555, position=4184649], [timeUs=3003433, position=4426916]] - getPosition(4137400) = [[timeUs=4003266, position=6438541]] + getPosition(2085800) = [[timeUs=2003555, position=4184649], [timeUs=3003433, position=4426916]] + getPosition(4171600) = [[timeUs=4003266, position=6438541]] numberOfTracks = 2 track 0: total output bytes = 7822354 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 0 width = 1280 height = 720 - frameRate = 30.21221 + frameRate = 29.964523 colorInfo: colorSpace = 6 colorRange = 2 diff --git a/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump index 5e5fc87e26..edd499a878 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 1064600 + duration = 1087800 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(532300) = [[timeUs=0, position=400052]] - getPosition(1064600) = [[timeUs=0, position=400052]] + getPosition(543900) = [[timeUs=0, position=400052]] + getPosition(1087800) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 69084 @@ -15,7 +15,7 @@ track 0: maxInputSize = 46460 width = 1080 height = 720 - frameRate = 31.004547 + frameRate = 29.973022 colorInfo: lumaBitdepth = 8 chromaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump index 9fbd961e36..1576e9b11a 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 1065600 + duration = 1088800 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(532800) = [[timeUs=0, position=400052]] - getPosition(1065600) = [[timeUs=0, position=400052]] + getPosition(544400) = [[timeUs=0, position=400052]] + getPosition(1088800) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 9529 @@ -211,7 +211,7 @@ track 1: maxNumReorderSamples = 0 width = 1080 height = 720 - frameRate = 31.004547 + frameRate = 29.973022 colorInfo: colorSpace = 1 colorRange = 2 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_128kbps_15fps_h263.3gp/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_128kbps_15fps_h263.3gp/transmuxed_with_inappmuxer.dump index 19fd0812c3..e4cc836c5e 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_128kbps_15fps_h263.3gp/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_128kbps_15fps_h263.3gp/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 933300 + duration = 999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] - getPosition(466650) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] - getPosition(933300) = [[timeUs=533322, position=428455]] + getPosition(499950) = [[timeUs=0, position=400052], [timeUs=533322, position=428455]] + getPosition(999900) = [[timeUs=533322, position=428455]] numberOfTracks = 1 track 0: total output bytes = 50100 @@ -15,7 +15,7 @@ track 0: maxInputSize = 10464 width = 176 height = 144 - frameRate = 16.072002 + frameRate = 15.0015 colorInfo: colorRange = 2 lumaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_192kbps_15fps_mpeg4.mp4/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_192kbps_15fps_mpeg4.mp4/transmuxed_with_inappmuxer.dump index 2d46e02863..f4e9448a44 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_192kbps_15fps_mpeg4.mp4/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_176x144_192kbps_15fps_mpeg4.mp4/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 933300 + duration = 999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(466650) = [[timeUs=0, position=400052]] - getPosition(933300) = [[timeUs=0, position=400052]] + getPosition(499950) = [[timeUs=0, position=400052]] + getPosition(999900) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 45694 @@ -17,7 +17,7 @@ track 0: maxInputSize = 9256 width = 176 height = 144 - frameRate = 16.072002 + frameRate = 15.0015 colorInfo: colorRange = 2 lumaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_1ch_16kHz_q10_vorbis.ogg/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_1ch_16kHz_q10_vorbis.ogg/transmuxed_with_inappmuxer.dump index e4d41e918e..0797ddc3a6 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_1ch_16kHz_q10_vorbis.ogg/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_1ch_16kHz_q10_vorbis.ogg/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 2992000 + duration = 3008000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400241]] - getPosition(1496000) = [[timeUs=1496000, position=412467]] - getPosition(2992000) = [[timeUs=2992000, position=424658]] + getPosition(1504000) = [[timeUs=1504000, position=412467]] + getPosition(3008000) = [[timeUs=3008000, position=424658]] numberOfTracks = 1 track 0: total output bytes = 24785 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_6ch_8kHz_opus.ogg/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_6ch_8kHz_opus.ogg/transmuxed_with_inappmuxer.dump index cd9b0f5b94..f4d1e6e2ad 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_6ch_8kHz_opus.ogg/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_6ch_8kHz_opus.ogg/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3000000 + duration = 3020000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400052]] - getPosition(1500000) = [[timeUs=1500000, position=449844]] - getPosition(3000000) = [[timeUs=3000000, position=499769]] + getPosition(1510000) = [[timeUs=1510000, position=449844]] + getPosition(3020000) = [[timeUs=3020000, position=499769]] numberOfTracks = 1 track 0: total output bytes = 100872 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_16kHz_23.05kbps_amrwb.3gp/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_16kHz_23.05kbps_amrwb.3gp/transmuxed_with_inappmuxer.dump index 99696a4b44..71c9a00b9a 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_16kHz_23.05kbps_amrwb.3gp/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_16kHz_23.05kbps_amrwb.3gp/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 2980000 + duration = 3000000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400052]] - getPosition(1490000) = [[timeUs=1490000, position=404418]] - getPosition(2980000) = [[timeUs=2980000, position=408843]] + getPosition(1500000) = [[timeUs=1500000, position=404477]] + getPosition(3000000) = [[timeUs=3000000, position=408843]] numberOfTracks = 1 track 0: total output bytes = 8850 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_8kHz_12.2kbps_amrnb.3gp/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_8kHz_12.2kbps_amrnb.3gp/transmuxed_with_inappmuxer.dump index 4f8e086cbc..d6bb13c571 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_8kHz_12.2kbps_amrnb.3gp/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/bbb_mono_8kHz_12.2kbps_amrnb.3gp/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 3000000 + duration = 3020000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=1, position=400052]] - getPosition(1500000) = [[timeUs=1500000, position=402452]] - getPosition(3000000) = [[timeUs=3000000, position=404852]] + getPosition(1510000) = [[timeUs=1510000, position=402452]] + getPosition(3020000) = [[timeUs=3020000, position=404852]] numberOfTracks = 1 track 0: total output bytes = 4832 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/h265_with_metadata_track.mp4/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/h265_with_metadata_track.mp4/transmuxed_with_inappmuxer.dump index 4712d1b3a2..0a08b66ac8 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/h265_with_metadata_track.mp4/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/h265_with_metadata_track.mp4/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 66700 + duration = 100000 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(33350) = [[timeUs=0, position=400052]] - getPosition(66700) = [[timeUs=0, position=400052]] + getPosition(50000) = [[timeUs=0, position=400052]] + getPosition(100000) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 678996 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 0 width = 1920 height = 1080 - frameRate = 44.977512 + frameRate = 30.0 rotationDegrees = 90 colorInfo: colorSpace = 2 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_av1.mp4/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_av1.mp4/transmuxed_with_inappmuxer.dump index 8dbba16fa4..0465df21f1 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_av1.mp4/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_av1.mp4/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 1064600 + duration = 1087800 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(532300) = [[timeUs=0, position=400052]] - getPosition(1064600) = [[timeUs=0, position=400052]] + getPosition(543900) = [[timeUs=0, position=400052]] + getPosition(1087800) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 69084 @@ -15,7 +15,7 @@ track 0: maxInputSize = 46460 width = 1080 height = 720 - frameRate = 31.004547 + frameRate = 29.973022 colorInfo: colorRange = 2 lumaBitdepth = 8 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump index c38ac093a1..d13279a8d9 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 1065600 + duration = 1088800 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052]] - getPosition(532800) = [[timeUs=0, position=400052]] - getPosition(1065600) = [[timeUs=0, position=400052]] + getPosition(544400) = [[timeUs=0, position=400052]] + getPosition(1088800) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 301213 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 0 width = 1080 height = 720 - frameRate = 31.004547 + frameRate = 29.973022 colorInfo: colorSpace = 1 colorRange = 2 diff --git a/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump index de83c1ee6b..29ccf4a9c1 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true - duration = 966600 + duration = 999900 getPosition(0) = [[timeUs=0, position=400052]] getPosition(1) = [[timeUs=0, position=400052], [timeUs=333333, position=416043]] - getPosition(483300) = [[timeUs=333333, position=416043], [timeUs=666666, position=428793]] - getPosition(966600) = [[timeUs=666666, position=428793]] + getPosition(499950) = [[timeUs=333333, position=416043], [timeUs=666666, position=428793]] + getPosition(999900) = [[timeUs=666666, position=428793]] numberOfTracks = 1 track 0: total output bytes = 41647 @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 2 width = 854 height = 480 - frameRate = 31.036623 + frameRate = 30.003 colorInfo: colorRange = 2 lumaBitdepth = 8 diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java index 268e0259b6..5aa8650a9f 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java @@ -1813,7 +1813,7 @@ public class TransformerEndToEndTest { FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath(mp4Extractor, exportTestResult.filePath); // TODO: b/324903070 - The generated output file has incorrect duration. - assertThat(fakeExtractorOutput.seekMap.getDurationUs()).isEqualTo(1_555_700); + assertThat(fakeExtractorOutput.seekMap.getDurationUs()).isEqualTo(1_578_900); assertThat(fakeExtractorOutput.numberOfTracks).isEqualTo(1); FakeTrackOutput audioTrack = fakeExtractorOutput.trackOutputs.get(0); int expectedSampleCount = 68; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java index 8f1e7f70f1..ab01b2e1de 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java @@ -16,7 +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 static androidx.media3.muxer.Mp4Muxer.LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS; import android.media.MediaCodec; import android.media.MediaCodec.BufferInfo; @@ -153,7 +153,7 @@ public final class InAppMuxer implements Muxer { * *

The default is {@link C#TIME_UNSET} to not set any duration in the output. In this case * the video track duration is determined by the samples written to it and the duration of the - * last sample is set to 0. + * last sample will be same as that of the sample before that. * * @param videoDurationUs The duration of the video track (in microseconds) in the output, or * {@link C#TIME_UNSET} to not set any duration. Only applicable when a video track is @@ -186,7 +186,7 @@ public final class InAppMuxer implements Muxer { Mp4Muxer.Builder builder = new Mp4Muxer.Builder(outputStream); if (videoDurationUs != C.TIME_UNSET) { builder.setLastSampleDurationBehavior( - LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER); + LAST_SAMPLE_DURATION_BEHAVIOR_SET_FROM_END_OF_STREAM_BUFFER_OR_DUPLICATE_PREVIOUS); } muxer = builder.build(); }