diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Muxer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Muxer.java index a317290955..502528c7d1 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Muxer.java @@ -15,7 +15,6 @@ */ package androidx.media3.muxer; -import android.media.MediaCodec.BufferInfo; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestTransformerBuilder.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestTransformerBuilder.java index 67b24d8cc1..e6ef42f8b6 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestTransformerBuilder.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/TestTransformerBuilder.java @@ -16,7 +16,6 @@ package androidx.media3.test.utils; import android.content.Context; -import android.media.MediaCodec; import android.os.Looper; import androidx.media3.common.C; import androidx.media3.common.Format; @@ -25,6 +24,7 @@ import androidx.media3.common.MimeTypes; import androidx.media3.common.util.Clock; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import androidx.media3.transformer.AssetLoader; @@ -267,8 +267,7 @@ public final class TestTransformerBuilder { } @Override - public void writeSampleData( - int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo) + public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo) throws MuxerException { throw new MuxerException("Failed to write sample data", new RuntimeException()); } diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java index 3ff7e60d74..50f51bc0ad 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -35,7 +35,6 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.media.Image; -import android.media.MediaCodec; import android.media.MediaCodecInfo; import android.media.metrics.LogSessionId; import android.opengl.EGLContext; @@ -73,6 +72,7 @@ import androidx.media3.exoplayer.video.MediaCodecVideoRenderer; import androidx.media3.exoplayer.video.PlaybackVideoGraphWrapper; import androidx.media3.exoplayer.video.VideoFrameReleaseControl; import androidx.media3.extractor.ExtractorOutput; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import androidx.media3.test.utils.BitmapPixelTestUtil; @@ -1431,7 +1431,7 @@ public final class AndroidTestUtil { } @Override - public void writeSampleData(int trackId, ByteBuffer data, MediaCodec.BufferInfo bufferInfo) + public void writeSampleData(int trackId, ByteBuffer data, BufferInfo bufferInfo) throws MuxerException { if (trackId == videoTrackId && bufferInfo.presentationTimeUs >= presentationTimeUsToBlockFrame) { diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/EditingMetricsCollectorTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/EditingMetricsCollectorTest.java index e1a679a489..a70f1f7779 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/EditingMetricsCollectorTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/EditingMetricsCollectorTest.java @@ -27,7 +27,6 @@ import static org.junit.Assert.assertThrows; import static org.junit.Assume.assumeTrue; import android.content.Context; -import android.media.MediaCodec; import android.media.metrics.EditingEndedEvent; import android.media.metrics.LogSessionId; import android.media.metrics.MediaItemInfo; @@ -38,6 +37,7 @@ import androidx.media3.common.Format; import androidx.media3.common.MediaItem; import androidx.media3.common.MediaLibraryInfo; import androidx.media3.common.Metadata; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -455,8 +455,7 @@ public class EditingMetricsCollectorTest { } @Override - public void writeSampleData( - int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo) + public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo) throws MuxerException { if (firstSampleWritten) { throw new MuxerException("Failed to write sample data", new RuntimeException()); diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/MediaProjectionAssetLoaderTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/MediaProjectionAssetLoaderTest.java index 3a187e54e2..626294200c 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/MediaProjectionAssetLoaderTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/MediaProjectionAssetLoaderTest.java @@ -29,7 +29,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Rect; -import android.media.MediaCodec; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionManager; import android.os.Build; @@ -42,6 +41,7 @@ import androidx.media3.common.MimeTypes; import androidx.media3.common.util.ConditionVariable; import androidx.media3.common.util.Util; import androidx.media3.effect.Presentation; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import androidx.test.core.app.ActivityScenario; @@ -193,8 +193,7 @@ public final class MediaProjectionAssetLoaderTest { private static final class InterceptingMuxerFactory implements Muxer.Factory { public interface WriteSampleDataCallback { - void onWriteSampleData( - Format format, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo); + void onWriteSampleData(Format format, ByteBuffer byteBuffer, BufferInfo bufferInfo); } private final WriteSampleDataCallback writeSampleDataCallback; @@ -218,8 +217,7 @@ public final class MediaProjectionAssetLoaderTest { } @Override - public void writeSampleData( - int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo) + public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo) throws MuxerException { writeSampleDataCallback.onWriteSampleData( formatByTrackId.get(trackId), byteBuffer, bufferInfo); 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 7c4835c38d..28041b33c0 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java @@ -15,12 +15,12 @@ */ package androidx.media3.transformer; -import android.media.MediaCodec.BufferInfo; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import com.google.common.collect.ImmutableList; 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 b574d73281..c07995e455 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java @@ -20,10 +20,11 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.CodecSpecificDataUtil.getCodecProfileAndLevel; import static androidx.media3.common.util.Util.castNonNull; +import static androidx.media3.transformer.TransformerUtil.getMediaCodecFlags; import static java.lang.Integer.max; import android.annotation.SuppressLint; -import android.media.MediaCodec.BufferInfo; +import android.media.MediaCodec; import android.media.MediaCodecInfo; import android.media.MediaFormat; import android.media.MediaMuxer; @@ -38,6 +39,7 @@ import androidx.media3.common.util.Log; import androidx.media3.common.util.MediaFormatUtil; import androidx.media3.common.util.Util; import androidx.media3.container.Mp4LocationData; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import com.google.common.collect.ImmutableList; @@ -216,11 +218,13 @@ import java.util.Locale; + " sample has the smallest timestamp when using the negative PTS workaround.", presentationTimeUs - presentationTimeOffsetUs, -presentationTimeOffsetUs)); - bufferInfo.set(bufferInfo.offset, bufferInfo.size, presentationTimeUs, bufferInfo.flags); + MediaCodec.BufferInfo mediaCodecBufferinfo = new MediaCodec.BufferInfo(); + mediaCodecBufferinfo.set( + data.position(), bufferInfo.size, presentationTimeUs, getMediaCodecFlags(bufferInfo.flags)); try { - mediaMuxer.writeSampleData(trackId, data, bufferInfo); + mediaMuxer.writeSampleData(trackId, data, mediaCodecBufferinfo); } catch (RuntimeException e) { throw new MuxerException( "Failed to write sample for presentationTimeUs=" @@ -252,12 +256,11 @@ import java.util.Locale; } if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) { - BufferInfo bufferInfo = new BufferInfo(); - bufferInfo.set( - /* newOffset= */ 0, - /* newSize= */ 0, - videoDurationUs, - TransformerUtil.getMediaCodecFlags(C.BUFFER_FLAG_END_OF_STREAM)); + BufferInfo bufferInfo = + new BufferInfo( + /* presentationTimeUs= */ videoDurationUs, + /* size= */ 0, + C.BUFFER_FLAG_END_OF_STREAM); writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppFragmentedMp4Muxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppFragmentedMp4Muxer.java index d11cc3e623..e53fbe4bcc 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppFragmentedMp4Muxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppFragmentedMp4Muxer.java @@ -15,9 +15,6 @@ */ package androidx.media3.transformer; -import static androidx.media3.muxer.MuxerUtil.getMuxerBufferInfoFromMediaCodecBufferInfo; - -import android.media.MediaCodec; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MediaLibraryInfo; @@ -26,6 +23,7 @@ import androidx.media3.common.MimeTypes; import androidx.media3.common.util.Log; import androidx.media3.common.util.UnstableApi; import androidx.media3.container.Mp4OrientationData; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.FragmentedMp4Muxer; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; @@ -140,7 +138,7 @@ public final class InAppFragmentedMp4Muxer implements Muxer { } @Override - public void writeSampleData(int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo) + public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo) throws MuxerException { if (videoDurationUs != C.TIME_UNSET && trackId == videoTrackId @@ -154,8 +152,7 @@ public final class InAppFragmentedMp4Muxer implements Muxer { videoDurationUs)); return; } - muxer.writeSampleData( - trackId, byteBuffer, getMuxerBufferInfoFromMediaCodecBufferInfo(bufferInfo)); + muxer.writeSampleData(trackId, byteBuffer, bufferInfo); } @Override @@ -168,12 +165,11 @@ public final class InAppFragmentedMp4Muxer implements Muxer { @Override public void close() throws MuxerException { if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) { - MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); - bufferInfo.set( - /* newOffset= */ 0, - /* newSize= */ 0, - videoDurationUs, - MediaCodec.BUFFER_FLAG_END_OF_STREAM); + BufferInfo bufferInfo = + new BufferInfo( + /* presentationTimeUs= */ videoDurationUs, + /* size= */ 0, + C.BUFFER_FLAG_END_OF_STREAM); writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo); } muxer.close(); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMp4Muxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMp4Muxer.java index a221484007..47fc281c58 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMp4Muxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMp4Muxer.java @@ -15,9 +15,6 @@ */ package androidx.media3.transformer; -import static androidx.media3.muxer.MuxerUtil.getMuxerBufferInfoFromMediaCodecBufferInfo; - -import android.media.MediaCodec; import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.Format; @@ -27,6 +24,7 @@ import androidx.media3.common.MimeTypes; import androidx.media3.common.util.Log; import androidx.media3.common.util.UnstableApi; import androidx.media3.container.Mp4OrientationData; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Mp4Muxer; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; @@ -159,7 +157,7 @@ public final class InAppMp4Muxer implements Muxer { } @Override - public void writeSampleData(int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo) + public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo) throws MuxerException { if (videoDurationUs != C.TIME_UNSET && trackId == videoTrackId @@ -173,8 +171,7 @@ public final class InAppMp4Muxer implements Muxer { videoDurationUs)); return; } - muxer.writeSampleData( - trackId, byteBuffer, getMuxerBufferInfoFromMediaCodecBufferInfo(bufferInfo)); + muxer.writeSampleData(trackId, byteBuffer, bufferInfo); } @Override @@ -187,12 +184,11 @@ public final class InAppMp4Muxer implements Muxer { @Override public void close() throws MuxerException { if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) { - MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); - bufferInfo.set( - /* newOffset= */ 0, - /* newSize= */ 0, - videoDurationUs, - MediaCodec.BUFFER_FLAG_END_OF_STREAM); + BufferInfo bufferInfo = + new BufferInfo( + /* presentationTimeUs= */ videoDurationUs, + /* size= */ 0, + C.BUFFER_FLAG_END_OF_STREAM); writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo); } writeMetadata(); 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 83af1f4e2a..2e248e381f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java @@ -32,7 +32,6 @@ import static java.lang.Math.max; import static java.lang.Math.min; import static java.lang.annotation.ElementType.TYPE_USE; -import android.media.MediaCodec.BufferInfo; import android.util.SparseArray; import androidx.annotation.IntDef; import androidx.annotation.IntRange; @@ -46,6 +45,7 @@ import androidx.media3.common.util.Log; import androidx.media3.common.util.Util; import androidx.media3.container.NalUnitUtil; import androidx.media3.effect.DebugTraceUtil; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import com.google.common.collect.ImmutableList; @@ -150,7 +150,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private final boolean dropSamplesBeforeFirstVideoSample; private final SparseArray trackTypeToInfo; @Nullable private final Format appendVideoFormat; - private final BufferInfo bufferInfo; private boolean isReady; private boolean isEnded; @@ -205,7 +204,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; previousTrackType = C.TRACK_TYPE_NONE; firstVideoPresentationTimeUs = C.TIME_UNSET; minEndedTrackTimeUs = Long.MAX_VALUE; - bufferInfo = new BufferInfo(); } /** @@ -573,11 +571,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; trackInfo.timeUs = max(trackInfo.timeUs, presentationTimeUs); listener.onSampleWrittenOrDropped(); checkStateNotNull(muxer); - bufferInfo.set( - data.position(), - data.remaining(), - presentationTimeUs, - TransformerUtil.getMediaCodecFlags(isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0)); + BufferInfo bufferInfo = + new BufferInfo( + presentationTimeUs, + /* size= */ data.remaining(), + /* flags= */ isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0); muxer.writeSampleData(trackInfo.trackId, data, bufferInfo); DebugTraceUtil.logEvent( diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/NoWriteMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/NoWriteMuxer.java index b02d948f19..ddcb0df52c 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/NoWriteMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/NoWriteMuxer.java @@ -16,11 +16,11 @@ package androidx.media3.transformer; -import android.media.MediaCodec; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; import androidx.media3.common.MimeTypes; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import com.google.common.collect.ImmutableList; import java.nio.ByteBuffer; @@ -68,7 +68,7 @@ import java.nio.ByteBuffer; } @Override - public void writeSampleData(int trackId, ByteBuffer data, MediaCodec.BufferInfo bufferInfo) {} + public void writeSampleData(int trackId, ByteBuffer data, BufferInfo bufferInfo) {} @Override public void addMetadataEntry(Metadata.Entry metadataEntry) {} diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java b/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java index c969591651..9b539f119a 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java @@ -19,13 +19,13 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.transformer.TransformerUtil.getProcessedTrackType; -import android.media.MediaCodec.BufferInfo; import android.util.SparseArray; import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; import androidx.media3.common.util.Util; +import androidx.media3.muxer.BufferInfo; import androidx.media3.muxer.Muxer; import androidx.media3.muxer.MuxerException; import androidx.media3.test.utils.DumpableFormat;