mirror of
https://github.com/androidx/media.git
synced 2025-05-17 12:39:52 +08:00
Use muxer.BufferInfo
class in Muxer.java
This is to remove dependency on `MediaCodec` from `muxer module`. PiperOrigin-RevId: 755885374
This commit is contained in:
parent
b03b22575f
commit
04b999914a
@ -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;
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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<TrackInfo> 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(
|
||||
|
@ -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) {}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user