From f40f290a30aaa968acfb7985ae7ec9fb6708a863 Mon Sep 17 00:00:00 2001 From: hschlueter Date: Thu, 13 Jan 2022 10:43:52 +0000 Subject: [PATCH] Remove Transformer-specific things from MediaCodecAdapter. PiperOrigin-RevId: 421514944 --- .../AsynchronousMediaCodecAdapter.java | 25 +----- .../mediacodec/MediaCodecAdapter.java | 90 +------------------ .../SynchronousMediaCodecAdapter.java | 51 +---------- .../test/utils/CapturingRenderersFactory.java | 12 --- 4 files changed, 8 insertions(+), 170 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java index 715f1b183a..dd9b97d8dd 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/AsynchronousMediaCodecAdapter.java @@ -109,8 +109,7 @@ import java.nio.ByteBuffer; configuration.mediaFormat, configuration.surface, configuration.crypto, - configuration.flags, - configuration.createInputSurface); + configuration.flags); return codecAdapter; } catch (Exception e) { if (codecAdapter != null) { @@ -139,7 +138,6 @@ import java.nio.ByteBuffer; private final boolean enableImmediateCodecStartAfterFlush; private boolean codecReleased; @State private int state; - @Nullable private Surface inputSurface; private AsynchronousMediaCodecAdapter( MediaCodec codec, @@ -159,15 +157,11 @@ import java.nio.ByteBuffer; @Nullable MediaFormat mediaFormat, @Nullable Surface surface, @Nullable MediaCrypto crypto, - int flags, - boolean createInputSurface) { + int flags) { asynchronousMediaCodecCallback.initialize(codec); TraceUtil.beginSection("configureCodec"); codec.configure(mediaFormat, surface, crypto, flags); TraceUtil.endSection(); - if (createInputSurface) { - inputSurface = codec.createInputSurface(); - } bufferEnqueuer.start(); TraceUtil.beginSection("startCodec"); codec.start(); @@ -223,12 +217,6 @@ import java.nio.ByteBuffer; return codec.getInputBuffer(index); } - @Override - @Nullable - public Surface getInputSurface() { - return inputSurface; - } - @Override @Nullable public ByteBuffer getOutputBuffer(int index) { @@ -263,9 +251,6 @@ import java.nio.ByteBuffer; } state = STATE_SHUT_DOWN; } finally { - if (inputSurface != null) { - inputSurface.release(); - } if (!codecReleased) { codec.release(); codecReleased = true; @@ -301,12 +286,6 @@ import java.nio.ByteBuffer; codec.setVideoScalingMode(scalingMode); } - @Override - public void signalEndOfInputStream() { - maybeBlockOnQueueing(); - codec.signalEndOfInputStream(); - } - @Override @RequiresApi(26) public PersistableBundle getMetrics() { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java index c188c831f0..6fa902bd7a 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecAdapter.java @@ -57,13 +57,7 @@ public interface MediaCodecAdapter { Format format, @Nullable MediaCrypto crypto) { return new Configuration( - codecInfo, - mediaFormat, - format, - /* surface= */ null, - crypto, - /* flags= */ 0, - /* createInputSurface= */ false); + codecInfo, mediaFormat, format, /* surface= */ null, crypto, /* flags= */ 0); } /** @@ -82,55 +76,7 @@ public interface MediaCodecAdapter { Format format, @Nullable Surface surface, @Nullable MediaCrypto crypto) { - return new Configuration( - codecInfo, - mediaFormat, - format, - surface, - crypto, - /* flags= */ 0, - /* createInputSurface= */ false); - } - - /** - * Creates a configuration for audio encoding. - * - * @param codecInfo See {@link #codecInfo}. - * @param mediaFormat See {@link #mediaFormat}. - * @param format See {@link #format}. - * @return The created instance. - */ - public static Configuration createForAudioEncoding( - MediaCodecInfo codecInfo, MediaFormat mediaFormat, Format format) { - return new Configuration( - codecInfo, - mediaFormat, - format, - /* surface= */ null, - /* crypto= */ null, - MediaCodec.CONFIGURE_FLAG_ENCODE, - /* createInputSurface= */ false); - } - - /** - * Creates a configuration for video encoding. - * - * @param codecInfo See {@link #codecInfo}. - * @param mediaFormat See {@link #mediaFormat}. - * @param format See {@link #format}. - * @return The created instance. - */ - @RequiresApi(18) - public static Configuration createForVideoEncoding( - MediaCodecInfo codecInfo, MediaFormat mediaFormat, Format format) { - return new Configuration( - codecInfo, - mediaFormat, - format, - /* surface= */ null, - /* crypto= */ null, - MediaCodec.CONFIGURE_FLAG_ENCODE, - /* createInputSurface= */ true); + return new Configuration(codecInfo, mediaFormat, format, surface, crypto, /* flags= */ 0); } /** Information about the {@link MediaCodec} being configured. */ @@ -147,17 +93,8 @@ public interface MediaCodecAdapter { @Nullable public final Surface surface; /** For DRM protected playbacks, a {@link MediaCrypto} to use for decryption. */ @Nullable public final MediaCrypto crypto; - /** - * Specify CONFIGURE_FLAG_ENCODE to configure the component as an encoder. - * - * @see MediaCodec#configure - */ + /** See {@link MediaCodec#configure}. */ public final int flags; - /** - * Whether to request a {@link Surface} and use it as to the input to an encoder. This can only - * be set to {@code true} on API 18+. - */ - public final boolean createInputSurface; private Configuration( MediaCodecInfo codecInfo, @@ -165,15 +102,13 @@ public interface MediaCodecAdapter { Format format, @Nullable Surface surface, @Nullable MediaCrypto crypto, - int flags, - boolean createInputSurface) { + int flags) { this.codecInfo = codecInfo; this.mediaFormat = mediaFormat; this.format = format; this.surface = surface; this.crypto = crypto; this.flags = flags; - this.createInputSurface = createInputSurface; } } @@ -231,14 +166,6 @@ public interface MediaCodecAdapter { @Nullable ByteBuffer getInputBuffer(int index); - /** - * Returns the input {@link Surface}, or null if the input is not a surface. - * - * @see MediaCodec#createInputSurface() - */ - @Nullable - Surface getInputSurface(); - /** * Returns a read-only ByteBuffer for a dequeued output buffer index. * @@ -331,15 +258,6 @@ public interface MediaCodecAdapter { /** Whether the adapter needs to be reconfigured before it is used. */ boolean needsReconfiguration(); - /** - * Signals the encoder of end-of-stream on input. The call can only be used when the encoder - * receives its input from a {@link Surface surface}. - * - * @see MediaCodec#signalEndOfInputStream() - */ - @RequiresApi(18) - void signalEndOfInputStream(); - /** * Returns metrics data about the current codec instance. * diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java index 5f97cf81e2..1d5d4cb27d 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/SynchronousMediaCodecAdapter.java @@ -25,7 +25,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.PersistableBundle; import android.view.Surface; -import androidx.annotation.DoNotInline; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.media3.common.C; @@ -48,7 +47,6 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { @Override public MediaCodecAdapter createAdapter(Configuration configuration) throws IOException { @Nullable MediaCodec codec = null; - @Nullable Surface inputSurface = null; try { codec = createCodec(configuration); TraceUtil.beginSection("configureCodec"); @@ -58,24 +56,11 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { configuration.crypto, configuration.flags); TraceUtil.endSection(); - - if (configuration.createInputSurface) { - if (Util.SDK_INT >= 18) { - inputSurface = Api18.createCodecInputSurface(codec); - } else { - throw new IllegalStateException( - "Encoding from a surface is only supported on API 18 and up."); - } - } - TraceUtil.beginSection("startCodec"); codec.start(); TraceUtil.endSection(); - return new SynchronousMediaCodecAdapter(codec, inputSurface); + return new SynchronousMediaCodecAdapter(codec); } catch (IOException | RuntimeException e) { - if (inputSurface != null) { - inputSurface.release(); - } if (codec != null) { codec.release(); } @@ -95,13 +80,11 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { } private final MediaCodec codec; - @Nullable private final Surface inputSurface; @Nullable private ByteBuffer[] inputByteBuffers; @Nullable private ByteBuffer[] outputByteBuffers; - private SynchronousMediaCodecAdapter(MediaCodec mediaCodec, @Nullable Surface inputSurface) { + private SynchronousMediaCodecAdapter(MediaCodec mediaCodec) { this.codec = mediaCodec; - this.inputSurface = inputSurface; if (Util.SDK_INT < 21) { inputByteBuffers = codec.getInputBuffers(); outputByteBuffers = codec.getOutputBuffers(); @@ -146,12 +129,6 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { } } - @Override - @Nullable - public Surface getInputSurface() { - return inputSurface; - } - @Override @Nullable public ByteBuffer getOutputBuffer(int index) { @@ -195,18 +172,9 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { public void release() { inputByteBuffers = null; outputByteBuffers = null; - if (inputSurface != null) { - inputSurface.release(); - } codec.release(); } - @Override - @RequiresApi(18) - public void signalEndOfInputStream() { - Api18.signalEndOfInputStream(codec); - } - @Override @RequiresApi(23) public void setOnFrameRenderedListener(OnFrameRenderedListener listener, Handler handler) { @@ -239,19 +207,4 @@ public final class SynchronousMediaCodecAdapter implements MediaCodecAdapter { public PersistableBundle getMetrics() { return codec.getMetrics(); } - - @RequiresApi(18) - private static final class Api18 { - private Api18() {} - - @DoNotInline - public static Surface createCodecInputSurface(MediaCodec codec) { - return codec.createInputSurface(); - } - - @DoNotInline - public static void signalEndOfInputStream(MediaCodec codec) { - codec.signalEndOfInputStream(); - } - } } diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java index 8355b7f4a7..c08eeffbe0 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingRenderersFactory.java @@ -197,12 +197,6 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa return inputBuffer; } - @Nullable - @Override - public Surface getInputSurface() { - return delegate.getInputSurface(); - } - @Nullable @Override public ByteBuffer getOutputBuffer(int index) { @@ -272,12 +266,6 @@ public class CapturingRenderersFactory implements RenderersFactory, Dumper.Dumpa delegate.setVideoScalingMode(scalingMode); } - @RequiresApi(18) - @Override - public void signalEndOfInputStream() { - delegate.signalEndOfInputStream(); - } - @RequiresApi(26) @Override public PersistableBundle getMetrics() {