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 7ee4aa429d..d33d48f56e 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Boxes.java @@ -52,19 +52,6 @@ import org.checkerframework.checker.nullness.qual.PolyNull; /** Writes out various types of boxes as per MP4 (ISO/IEC 14496-12) standards. */ /* package */ final class Boxes { - /** Provides track's metadata like media format, written samples. */ - public interface TrackMetadataProvider { - Format format(); - - int videoUnitTimebase(); - - ImmutableList writtenSamples(); - - ImmutableList writtenChunkOffsets(); - - ImmutableList writtenChunkSampleCounts(); - } - /** Total number of bytes in an integer. */ private static final int BYTES_PER_INTEGER = 4; @@ -125,7 +112,7 @@ import org.checkerframework.checker.nullness.qual.PolyNull; /** Returns the moov box. */ @SuppressWarnings("InlinedApi") public static ByteBuffer moov( - List tracks, + List tracks, MetadataCollector metadataCollector, long minInputPtsUs, boolean isFragmentedMp4, @@ -142,17 +129,17 @@ import org.checkerframework.checker.nullness.qual.PolyNull; int nextTrackId = 1; long videoDurationUs = 0L; for (int i = 0; i < tracks.size(); i++) { - TrackMetadataProvider track = tracks.get(i); - if (!isFragmentedMp4 && track.writtenSamples().isEmpty()) { + Track track = tracks.get(i); + if (!isFragmentedMp4 && track.writtenSamples.isEmpty()) { continue; } - Format format = track.format(); + Format format = track.format; String languageCode = bcp47LanguageTagToIso3(format.language); // Generate the sample durations to calculate the total duration for tkhd box. List sampleDurationsVu = convertPresentationTimestampsToDurationsVu( - track.writtenSamples(), + track.writtenSamples, minInputPtsUs, track.videoUnitTimebase(), lastSampleDurationBehavior); @@ -168,12 +155,12 @@ import org.checkerframework.checker.nullness.qual.PolyNull; ByteBuffer stts = stts(sampleDurationsVu); ByteBuffer ctts = MimeTypes.isVideo(format.sampleMimeType) - ? ctts(track.writtenSamples(), sampleDurationsVu, track.videoUnitTimebase()) + ? ctts(track.writtenSamples, sampleDurationsVu, track.videoUnitTimebase()) : ByteBuffer.allocate(0); - ByteBuffer stsz = stsz(track.writtenSamples()); - ByteBuffer stsc = stsc(track.writtenChunkSampleCounts()); + ByteBuffer stsz = stsz(track.writtenSamples); + ByteBuffer stsc = stsc(track.writtenChunkSampleCounts); ByteBuffer chunkOffsetBox = - isFragmentedMp4 ? stco(track.writtenChunkOffsets()) : co64(track.writtenChunkOffsets()); + isFragmentedMp4 ? stco(track.writtenChunkOffsets) : co64(track.writtenChunkOffsets); String handlerType; String handlerName; @@ -190,7 +177,7 @@ import org.checkerframework.checker.nullness.qual.PolyNull; sampleEntryBox = videoSampleEntry(format); stsdBox = stsd(sampleEntryBox); stblBox = - stbl(stsdBox, stts, ctts, stsz, stsc, chunkOffsetBox, stss(track.writtenSamples())); + stbl(stsdBox, stts, ctts, stsz, stsc, chunkOffsetBox, stss(track.writtenSamples)); break; case C.TRACK_TYPE_AUDIO: handlerType = "soun"; diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Track.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Track.java index 759f57f81b..71eda02011 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Track.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Track.java @@ -20,7 +20,6 @@ import android.media.MediaCodec.BufferInfo; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; import androidx.media3.muxer.Muxer.TrackToken; -import com.google.common.collect.ImmutableList; import java.nio.ByteBuffer; import java.util.ArrayDeque; import java.util.ArrayList; @@ -28,7 +27,7 @@ import java.util.Deque; import java.util.List; /** Represents a single track (audio, video, metadata etc.). */ -/* package */ final class Track implements TrackToken, Boxes.TrackMetadataProvider { +/* package */ final class Track implements TrackToken { public final Format format; public final int sortKey; public final List writtenSamples; @@ -99,30 +98,9 @@ import java.util.List; pendingSamplesByteBuffer.addLast(byteBufferToAdd); } - @Override public int videoUnitTimebase() { return MimeTypes.isAudio(format.sampleMimeType) ? 48_000 // TODO: b/270583563 - Update these with actual values from mediaFormat. : 90_000; } - - @Override - public ImmutableList writtenSamples() { - return ImmutableList.copyOf(writtenSamples); - } - - @Override - public ImmutableList writtenChunkOffsets() { - return ImmutableList.copyOf(writtenChunkOffsets); - } - - @Override - public ImmutableList writtenChunkSampleCounts() { - return ImmutableList.copyOf(writtenChunkSampleCounts); - } - - @Override - public Format format() { - return format; - } }