mirror of
https://github.com/androidx/media.git
synced 2025-05-09 16:40:55 +08:00
Revert DefaultCodec to final
The class is made non-final for a test in 12584fbb20
.
PiperOrigin-RevId: 546718462
This commit is contained in:
parent
ca483a3c2c
commit
9c74e78f33
@ -21,18 +21,20 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FRAME_COUNT;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.MediaCodec;
|
||||
import android.media.MediaFormat;
|
||||
import android.util.Pair;
|
||||
import android.view.Surface;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.Format;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.Clock;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.decoder.DecoderInputBuffer;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import org.json.JSONException;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@ -119,13 +121,11 @@ public class ForceEndOfStreamTest {
|
||||
}
|
||||
|
||||
private static final class FrameDroppingDecoderFactory implements Codec.DecoderFactory {
|
||||
private final Context context;
|
||||
private final DefaultDecoderFactory defaultDecoderFactory;
|
||||
private final int sourceFrameCount;
|
||||
private final int framesToDrop;
|
||||
|
||||
private FrameDroppingDecoderFactory(Context context, int sourceFrameCount, int framesToDrop) {
|
||||
this.context = context;
|
||||
this.defaultDecoderFactory = new DefaultDecoderFactory(context);
|
||||
this.sourceFrameCount = sourceFrameCount;
|
||||
this.framesToDrop = framesToDrop;
|
||||
@ -140,52 +140,103 @@ public class ForceEndOfStreamTest {
|
||||
public Codec createForVideoDecoding(
|
||||
Format format, Surface outputSurface, boolean requestSdrToneMapping)
|
||||
throws ExportException {
|
||||
Pair<MediaFormat, String> videoDecoderMediaFormatAndName =
|
||||
defaultDecoderFactory.findVideoDecoder(format, requestSdrToneMapping);
|
||||
return new FrameDroppingDecoder(
|
||||
context,
|
||||
format,
|
||||
videoDecoderMediaFormatAndName.first,
|
||||
videoDecoderMediaFormatAndName.second,
|
||||
outputSurface,
|
||||
defaultDecoderFactory.createForVideoDecoding(
|
||||
format, outputSurface, requestSdrToneMapping),
|
||||
sourceFrameCount,
|
||||
framesToDrop);
|
||||
}
|
||||
|
||||
private static final class FrameDroppingDecoder extends DefaultCodec {
|
||||
public static final class FrameDroppingDecoder implements Codec {
|
||||
|
||||
private final DefaultCodec wrappedDecoder;
|
||||
private final int sourceFrameCount;
|
||||
private final int framesToDrop;
|
||||
|
||||
private int framesReceived;
|
||||
|
||||
public FrameDroppingDecoder(
|
||||
Context context,
|
||||
Format configurationFormat,
|
||||
MediaFormat configurationMediaFormat,
|
||||
String mediaCodecName,
|
||||
@Nullable Surface outputSurface,
|
||||
int sourceFrameCount,
|
||||
int framesToDrop)
|
||||
public FrameDroppingDecoder(DefaultCodec decoder, int sourceFrameCount, int framesToDrop)
|
||||
throws ExportException {
|
||||
super(
|
||||
context,
|
||||
configurationFormat,
|
||||
configurationMediaFormat,
|
||||
mediaCodecName,
|
||||
/* isDecoder= */ true,
|
||||
outputSurface);
|
||||
wrappedDecoder = decoder;
|
||||
this.sourceFrameCount = sourceFrameCount;
|
||||
this.framesToDrop = framesToDrop;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Format getConfigurationFormat() {
|
||||
return wrappedDecoder.getConfigurationFormat();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return wrappedDecoder.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Surface getInputSurface() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxPendingFrameCount() {
|
||||
return wrappedDecoder.getMaxPendingFrameCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean maybeDequeueInputBuffer(DecoderInputBuffer inputBuffer)
|
||||
throws ExportException {
|
||||
return wrappedDecoder.maybeDequeueInputBuffer(inputBuffer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void queueInputBuffer(DecoderInputBuffer inputBuffer) throws ExportException {
|
||||
wrappedDecoder.queueInputBuffer(inputBuffer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void signalEndOfInputStream() throws ExportException {
|
||||
wrappedDecoder.signalEndOfInputStream();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Format getOutputFormat() throws ExportException {
|
||||
return wrappedDecoder.getOutputFormat();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ByteBuffer getOutputBuffer() throws ExportException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public MediaCodec.BufferInfo getOutputBufferInfo() throws ExportException {
|
||||
return wrappedDecoder.getOutputBufferInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseOutputBuffer(boolean render) throws ExportException {
|
||||
wrappedDecoder.releaseOutputBuffer(render);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseOutputBuffer(long renderPresentationTimeUs) throws ExportException {
|
||||
framesReceived++;
|
||||
super.releaseOutputBuffer(
|
||||
wrappedDecoder.releaseOutputBuffer(
|
||||
/* render= */ sourceFrameCount - framesReceived >= framesToDrop,
|
||||
renderPresentationTimeUs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnded() {
|
||||
return wrappedDecoder.isEnded();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void release() {
|
||||
wrappedDecoder.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
|
||||
/** A default {@link Codec} implementation that uses {@link MediaCodec}. */
|
||||
@UnstableApi
|
||||
public class DefaultCodec implements Codec {
|
||||
public final class DefaultCodec implements Codec {
|
||||
// MediaCodec decoders output 16 bit PCM, unless configured to output PCM float.
|
||||
// https://developer.android.com/reference/android/media/MediaCodec#raw-audio-buffers.
|
||||
public static final int DEFAULT_PCM_ENCODING = C.ENCODING_PCM_16BIT;
|
||||
|
@ -65,7 +65,7 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Codec createForAudioDecoding(Format format) throws ExportException {
|
||||
public DefaultCodec createForAudioDecoding(Format format) throws ExportException {
|
||||
checkNotNull(format.sampleMimeType);
|
||||
MediaFormat mediaFormat = createMediaFormatFromFormat(format);
|
||||
|
||||
@ -96,26 +96,8 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory {
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
@Override
|
||||
public Codec createForVideoDecoding(
|
||||
public DefaultCodec createForVideoDecoding(
|
||||
Format format, Surface outputSurface, boolean requestSdrToneMapping) throws ExportException {
|
||||
Pair<MediaFormat, String> videoDecoderMediaFormatAndName =
|
||||
findVideoDecoder(format, requestSdrToneMapping);
|
||||
return new DefaultCodec(
|
||||
context,
|
||||
format,
|
||||
videoDecoderMediaFormatAndName.first,
|
||||
videoDecoderMediaFormatAndName.second,
|
||||
/* isDecoder= */ true,
|
||||
outputSurface);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link MediaFormat} to configure the {@linkplain Codec decoder}, and the name of
|
||||
* the {@link MediaCodec} decoder.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
/* package */ Pair<MediaFormat, String> findVideoDecoder(
|
||||
Format format, boolean requestSdrToneMapping) throws ExportException {
|
||||
checkNotNull(format.sampleMimeType);
|
||||
|
||||
if (ColorInfo.isTransferHdr(format.colorInfo)) {
|
||||
@ -173,8 +155,8 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory {
|
||||
MediaFormatUtil.maybeSetInteger(
|
||||
mediaFormat, MediaFormat.KEY_LEVEL, codecProfileAndLevel.second);
|
||||
}
|
||||
|
||||
return Pair.create(mediaFormat, mediaCodecName);
|
||||
return new DefaultCodec(
|
||||
context, format, mediaFormat, mediaCodecName, /* isDecoder= */ true, outputSurface);
|
||||
}
|
||||
|
||||
private static boolean deviceNeedsDisable8kWorkaround(Format format) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user