From 791483f2d3f067e881583d2f4ac4c35925e69d8c Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Fri, 30 Aug 2024 05:44:07 -0700 Subject: [PATCH] Remove TrackMetadataProvider interface This interface was used by Boxes.moov. This CL removes the interface and just uses the Track object directly. Since Track is package-private it seems fine to use it directly. The drawback with interface is that, with every new field addition in the Track class, we need to update the interface as well (if we need to access that field for moov box). PiperOrigin-RevId: 669295399 --- .../java/androidx/media3/muxer/Boxes.java | 33 ++++++------------- .../java/androidx/media3/muxer/Track.java | 24 +------------- 2 files changed, 11 insertions(+), 46 deletions(-) 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; - } }