mirror of
https://github.com/androidx/media.git
synced 2025-05-17 20:49:53 +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;
|
package androidx.media3.muxer;
|
||||||
|
|
||||||
import android.media.MediaCodec.BufferInfo;
|
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.Metadata;
|
import androidx.media3.common.Metadata;
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
package androidx.media3.test.utils;
|
package androidx.media3.test.utils;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.MediaCodec;
|
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
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.Clock;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import androidx.media3.transformer.AssetLoader;
|
import androidx.media3.transformer.AssetLoader;
|
||||||
@ -267,8 +267,7 @@ public final class TestTransformerBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(
|
public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo)
|
||||||
int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo)
|
|
||||||
throws MuxerException {
|
throws MuxerException {
|
||||||
throw new MuxerException("Failed to write sample data", new RuntimeException());
|
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;
|
||||||
import android.graphics.Bitmap.Config;
|
import android.graphics.Bitmap.Config;
|
||||||
import android.media.Image;
|
import android.media.Image;
|
||||||
import android.media.MediaCodec;
|
|
||||||
import android.media.MediaCodecInfo;
|
import android.media.MediaCodecInfo;
|
||||||
import android.media.metrics.LogSessionId;
|
import android.media.metrics.LogSessionId;
|
||||||
import android.opengl.EGLContext;
|
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.PlaybackVideoGraphWrapper;
|
||||||
import androidx.media3.exoplayer.video.VideoFrameReleaseControl;
|
import androidx.media3.exoplayer.video.VideoFrameReleaseControl;
|
||||||
import androidx.media3.extractor.ExtractorOutput;
|
import androidx.media3.extractor.ExtractorOutput;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import androidx.media3.test.utils.BitmapPixelTestUtil;
|
import androidx.media3.test.utils.BitmapPixelTestUtil;
|
||||||
@ -1431,7 +1431,7 @@ public final class AndroidTestUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(int trackId, ByteBuffer data, MediaCodec.BufferInfo bufferInfo)
|
public void writeSampleData(int trackId, ByteBuffer data, BufferInfo bufferInfo)
|
||||||
throws MuxerException {
|
throws MuxerException {
|
||||||
if (trackId == videoTrackId
|
if (trackId == videoTrackId
|
||||||
&& bufferInfo.presentationTimeUs >= presentationTimeUsToBlockFrame) {
|
&& bufferInfo.presentationTimeUs >= presentationTimeUsToBlockFrame) {
|
||||||
|
@ -27,7 +27,6 @@ import static org.junit.Assert.assertThrows;
|
|||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.MediaCodec;
|
|
||||||
import android.media.metrics.EditingEndedEvent;
|
import android.media.metrics.EditingEndedEvent;
|
||||||
import android.media.metrics.LogSessionId;
|
import android.media.metrics.LogSessionId;
|
||||||
import android.media.metrics.MediaItemInfo;
|
import android.media.metrics.MediaItemInfo;
|
||||||
@ -38,6 +37,7 @@ import androidx.media3.common.Format;
|
|||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.MediaLibraryInfo;
|
import androidx.media3.common.MediaLibraryInfo;
|
||||||
import androidx.media3.common.Metadata;
|
import androidx.media3.common.Metadata;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
@ -455,8 +455,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(
|
public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo)
|
||||||
int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo)
|
|
||||||
throws MuxerException {
|
throws MuxerException {
|
||||||
if (firstSampleWritten) {
|
if (firstSampleWritten) {
|
||||||
throw new MuxerException("Failed to write sample data", new RuntimeException());
|
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.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.media.MediaCodec;
|
|
||||||
import android.media.projection.MediaProjection;
|
import android.media.projection.MediaProjection;
|
||||||
import android.media.projection.MediaProjectionManager;
|
import android.media.projection.MediaProjectionManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@ -42,6 +41,7 @@ import androidx.media3.common.MimeTypes;
|
|||||||
import androidx.media3.common.util.ConditionVariable;
|
import androidx.media3.common.util.ConditionVariable;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.effect.Presentation;
|
import androidx.media3.effect.Presentation;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import androidx.test.core.app.ActivityScenario;
|
import androidx.test.core.app.ActivityScenario;
|
||||||
@ -193,8 +193,7 @@ public final class MediaProjectionAssetLoaderTest {
|
|||||||
private static final class InterceptingMuxerFactory implements Muxer.Factory {
|
private static final class InterceptingMuxerFactory implements Muxer.Factory {
|
||||||
|
|
||||||
public interface WriteSampleDataCallback {
|
public interface WriteSampleDataCallback {
|
||||||
void onWriteSampleData(
|
void onWriteSampleData(Format format, ByteBuffer byteBuffer, BufferInfo bufferInfo);
|
||||||
Format format, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final WriteSampleDataCallback writeSampleDataCallback;
|
private final WriteSampleDataCallback writeSampleDataCallback;
|
||||||
@ -218,8 +217,7 @@ public final class MediaProjectionAssetLoaderTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(
|
public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo)
|
||||||
int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo)
|
|
||||||
throws MuxerException {
|
throws MuxerException {
|
||||||
writeSampleDataCallback.onWriteSampleData(
|
writeSampleDataCallback.onWriteSampleData(
|
||||||
formatByTrackId.get(trackId), byteBuffer, bufferInfo);
|
formatByTrackId.get(trackId), byteBuffer, bufferInfo);
|
||||||
|
@ -15,12 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import android.media.MediaCodec.BufferInfo;
|
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.Metadata;
|
import androidx.media3.common.Metadata;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import com.google.common.collect.ImmutableList;
|
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.Assertions.checkState;
|
||||||
import static androidx.media3.common.util.CodecSpecificDataUtil.getCodecProfileAndLevel;
|
import static androidx.media3.common.util.CodecSpecificDataUtil.getCodecProfileAndLevel;
|
||||||
import static androidx.media3.common.util.Util.castNonNull;
|
import static androidx.media3.common.util.Util.castNonNull;
|
||||||
|
import static androidx.media3.transformer.TransformerUtil.getMediaCodecFlags;
|
||||||
import static java.lang.Integer.max;
|
import static java.lang.Integer.max;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.media.MediaCodec.BufferInfo;
|
import android.media.MediaCodec;
|
||||||
import android.media.MediaCodecInfo;
|
import android.media.MediaCodecInfo;
|
||||||
import android.media.MediaFormat;
|
import android.media.MediaFormat;
|
||||||
import android.media.MediaMuxer;
|
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.MediaFormatUtil;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.container.Mp4LocationData;
|
import androidx.media3.container.Mp4LocationData;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import com.google.common.collect.ImmutableList;
|
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.",
|
+ " sample has the smallest timestamp when using the negative PTS workaround.",
|
||||||
presentationTimeUs - presentationTimeOffsetUs,
|
presentationTimeUs - presentationTimeOffsetUs,
|
||||||
-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 {
|
try {
|
||||||
|
|
||||||
mediaMuxer.writeSampleData(trackId, data, bufferInfo);
|
mediaMuxer.writeSampleData(trackId, data, mediaCodecBufferinfo);
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
throw new MuxerException(
|
throw new MuxerException(
|
||||||
"Failed to write sample for presentationTimeUs="
|
"Failed to write sample for presentationTimeUs="
|
||||||
@ -252,12 +256,11 @@ import java.util.Locale;
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) {
|
if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) {
|
||||||
BufferInfo bufferInfo = new BufferInfo();
|
BufferInfo bufferInfo =
|
||||||
bufferInfo.set(
|
new BufferInfo(
|
||||||
/* newOffset= */ 0,
|
/* presentationTimeUs= */ videoDurationUs,
|
||||||
/* newSize= */ 0,
|
/* size= */ 0,
|
||||||
videoDurationUs,
|
C.BUFFER_FLAG_END_OF_STREAM);
|
||||||
TransformerUtil.getMediaCodecFlags(C.BUFFER_FLAG_END_OF_STREAM));
|
|
||||||
writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo);
|
writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,9 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.muxer.MuxerUtil.getMuxerBufferInfoFromMediaCodecBufferInfo;
|
|
||||||
|
|
||||||
import android.media.MediaCodec;
|
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.MediaLibraryInfo;
|
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.Log;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.container.Mp4OrientationData;
|
import androidx.media3.container.Mp4OrientationData;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.FragmentedMp4Muxer;
|
import androidx.media3.muxer.FragmentedMp4Muxer;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
@ -140,7 +138,7 @@ public final class InAppFragmentedMp4Muxer implements Muxer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo)
|
public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo)
|
||||||
throws MuxerException {
|
throws MuxerException {
|
||||||
if (videoDurationUs != C.TIME_UNSET
|
if (videoDurationUs != C.TIME_UNSET
|
||||||
&& trackId == videoTrackId
|
&& trackId == videoTrackId
|
||||||
@ -154,8 +152,7 @@ public final class InAppFragmentedMp4Muxer implements Muxer {
|
|||||||
videoDurationUs));
|
videoDurationUs));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
muxer.writeSampleData(
|
muxer.writeSampleData(trackId, byteBuffer, bufferInfo);
|
||||||
trackId, byteBuffer, getMuxerBufferInfoFromMediaCodecBufferInfo(bufferInfo));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -168,12 +165,11 @@ public final class InAppFragmentedMp4Muxer implements Muxer {
|
|||||||
@Override
|
@Override
|
||||||
public void close() throws MuxerException {
|
public void close() throws MuxerException {
|
||||||
if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) {
|
if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) {
|
||||||
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
|
BufferInfo bufferInfo =
|
||||||
bufferInfo.set(
|
new BufferInfo(
|
||||||
/* newOffset= */ 0,
|
/* presentationTimeUs= */ videoDurationUs,
|
||||||
/* newSize= */ 0,
|
/* size= */ 0,
|
||||||
videoDurationUs,
|
C.BUFFER_FLAG_END_OF_STREAM);
|
||||||
MediaCodec.BUFFER_FLAG_END_OF_STREAM);
|
|
||||||
writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo);
|
writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo);
|
||||||
}
|
}
|
||||||
muxer.close();
|
muxer.close();
|
||||||
|
@ -15,9 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.muxer.MuxerUtil.getMuxerBufferInfoFromMediaCodecBufferInfo;
|
|
||||||
|
|
||||||
import android.media.MediaCodec;
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
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.Log;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.container.Mp4OrientationData;
|
import androidx.media3.container.Mp4OrientationData;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Mp4Muxer;
|
import androidx.media3.muxer.Mp4Muxer;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
@ -159,7 +157,7 @@ public final class InAppMp4Muxer implements Muxer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(int trackId, ByteBuffer byteBuffer, MediaCodec.BufferInfo bufferInfo)
|
public void writeSampleData(int trackId, ByteBuffer byteBuffer, BufferInfo bufferInfo)
|
||||||
throws MuxerException {
|
throws MuxerException {
|
||||||
if (videoDurationUs != C.TIME_UNSET
|
if (videoDurationUs != C.TIME_UNSET
|
||||||
&& trackId == videoTrackId
|
&& trackId == videoTrackId
|
||||||
@ -173,8 +171,7 @@ public final class InAppMp4Muxer implements Muxer {
|
|||||||
videoDurationUs));
|
videoDurationUs));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
muxer.writeSampleData(
|
muxer.writeSampleData(trackId, byteBuffer, bufferInfo);
|
||||||
trackId, byteBuffer, getMuxerBufferInfoFromMediaCodecBufferInfo(bufferInfo));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -187,12 +184,11 @@ public final class InAppMp4Muxer implements Muxer {
|
|||||||
@Override
|
@Override
|
||||||
public void close() throws MuxerException {
|
public void close() throws MuxerException {
|
||||||
if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) {
|
if (videoDurationUs != C.TIME_UNSET && videoTrackId != TRACK_ID_UNSET) {
|
||||||
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
|
BufferInfo bufferInfo =
|
||||||
bufferInfo.set(
|
new BufferInfo(
|
||||||
/* newOffset= */ 0,
|
/* presentationTimeUs= */ videoDurationUs,
|
||||||
/* newSize= */ 0,
|
/* size= */ 0,
|
||||||
videoDurationUs,
|
C.BUFFER_FLAG_END_OF_STREAM);
|
||||||
MediaCodec.BUFFER_FLAG_END_OF_STREAM);
|
|
||||||
writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo);
|
writeSampleData(videoTrackId, ByteBuffer.allocateDirect(0), bufferInfo);
|
||||||
}
|
}
|
||||||
writeMetadata();
|
writeMetadata();
|
||||||
|
@ -32,7 +32,6 @@ import static java.lang.Math.max;
|
|||||||
import static java.lang.Math.min;
|
import static java.lang.Math.min;
|
||||||
import static java.lang.annotation.ElementType.TYPE_USE;
|
import static java.lang.annotation.ElementType.TYPE_USE;
|
||||||
|
|
||||||
import android.media.MediaCodec.BufferInfo;
|
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.IntRange;
|
import androidx.annotation.IntRange;
|
||||||
@ -46,6 +45,7 @@ import androidx.media3.common.util.Log;
|
|||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.container.NalUnitUtil;
|
import androidx.media3.container.NalUnitUtil;
|
||||||
import androidx.media3.effect.DebugTraceUtil;
|
import androidx.media3.effect.DebugTraceUtil;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -150,7 +150,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
private final boolean dropSamplesBeforeFirstVideoSample;
|
private final boolean dropSamplesBeforeFirstVideoSample;
|
||||||
private final SparseArray<TrackInfo> trackTypeToInfo;
|
private final SparseArray<TrackInfo> trackTypeToInfo;
|
||||||
@Nullable private final Format appendVideoFormat;
|
@Nullable private final Format appendVideoFormat;
|
||||||
private final BufferInfo bufferInfo;
|
|
||||||
|
|
||||||
private boolean isReady;
|
private boolean isReady;
|
||||||
private boolean isEnded;
|
private boolean isEnded;
|
||||||
@ -205,7 +204,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
previousTrackType = C.TRACK_TYPE_NONE;
|
previousTrackType = C.TRACK_TYPE_NONE;
|
||||||
firstVideoPresentationTimeUs = C.TIME_UNSET;
|
firstVideoPresentationTimeUs = C.TIME_UNSET;
|
||||||
minEndedTrackTimeUs = Long.MAX_VALUE;
|
minEndedTrackTimeUs = Long.MAX_VALUE;
|
||||||
bufferInfo = new BufferInfo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -573,11 +571,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
trackInfo.timeUs = max(trackInfo.timeUs, presentationTimeUs);
|
trackInfo.timeUs = max(trackInfo.timeUs, presentationTimeUs);
|
||||||
listener.onSampleWrittenOrDropped();
|
listener.onSampleWrittenOrDropped();
|
||||||
checkStateNotNull(muxer);
|
checkStateNotNull(muxer);
|
||||||
bufferInfo.set(
|
BufferInfo bufferInfo =
|
||||||
data.position(),
|
new BufferInfo(
|
||||||
data.remaining(),
|
presentationTimeUs,
|
||||||
presentationTimeUs,
|
/* size= */ data.remaining(),
|
||||||
TransformerUtil.getMediaCodecFlags(isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0));
|
/* flags= */ isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0);
|
||||||
muxer.writeSampleData(trackInfo.trackId, data, bufferInfo);
|
muxer.writeSampleData(trackInfo.trackId, data, bufferInfo);
|
||||||
|
|
||||||
DebugTraceUtil.logEvent(
|
DebugTraceUtil.logEvent(
|
||||||
|
@ -16,11 +16,11 @@
|
|||||||
|
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import android.media.MediaCodec;
|
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.Metadata;
|
import androidx.media3.common.Metadata;
|
||||||
import androidx.media3.common.MimeTypes;
|
import androidx.media3.common.MimeTypes;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@ -68,7 +68,7 @@ import java.nio.ByteBuffer;
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSampleData(int trackId, ByteBuffer data, MediaCodec.BufferInfo bufferInfo) {}
|
public void writeSampleData(int trackId, ByteBuffer data, BufferInfo bufferInfo) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addMetadataEntry(Metadata.Entry metadataEntry) {}
|
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.common.util.Assertions.checkState;
|
||||||
import static androidx.media3.transformer.TransformerUtil.getProcessedTrackType;
|
import static androidx.media3.transformer.TransformerUtil.getProcessedTrackType;
|
||||||
|
|
||||||
import android.media.MediaCodec.BufferInfo;
|
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.Metadata;
|
import androidx.media3.common.Metadata;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
|
import androidx.media3.muxer.BufferInfo;
|
||||||
import androidx.media3.muxer.Muxer;
|
import androidx.media3.muxer.Muxer;
|
||||||
import androidx.media3.muxer.MuxerException;
|
import androidx.media3.muxer.MuxerException;
|
||||||
import androidx.media3.test.utils.DumpableFormat;
|
import androidx.media3.test.utils.DumpableFormat;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user