From 8fe90562a65df015275be0d9dee314f1f706da9f 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 --- .../exoplayer2/transformer/DefaultMuxer.java | 4 ++-- .../exoplayer2/transformer/FrameworkMuxer.java | 4 +--- .../android/exoplayer2/transformer/Muxer.java | 15 ++++++++------- .../exoplayer2/transformer/MuxerWrapper.java | 3 ++- .../android/exoplayer2/transformer/TestMuxer.java | 12 +++++++++--- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultMuxer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultMuxer.java index 8e796d6ab9..3d3f9c455a 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultMuxer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultMuxer.java @@ -78,9 +78,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/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameworkMuxer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameworkMuxer.java index ccc94543e9..b8de26dc4b 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameworkMuxer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/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/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Muxer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Muxer.java index 37f10ee5d8..98e16d04ef 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Muxer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Muxer.java @@ -26,11 +26,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. */ public interface Muxer { @@ -91,11 +90,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/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java index 21d8ddd1d8..be8097def1 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/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/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TestMuxer.java b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TestMuxer.java index b642638e2f..dffab0fd21 100644 --- a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TestMuxer.java +++ b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TestMuxer.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.transformer; +import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.testutil.DumpableFormat; import com.google.android.exoplayer2.testutil.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