From aeb8fd134bd61b5a17ed70c33e1e87f4a0ba873d Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Mon, 17 Jun 2024 03:33:46 -0700 Subject: [PATCH] Write moov box at the start of the file if possible This is done by reserving some space for moov box at the start of the file and writing it there if it fits. If it doesn't fit, then it is written at the end of the file. PiperOrigin-RevId: 643944698 --- ...erEndToEndNonParameterizedAndroidTest.java | 2 +- .../java/androidx/media3/muxer/Mp4Muxer.java | 20 ++- .../java/androidx/media3/muxer/Mp4Writer.java | 74 +++++++-- .../media3/muxer/Mp4MuxerEndToEndTest.java | 60 ++++++++ ...68kbps_30fps_avc_non_reference_3b.mp4.dump | 8 +- ...x640_768kbps_30fps_avc_pyramid_3b.mp4.dump | 8 +- .../h265_with_metadata_track.mp4.dump | 8 +- .../assets/muxerdumps/hdr10-720p.mp4.dump | 8 +- .../mp4_with_0_orientation.mp4.dump | 8 +- .../mp4_with_180_orientation.mp4.dump | 8 +- .../mp4_with_270_orientation.mp4.dump | 8 +- .../mp4_with_90_orientation.mp4.dump | 8 +- .../muxerdumps/mp4_with_b_frame.mp4.dump | 8 +- .../mp4_with_b_frame_large_pts.mp4.dump | 8 +- .../mp4_with_different_tracks_offset.mp4.dump | 8 +- .../mp4_with_float_metadata.mp4.dump | 8 +- .../muxerdumps/mp4_with_frame_rate.mp4.dump | 8 +- .../muxerdumps/mp4_with_location.mp4.dump | 8 +- ..._at_the_end_and_free_box_at_start.mp4.dump | 35 +++++ ...h_moov_at_the_end_and_no_free_box.mp4.dump | 33 ++++ .../mp4_with_null_location.mp4.dump | 8 +- .../mp4_with_same_tracks_offset.mp4.dump | 8 +- .../mp4_with_samples_and_metadata.mp4.dump | 8 +- .../mp4_with_string_metadata.mp4.dump | 8 +- .../assets/muxerdumps/mp4_with_xmp.mp4.dump | 8 +- .../mp4_without_empty_track.mp4.dump | 8 +- .../muxerdumps/partial_hdr10-720p.mp4.dump | 142 ++++++++++++++++-- .../assets/muxerdumps/sample_av1.mp4.dump | 8 +- .../muxerdumps/sample_no_bframes.mp4.dump | 8 +- .../transmuxed_with_inappmuxer.dump | 8 +- .../transmuxed_with_inappmuxer.dump | 8 +- 31 files changed, 445 insertions(+), 113 deletions(-) create mode 100644 libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump create mode 100644 libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump diff --git a/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java b/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java index 66dd862383..a6261c99c4 100644 --- a/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java +++ b/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java @@ -70,7 +70,7 @@ public class Mp4MuxerEndToEndNonParameterizedAndroidTest { // Muxer not closed. // Audio sample written = 192 out of 195. - // Video sample written = 94 out of 127. + // Video sample written = 125 out of 127. // Output is still a valid MP4 file. FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath(new Mp4Extractor(), checkNotNull(outputPath)); 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 9b40e5c4f2..bf1df7419d 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java @@ -95,6 +95,7 @@ public final class Mp4Muxer implements Muxer { private @LastFrameDurationBehavior int lastFrameDurationBehavior; @Nullable private AnnexBToAvccConverter annexBToAvccConverter; private boolean sampleCopyEnabled; + private boolean attemptStreamableOutputEnabled; /** * Creates a {@link Builder} instance with default values. @@ -105,6 +106,7 @@ public final class Mp4Muxer implements Muxer { this.fileOutputStream = checkNotNull(fileOutputStream); lastFrameDurationBehavior = LAST_FRAME_DURATION_BEHAVIOR_INSERT_SHORT_FRAME; sampleCopyEnabled = true; + attemptStreamableOutputEnabled = true; } /** @@ -148,6 +150,21 @@ public final class Mp4Muxer implements Muxer { return this; } + /** + * Sets whether to attempt to write a file where the metadata is stored at the start, which can + * make the file more efficient to read sequentially. + * + *

Setting to {@code true} does not guarantee a streamable MP4 output. + * + *

The default value is {@code true}. + */ + @CanIgnoreReturnValue + public Mp4Muxer.Builder setAttemptStreamableOutputEnabled( + boolean attemptStreamableOutputEnabled) { + this.attemptStreamableOutputEnabled = attemptStreamableOutputEnabled; + return this; + } + /** Builds an {@link Mp4Muxer} instance. */ public Mp4Muxer build() { MetadataCollector metadataCollector = new MetadataCollector(); @@ -158,7 +175,8 @@ public final class Mp4Muxer implements Muxer { fileOutputStream, moovStructure, annexBToAvccConverter == null ? AnnexBToAvccConverter.DEFAULT : annexBToAvccConverter, - sampleCopyEnabled); + sampleCopyEnabled, + attemptStreamableOutputEnabled); return new Mp4Muxer(mp4Writer, metadataCollector); } diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java index 6225c36be3..15b20b6376 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java @@ -40,6 +40,8 @@ import java.util.concurrent.atomic.AtomicBoolean; /** Writes all media samples into a single mdat box. */ /* package */ final class Mp4Writer { private static final long INTERLEAVE_DURATION_US = 1_000_000L; + private static final int DEFAULT_MOOV_BOX_SIZE_BYTES = 400_000; + private static final String FREE_BOX_TYPE = "free"; private final FileOutputStream outputStream; private final FileChannel output; @@ -49,6 +51,11 @@ import java.util.concurrent.atomic.AtomicBoolean; private final AtomicBoolean hasWrittenSamples; private final boolean sampleCopyEnabled; + // Stores location of the space reserved for the moov box at the beginning of the file (after ftyp + // box) + private long reservedMoovSpaceStart; + private long reservedMoovSpaceEnd; + private boolean canWriteMoovAtStart; private long mdatStart; private long mdatEnd; private long mdatDataEnd; // Always <= mdatEnd @@ -65,17 +72,20 @@ import java.util.concurrent.atomic.AtomicBoolean; * H.265 NAL units from the Annex-B format (using start codes to delineate NAL units) to the * AVCC format (which uses length prefixes). * @param sampleCopyEnabled Whether sample copying is enabled. + * @param attemptStreamableOutputEnabled Whether to attempt to write a streamable output. */ public Mp4Writer( FileOutputStream outputStream, Mp4MoovStructure moovGenerator, AnnexBToAvccConverter annexBToAvccConverter, - boolean sampleCopyEnabled) { + boolean sampleCopyEnabled, + boolean attemptStreamableOutputEnabled) { this.outputStream = outputStream; this.output = outputStream.getChannel(); this.moovGenerator = moovGenerator; this.annexBToAvccConverter = annexBToAvccConverter; this.sampleCopyEnabled = sampleCopyEnabled; + canWriteMoovAtStart = attemptStreamableOutputEnabled; tracks = new ArrayList<>(); hasWrittenSamples = new AtomicBoolean(false); lastMoovWritten = Range.closed(0L, 0L); @@ -115,9 +125,16 @@ import java.util.concurrent.atomic.AtomicBoolean; output.position(0L); output.write(Boxes.ftyp()); + if (canWriteMoovAtStart) { + // Reserve some space for moov box by adding a free box. + reservedMoovSpaceStart = output.position(); + output.write( + BoxUtils.wrapIntoBox(FREE_BOX_TYPE, ByteBuffer.allocate(DEFAULT_MOOV_BOX_SIZE_BYTES))); + reservedMoovSpaceEnd = output.position(); + } + // Start with an empty mdat box. mdatStart = output.position(); - ByteBuffer header = ByteBuffer.allocate(4 + 4 + 8); header.putInt(1); // 4 bytes, indicating a 64-bit length field header.put(Util.getUtf8Bytes("mdat")); // 4 bytes @@ -127,7 +144,7 @@ import java.util.concurrent.atomic.AtomicBoolean; // The box includes only its type and length. mdatDataEnd = mdatStart + 16; - mdatEnd = mdatDataEnd; + mdatEnd = canWriteMoovAtStart ? Long.MAX_VALUE : mdatDataEnd; } private ByteBuffer assembleCurrentMoovData() { @@ -174,7 +191,7 @@ import java.util.concurrent.atomic.AtomicBoolean; // Write a free box to the end of the file, with the new moov box wrapped into it. output.position(newMoovBoxPosition); - output.write(BoxUtils.wrapIntoBox("free", newMoovBoxData.duplicate())); + output.write(BoxUtils.wrapIntoBox(FREE_BOX_TYPE, newMoovBoxData.duplicate())); // The current state is: // | ftyp | mdat .. .. .. | previous moov | free (new moov)| @@ -188,6 +205,35 @@ import java.util.concurrent.atomic.AtomicBoolean; Range.closed(newMoovBoxPosition, newMoovBoxPosition + newMoovBoxData.remaining()); } + /** + * Attempts to write moov box at the start (after the ftyp box). If this is not possible, the moov + * box is written at the end of the file (after the mdat box). + */ + private void maybeWriteMoovAtStart() throws IOException { + ByteBuffer moovBox = assembleCurrentMoovData(); + int moovBoxSize = moovBox.remaining(); + // Keep some space for free box to fill the remaining space. + if (moovBox.remaining() + BOX_HEADER_SIZE <= reservedMoovSpaceEnd - reservedMoovSpaceStart) { + output.position(reservedMoovSpaceStart); + output.write(moovBox); + // Write free box in the remaining space. + int freeSpace = (int) (reservedMoovSpaceEnd - output.position() - BOX_HEADER_SIZE); + output.write(BoxUtils.wrapIntoBox(FREE_BOX_TYPE, ByteBuffer.allocate(freeSpace))); + } else { + // Write moov at the end (after mdat). + canWriteMoovAtStart = false; + mdatEnd = mdatDataEnd; + output.position(mdatEnd); + output.write(moovBox); + lastMoovWritten = Range.closed(mdatEnd, mdatEnd + moovBoxSize); + // Replace previously written moov box (after ftyp box) with a free box. + int freeSpace = (int) (reservedMoovSpaceEnd - reservedMoovSpaceStart - BOX_HEADER_SIZE); + ByteBuffer freeBox = BoxUtils.wrapIntoBox(FREE_BOX_TYPE, ByteBuffer.allocate(freeSpace)); + output.write(freeBox, reservedMoovSpaceStart); + } + updateMdatSize(mdatDataEnd - mdatStart); + } + /** * Writes the final moov box and trims extra space from the mdat box. * @@ -196,6 +242,11 @@ import java.util.concurrent.atomic.AtomicBoolean; * @throws IOException If there is any error while writing data to the disk. */ private void writeMoovAndTrim() throws IOException { + if (canWriteMoovAtStart) { + maybeWriteMoovAtStart(); + return; + } + // The current state is: // | ftyp | mdat .. .. .. (00 00 00) | moov | @@ -229,10 +280,7 @@ import java.util.concurrent.atomic.AtomicBoolean; ByteBuffer freeHeader = ByteBuffer.allocate(4 + 4); freeHeader.putInt((int) remainingLength); - freeHeader.put((byte) 'f'); - freeHeader.put((byte) 'r'); - freeHeader.put((byte) 'e'); - freeHeader.put((byte) 'e'); + freeHeader.put(Util.getUtf8Bytes(FREE_BOX_TYPE)); freeHeader.flip(); output.write(freeHeader); @@ -307,11 +355,14 @@ import java.util.concurrent.atomic.AtomicBoolean; mdatDataEnd += output.write(currentSampleByteBuffer, mdatDataEnd); track.writtenSamples.add(currentSampleBufferInfo); } while (!track.pendingSamplesBufferInfo.isEmpty()); - checkState(mdatDataEnd <= mdatEnd); } private void maybeExtendMdatAndRewriteMoov(long additionalBytesNeeded) throws IOException { + // The mdat box can be written till the end of the file. + if (canWriteMoovAtStart) { + return; + } // If the required number of bytes doesn't fit in the gap between the actual data and the moov // box, extend the file and write out the moov box to the end again. if (mdatDataEnd + additionalBytesNeeded >= mdatEnd) { @@ -332,6 +383,7 @@ import java.util.concurrent.atomic.AtomicBoolean; } private void doInterleave() throws IOException { + boolean newSamplesWritten = false; for (int i = 0; i < tracks.size(); i++) { Track track = tracks.get(i); // TODO: b/270583563 - Check if we need to consider the global timestamp instead. @@ -341,10 +393,14 @@ import java.util.concurrent.atomic.AtomicBoolean; if (lastSampleInfo.presentationTimeUs - firstSampleInfo.presentationTimeUs > INTERLEAVE_DURATION_US) { + newSamplesWritten = true; flushPending(track); } } } + if (newSamplesWritten && canWriteMoovAtStart) { + maybeWriteMoovAtStart(); + } } /** 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 de8988083e..6b49cdd839 100644 --- a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java +++ b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java @@ -300,4 +300,64 @@ public class Mp4MuxerEndToEndTest { DumpFileAsserts.assertOutput( context, dumpableBox, MuxerTestUtil.getExpectedDumpFilePath("mp4_without_empty_track.mp4")); } + + @Test + public void writeMp4File_withLargeNumberOfSamples_writesMoovBoxAtTheEndAndFreeBoxAtStart() + throws Exception { + String outputFilePath = temporaryFolder.newFile().getPath(); + Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)).build(); + try { + muxer.addMetadataEntry( + new Mp4TimestampData( + /* creationTimestampSeconds= */ 1_000_000L, + /* modificationTimestampSeconds= */ 5_000_000L)); + TrackToken token = muxer.addTrack(FAKE_VIDEO_FORMAT); + for (int i = 0; i < 50_000; i++) { + Pair sampleAndSampleInfo = + getFakeSampleAndSampleInfo(/* presentationTimeUs= */ i); + muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); + } + } finally { + muxer.close(); + } + + DumpableMp4Box dumpableBox = + new DumpableMp4Box(ByteBuffer.wrap(TestUtil.getByteArrayFromFilePath(outputFilePath))); + DumpFileAsserts.assertOutput( + context, + dumpableBox, + MuxerTestUtil.getExpectedDumpFilePath( + "mp4_with_moov_at_the_end_and_free_box_at_start.mp4")); + } + + @Test + public void writeMp4File_withAttemptStreamableMp4SetToFalse_writesMoovBoxAtTheEndAndNoFreeBox() + throws Exception { + String outputFilePath = temporaryFolder.newFile().getPath(); + Mp4Muxer muxer = + new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) + .setAttemptStreamableOutputEnabled(false) + .build(); + try { + muxer.addMetadataEntry( + new Mp4TimestampData( + /* creationTimestampSeconds= */ 1_000_000L, + /* modificationTimestampSeconds= */ 5_000_000L)); + TrackToken token = muxer.addTrack(FAKE_VIDEO_FORMAT); + for (int i = 0; i < 1_000; i++) { + Pair sampleAndSampleInfo = + getFakeSampleAndSampleInfo(/* presentationTimeUs= */ i); + muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); + } + } finally { + muxer.close(); + } + + DumpableMp4Box dumpableBox = + new DumpableMp4Box(ByteBuffer.wrap(TestUtil.getByteArrayFromFilePath(outputFilePath))); + DumpFileAsserts.assertOutput( + context, + dumpableBox, + MuxerTestUtil.getExpectedDumpFilePath("mp4_with_moov_at_the_end_and_no_free_box.mp4")); + } } 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 de881800cf..d452da1c65 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1000000, position=152546]] - getPosition(1983300) = [[timeUs=1000000, position=152546], [timeUs=2000000, position=238309]] - getPosition(3966600) = [[timeUs=3000000, position=353603]] + 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]] numberOfTracks = 1 track 0: total output bytes = 416333 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 735c55c741..2ffbb4a1eb 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1000000, position=147439]] - getPosition(1983300) = [[timeUs=1000000, position=147439], [timeUs=2000000, position=231666]] - getPosition(3966600) = [[timeUs=3000000, position=343992]] + 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]] numberOfTracks = 1 track 0: total output bytes = 406132 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 f5e9dad6cb..e51c271d43 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(33350) = [[timeUs=0, position=44]] - getPosition(66700) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(33350) = [[timeUs=0, position=400052]] + getPosition(66700) = [[timeUs=0, position=400052]] numberOfTracks = 3 track 0: total output bytes = 387 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 66166ea2ff..29f8d1e1c7 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1002944, position=1883462]] - getPosition(2101600) = [[timeUs=2003555, position=3784641], [timeUs=3003433, position=4026908]] - getPosition(4203200) = [[timeUs=4003266, position=6038533]] + 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]] numberOfTracks = 2 track 0: total output bytes = 7944083 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump index 79fe4a79ba..d6e3f123ac 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump index 4091c61c0e..df8155d6b8 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump index ee484540a7..661abe051b 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump index 07ba6abadd..777c936c6d 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 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 9816ec8587..55a53a82f9 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=3000, position=100]] - getPosition(1500) = [[timeUs=0, position=44], [timeUs=3000, position=100]] - getPosition(3000) = [[timeUs=3000, position=100]] + 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]] numberOfTracks = 1 track 0: total output bytes = 224 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 df157d8eb0..97e13a1a04 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=273900, position=100]] - getPosition(136950) = [[timeUs=0, position=44], [timeUs=273900, position=100]] - getPosition(273900) = [[timeUs=273900, position=100]] + 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]] numberOfTracks = 1 track 0: total output bytes = 224 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump index b04d934074..0fd2192dc3 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 200 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=100, position=100]] - getPosition(100) = [[timeUs=100, position=100]] - getPosition(200) = [[timeUs=100, position=100]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=100, position=400108]] + getPosition(100) = [[timeUs=100, position=400108]] + getPosition(200) = [[timeUs=100, position=400108]] numberOfTracks = 2 track 0: total output bytes = 112 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump index 17ab052466..162d30cd41 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump index 37e58250f3..0927f7cec6 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump index 336942ce19..bb70e4d748 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump new file mode 100644 index 0000000000..7e1be4a7fe --- /dev/null +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump @@ -0,0 +1,35 @@ +ftyp (28 bytes): + Data = length 20, hash EF896440 +free (400008 bytes): + Data = length 400000, hash BBC7B001 +mdat (2800016 bytes): + Data = length 2800000, hash 7A1CC21 +moov (472634 bytes): + mvhd (108 bytes): + Data = length 100, hash CAE9466E + trak (472518 bytes): + tkhd (92 bytes): + Data = length 84, hash 59BEBEA1 + mdia (472418 bytes): + mdhd (32 bytes): + Data = length 24, hash 58568E23 + hdlr (44 bytes): + Data = length 36, hash A0852FF2 + minf (472334 bytes): + vmhd (20 bytes): + Data = length 12, hash EE830681 + dinf (36 bytes): + Data = length 28, hash D535436B + stbl (472270 bytes): + stsd (166 bytes): + Data = length 158, hash 11532063 + stts (72008 bytes): + Data = length 72000, hash FA47C748 + stsz (200020 bytes): + Data = length 200012, hash 719AE8EE + stsc (28 bytes): + Data = length 20, hash 2BB02571 + co64 (24 bytes): + Data = length 16, hash E4EE6662 + stss (200016 bytes): + Data = length 200008, hash 8ABF61C3 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump new file mode 100644 index 0000000000..d0ed07b796 --- /dev/null +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump @@ -0,0 +1,33 @@ +ftyp (28 bytes): + Data = length 20, hash EF896440 +mdat (56016 bytes): + Data = length 56000, hash F535891 +moov (10074 bytes): + mvhd (108 bytes): + Data = length 100, hash E6A54065 + trak (9958 bytes): + tkhd (92 bytes): + Data = length 84, hash CB9C1A18 + mdia (9858 bytes): + mdhd (32 bytes): + Data = length 24, hash 463A595A + hdlr (44 bytes): + Data = length 36, hash A0852FF2 + minf (9774 bytes): + vmhd (20 bytes): + Data = length 12, hash EE830681 + dinf (36 bytes): + Data = length 28, hash D535436B + stbl (9710 bytes): + stsd (166 bytes): + Data = length 158, hash 11532063 + stts (1448 bytes): + Data = length 1440, hash 4C9792F5 + stsz (4020 bytes): + Data = length 4012, hash 537BD986 + stsc (28 bytes): + Data = length 20, hash 932CC0C9 + co64 (24 bytes): + Data = length 16, hash E4EE4D2E + stss (4016 bytes): + Data = length 4008, hash 729103FF diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump index 79fe4a79ba..d6e3f123ac 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump index b04d934074..0fd2192dc3 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 200 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=100, position=100]] - getPosition(100) = [[timeUs=100, position=100]] - getPosition(200) = [[timeUs=100, position=100]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=100, position=400108]] + getPosition(100) = [[timeUs=100, position=400108]] + getPosition(200) = [[timeUs=100, position=400108]] numberOfTracks = 2 track 0: total output bytes = 112 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump index 3dbc845250..5d4fd1ad51 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump @@ -1,7 +1,5 @@ ftyp (28 bytes): Data = length 20, hash EF896440 -mdat (72 bytes): - Data = length 56, hash DB5662FB moov (873 bytes): mvhd (108 bytes): Data = length 100, hash 2613A5C @@ -37,8 +35,12 @@ moov (873 bytes): stsc (28 bytes): Data = length 20, hash 8F6E8285 co64 (24 bytes): - Data = length 16, hash E4EE4D2E + Data = length 16, hash E4EE6662 stss (20 bytes): Data = length 12, hash EE911E03 uuid (2853 bytes): Data = length 2845, hash 52AF0F9D +free (396282 bytes): + Data = length 396274, hash 946025C1 +mdat (72 bytes): + Data = length 56, hash DB5662FB diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump index 67ca0d5f00..7302d44094 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump index d34937de98..d53f3030be 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump @@ -1,7 +1,5 @@ ftyp (28 bytes): Data = length 20, hash EF896440 -mdat (72 bytes): - Data = length 56, hash DB5662FB moov (658 bytes): mvhd (108 bytes): Data = length 100, hash 2613A5C @@ -28,8 +26,12 @@ moov (658 bytes): stsc (28 bytes): Data = length 20, hash 8F6E8285 co64 (24 bytes): - Data = length 16, hash E4EE4D2E + Data = length 16, hash E4EE6662 stss (20 bytes): Data = length 12, hash EE911E03 uuid (2853 bytes): Data = length 2845, hash 52AF0F9D +free (396497 bytes): + Data = length 396489, hash 429891F +mdat (72 bytes): + Data = length 56, hash DB5662FB diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump index 29077ca72e..0a6174d56b 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump @@ -1,7 +1,5 @@ ftyp (28 bytes): Data = length 20, hash EF896440 -mdat (128 bytes): - Data = length 112, hash 1AAF8FF5 moov (674 bytes): mvhd (108 bytes): Data = length 100, hash 105FA889 @@ -28,6 +26,10 @@ moov (674 bytes): stsc (28 bytes): Data = length 20, hash 8F7C9A06 co64 (24 bytes): - Data = length 16, hash E4EE4D2E + Data = length 16, hash E4EE6662 stss (24 bytes): Data = length 16, hash 7940D386 +free (399334 bytes): + Data = length 399326, hash 3C185041 +mdat (128 bytes): + Data = length 112, hash 1AAF8FF5 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 0fca9a4300..991d4b778e 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,14 +1,14 @@ seekMap: isSeekable = true - duration = 4117500 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1002944, position=1883462]] - getPosition(2058750) = [[timeUs=2003555, position=3784641], [timeUs=3003433, position=4026908]] - getPosition(4117500) = [[timeUs=3003433, position=4026908]] + duration = 4137400 + 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]] numberOfTracks = 2 track 0: - total output bytes = 5911788 - sample count = 94 + total output bytes = 7822354 + sample count = 125 format 0: id = 1 sampleMimeType = video/hevc @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 0 width = 1280 height = 720 - frameRate = 30.28936 + frameRate = 30.21221 colorInfo: colorSpace = 6 colorRange = 2 @@ -401,8 +401,132 @@ track 0: data = length 54110, hash 7B27C656 sample 93: time = 3103411 - flags = 536870912 + flags = 0 data = length 68308, hash C7F4AE80 + sample 94: + time = 3136744 + flags = 0 + data = length 67629, hash 48E625B6 + sample 95: + time = 3170100 + flags = 0 + data = length 66968, hash D46F0E01 + sample 96: + time = 3203400 + flags = 0 + data = length 53022, hash 91852F32 + sample 97: + time = 3236722 + flags = 0 + data = length 66729, hash 12CA7617 + sample 98: + time = 3270055 + flags = 0 + data = length 53556, hash 904B00CF + sample 99: + time = 3303377 + flags = 0 + data = length 63459, hash AB813676 + sample 100: + time = 3336711 + flags = 0 + data = length 63637, hash 8B0750F6 + sample 101: + time = 3370033 + flags = 0 + data = length 64700, hash 8922E5BE + sample 102: + time = 3403366 + flags = 0 + data = length 54680, hash 4F49EB3D + sample 103: + time = 3436700 + flags = 0 + data = length 62600, hash 9DF2F9F5 + sample 104: + time = 3470022 + flags = 0 + data = length 69506, hash DB702311 + sample 105: + time = 3503355 + flags = 0 + data = length 50277, hash 1034F0A6 + sample 106: + time = 3536711 + flags = 0 + data = length 52100, hash 33745B51 + sample 107: + time = 3570000 + flags = 0 + data = length 65067, hash F73FE2C7 + sample 108: + time = 3603333 + flags = 0 + data = length 68940, hash 4331DA16 + sample 109: + time = 3636666 + flags = 0 + data = length 55215, hash 68087A40 + sample 110: + time = 3670000 + flags = 0 + data = length 56090, hash 2F483911 + sample 111: + time = 3703322 + flags = 0 + data = length 58356, hash D7D190C6 + sample 112: + time = 3736644 + flags = 0 + data = length 57368, hash 2F6B7918 + sample 113: + time = 3769977 + flags = 0 + data = length 56591, hash 19B696D2 + sample 114: + time = 3803300 + flags = 0 + data = length 54748, hash 7E0CE70E + sample 115: + time = 3836622 + flags = 0 + data = length 73133, hash CFA46EE4 + sample 116: + time = 3869955 + flags = 0 + data = length 52577, hash 5E174B5 + sample 117: + time = 3903300 + flags = 0 + data = length 74756, hash 5A571060 + sample 118: + time = 3936611 + flags = 0 + data = length 67171, hash 6F13FB2C + sample 119: + time = 3969933 + flags = 0 + data = length 42130, hash DAE94DB2 + sample 120: + time = 4003266 + flags = 1 + data = length 120199, hash 32DEA792 + sample 121: + time = 4036600 + flags = 0 + data = length 51028, hash FC7AF64F + sample 122: + time = 4069911 + flags = 0 + data = length 51879, hash 74852E0E + sample 123: + time = 4103244 + flags = 0 + data = length 51443, hash B735512A + sample 124: + time = 4137444 + flags = 536870912 + data = length 65012, hash DB29A2CD track 1: total output bytes = 131233 sample count = 192 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 df405fb466..5e5fc87e26 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(532300) = [[timeUs=0, position=44]] - getPosition(1064600) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(532300) = [[timeUs=0, position=400052]] + getPosition(1064600) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 69084 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 e67cdbc2ce..fb97007c12 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(532800) = [[timeUs=0, position=44]] - getPosition(1065600) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(532800) = [[timeUs=0, position=400052]] + getPosition(1065600) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 9529 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 2827128174..ef05d8fe75 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(532800) = [[timeUs=0, position=44]] - getPosition(1065600) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(532800) = [[timeUs=0, position=400052]] + getPosition(1065600) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 301222 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 03ac9e6c82..de83c1ee6b 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 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=333333, position=16035]] - getPosition(483300) = [[timeUs=333333, position=16035], [timeUs=666666, position=28785]] - getPosition(966600) = [[timeUs=666666, position=28785]] + 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]] numberOfTracks = 1 track 0: total output bytes = 41647