From 13537a170b92ece440b224764f02f24345a16a9f Mon Sep 17 00:00:00 2001 From: samrobinson Date: Wed, 11 Jan 2023 18:16:41 +0000 Subject: [PATCH] Allow Muxer.writeSampleData to take @C.BufferFlag int flags. PiperOrigin-RevId: 501314812 --- .../androidx/media3/transformer/DefaultMuxer.java | 4 ++-- .../media3/transformer/FrameworkMuxer.java | 4 +--- .../java/androidx/media3/transformer/Muxer.java | 15 ++++++++------- .../androidx/media3/transformer/MuxerWrapper.java | 3 ++- .../androidx/media3/transformer/TestMuxer.java | 12 +++++++++--- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java index 9d6edcb84c..e58cf0bf28 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java @@ -80,9 +80,9 @@ public final class DefaultMuxer implements Muxer { @Override public void writeSampleData( - int trackIndex, ByteBuffer data, boolean isKeyFrame, long presentationTimeUs) + int trackIndex, ByteBuffer data, long presentationTimeUs, @C.BufferFlags int flags) throws MuxerException { - muxer.writeSampleData(trackIndex, data, isKeyFrame, presentationTimeUs); + muxer.writeSampleData(trackIndex, data, presentationTimeUs, flags); } @Override diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java index f590129987..4c79d4c5db 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java @@ -142,10 +142,9 @@ import java.nio.ByteBuffer; return trackIndex; } - @SuppressLint("WrongConstant") // C.BUFFER_FLAG_KEY_FRAME equals MediaCodec.BUFFER_FLAG_KEY_FRAME. @Override public void writeSampleData( - int trackIndex, ByteBuffer data, boolean isKeyFrame, long presentationTimeUs) + int trackIndex, ByteBuffer data, long presentationTimeUs, @C.BufferFlags int flags) throws MuxerException { if (!isStarted) { isStarted = true; @@ -157,7 +156,6 @@ import java.nio.ByteBuffer; } int offset = data.position(); int size = data.limit() - offset; - int flags = isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0; bufferInfo.set(offset, size, presentationTimeUs, flags); long lastSamplePresentationTimeUs = trackIndexToLastPresentationTimeUs.get(trackIndex); try { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java index cebf94d7eb..e5ab9026e6 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java @@ -27,11 +27,10 @@ import java.nio.ByteBuffer; * Abstracts media muxing operations. * *

Query whether {@linkplain Factory#getSupportedSampleMimeTypes(int) sample MIME types} are - * supported and {@linkplain #addTrack(Format) add all tracks}, then {@linkplain - * #writeSampleData(int, ByteBuffer, boolean, long) write sample data} to mux samples. Once any - * sample data has been written, it is not possible to add tracks. After writing all sample data, - * {@linkplain #release(boolean) release} the instance to finish writing to the output and return - * any resources to the system. + * supported and {@linkplain #addTrack(Format) add all tracks}, then {@linkplain #writeSampleData + * write sample data} to mux samples. Once any sample data has been written, it is not possible to + * add tracks. After writing all sample data, {@linkplain #release(boolean) release} the instance to + * finish writing to the output and return any resources to the system. */ @UnstableApi public interface Muxer { @@ -93,11 +92,13 @@ public interface Muxer { * * @param trackIndex The index of the track, previously returned by {@link #addTrack(Format)}. * @param data A buffer containing the sample data to write to the container. - * @param isKeyFrame Whether the sample is a key frame. * @param presentationTimeUs The presentation time of the sample in microseconds. + * @param flags The {@link C.BufferFlags} associated with the data. Only {@link + * C#BUFFER_FLAG_KEY_FRAME} is supported. * @throws MuxerException If the muxer fails to write the sample. */ - void writeSampleData(int trackIndex, ByteBuffer data, boolean isKeyFrame, long presentationTimeUs) + void writeSampleData( + int trackIndex, ByteBuffer data, long presentationTimeUs, @C.BufferFlags int flags) throws MuxerException; /** diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java index fcb278846f..3b53b6fd0e 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java @@ -202,7 +202,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; checkNotNull(muxer); resetAbortTimer(); - muxer.writeSampleData(trackInfo.index, data, isKeyFrame, presentationTimeUs); + muxer.writeSampleData( + trackInfo.index, data, presentationTimeUs, isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0); previousTrackType = trackType; return true; } diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java b/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java index 547a619a95..f8d3562a03 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/TestMuxer.java @@ -15,6 +15,7 @@ */ package androidx.media3.transformer; +import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.test.utils.DumpableFormat; import androidx.media3.test.utils.Dumper; @@ -50,10 +51,15 @@ public final class TestMuxer implements Muxer, Dumper.Dumpable { @Override public void writeSampleData( - int trackIndex, ByteBuffer data, boolean isKeyFrame, long presentationTimeUs) + int trackIndex, ByteBuffer data, long presentationTimeUs, @C.BufferFlags int flags) throws MuxerException { - dumpables.add(new DumpableSample(trackIndex, data, isKeyFrame, presentationTimeUs)); - muxer.writeSampleData(trackIndex, data, isKeyFrame, presentationTimeUs); + dumpables.add( + new DumpableSample( + trackIndex, + data, + (flags & C.BUFFER_FLAG_KEY_FRAME) == C.BUFFER_FLAG_KEY_FRAME, + presentationTimeUs)); + muxer.writeSampleData(trackIndex, data, presentationTimeUs, flags); } @Override