From 7a1f3629ffd82695d3c562fad5c3b09747a053ea Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Thu, 15 Aug 2024 07:37:41 -0700 Subject: [PATCH] Extract method to find minimum presentation timestamp across tracks This is a ground work of implementing depth/editing format interleave mode. PiperOrigin-RevId: 663301670 --- .../java/androidx/media3/muxer/Mp4Writer.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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 f7c23527a3..d6a53c0138 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java @@ -202,6 +202,17 @@ import java.util.concurrent.atomic.AtomicBoolean; outputFileChannel.truncate(newMoovLocation + moovBytesNeeded); } + private static long findMinimumPresentationTimestampUsAcrossTracks(List tracks) { + long minInputPtsUs = Long.MAX_VALUE; + for (int i = 0; i < tracks.size(); i++) { + Track track = tracks.get(i); + if (!track.writtenSamples.isEmpty()) { + minInputPtsUs = min(track.writtenSamples.get(0).presentationTimeUs, minInputPtsUs); + } + } + return minInputPtsUs; + } + private void writeHeader() throws IOException { outputFileChannel.position(0L); outputFileChannel.write(Boxes.ftyp()); @@ -229,15 +240,8 @@ import java.util.concurrent.atomic.AtomicBoolean; } private ByteBuffer assembleCurrentMoovData() { - long minInputPtsUs = Long.MAX_VALUE; - // Recalculate the min timestamp every time, in case some new samples have smaller timestamps. - for (int i = 0; i < tracks.size(); i++) { - Track track = tracks.get(i); - if (!track.writtenSamples.isEmpty()) { - minInputPtsUs = Math.min(track.writtenSamples.get(0).presentationTimeUs, minInputPtsUs); - } - } + long minInputPtsUs = findMinimumPresentationTimestampUsAcrossTracks(tracks); ByteBuffer moovHeader; if (minInputPtsUs != Long.MAX_VALUE) {