diff --git a/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java index 3558a319ba..5d130442b3 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/DefaultRenderersFactory.java @@ -28,7 +28,6 @@ import com.google.android.exoplayer2.audio.AudioSink; import com.google.android.exoplayer2.audio.DefaultAudioSink; import com.google.android.exoplayer2.audio.DefaultAudioSink.DefaultAudioProcessorChain; import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer; -import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.metadata.MetadataOutput; import com.google.android.exoplayer2.metadata.MetadataRenderer; @@ -92,8 +91,7 @@ public class DefaultRenderersFactory implements RenderersFactory { private long allowedVideoJoiningTimeMs; private boolean enableDecoderFallback; private MediaCodecSelector mediaCodecSelector; - private @MediaCodecRenderer.MediaCodecOperationMode int audioMediaCodecOperationMode; - private @MediaCodecRenderer.MediaCodecOperationMode int videoMediaCodecOperationMode; + private boolean enableAsyncQueueing; private boolean enableFloatOutput; private boolean enableAudioTrackPlaybackParams; private boolean enableOffload; @@ -104,8 +102,6 @@ public class DefaultRenderersFactory implements RenderersFactory { extensionRendererMode = EXTENSION_RENDERER_MODE_OFF; allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS; mediaCodecSelector = MediaCodecSelector.DEFAULT; - audioMediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS; - videoMediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS; } /** @@ -151,48 +147,16 @@ public class DefaultRenderersFactory implements RenderersFactory { } /** - * Set the {@link MediaCodecRenderer.MediaCodecOperationMode} of {@link MediaCodecAudioRenderer} - * instances. + * Enable asynchronous buffer queueing for both {@link MediaCodecAudioRenderer} and {@link + * MediaCodecVideoRenderer} instances. * *
This method is experimental, and will be renamed or removed in a future release. * - * @param mode The {@link MediaCodecRenderer.MediaCodecOperationMode} to set. + * @param enabled Whether asynchronous queueing is enabled. * @return This factory, for convenience. */ - public DefaultRenderersFactory experimentalSetAudioMediaCodecOperationMode( - @MediaCodecRenderer.MediaCodecOperationMode int mode) { - audioMediaCodecOperationMode = mode; - return this; - } - - /** - * Set the {@link MediaCodecRenderer.MediaCodecOperationMode} of {@link MediaCodecVideoRenderer} - * instances. - * - *
This method is experimental, and will be renamed or removed in a future release. - * - * @param mode The {@link MediaCodecRenderer.MediaCodecOperationMode} to set. - * @return This factory, for convenience. - */ - public DefaultRenderersFactory experimentalSetVideoMediaCodecOperationMode( - @MediaCodecRenderer.MediaCodecOperationMode int mode) { - videoMediaCodecOperationMode = mode; - return this; - } - - /** - * Set the {@link MediaCodecRenderer.MediaCodecOperationMode} for both {@link - * MediaCodecAudioRenderer} {@link MediaCodecVideoRenderer} instances. - * - *
This method is experimental, and will be renamed or removed in a future release. - * - * @param mode The {@link MediaCodecRenderer.MediaCodecOperationMode} to set. - * @return This factory, for convenience. - */ - public DefaultRenderersFactory experimentalSetMediaCodecOperationMode( - @MediaCodecRenderer.MediaCodecOperationMode int mode) { - experimentalSetAudioMediaCodecOperationMode(mode); - experimentalSetVideoMediaCodecOperationMode(mode); + public DefaultRenderersFactory experimentalEnableAsynchronousBufferQueueing(boolean enabled) { + enableAsyncQueueing = enabled; return this; } @@ -372,7 +336,7 @@ public class DefaultRenderersFactory implements RenderersFactory { eventHandler, eventListener, MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY); - videoRenderer.experimentalSetMediaCodecOperationMode(videoMediaCodecOperationMode); + videoRenderer.experimentalEnableAsynchronousBufferQueueing(enableAsyncQueueing); out.add(videoRenderer); if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { @@ -497,7 +461,7 @@ public class DefaultRenderersFactory implements RenderersFactory { eventHandler, eventListener, audioSink); - audioRenderer.experimentalSetMediaCodecOperationMode(audioMediaCodecOperationMode); + audioRenderer.experimentalEnableAsynchronousBufferQueueing(enableAsyncQueueing); out.add(audioRenderer); if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecAdapter.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecAdapter.java index 69875f2367..78bdeade81 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecAdapter.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecAdapter.java @@ -22,13 +22,12 @@ import android.media.MediaFormat; import android.view.Surface; import androidx.annotation.Nullable; import com.google.android.exoplayer2.decoder.CryptoInfo; -import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.MediaCodecOperationMode; /** * Abstracts {@link MediaCodec} operations. * *
{@code MediaCodecAdapter} offers a common interface to interact with a {@link MediaCodec} - * regardless of the {@link MediaCodecOperationMode} the {@link MediaCodec} is operating in. + * regardless of the mode the {@link MediaCodec} is operating in. */ public interface MediaCodecAdapter { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index de3f595976..c01d43872e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -54,10 +54,8 @@ import com.google.android.exoplayer2.util.TimedValueQueue; import com.google.android.exoplayer2.util.TraceUtil; import com.google.android.exoplayer2.util.Util; import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayDeque; @@ -69,44 +67,6 @@ import java.util.List; */ public abstract class MediaCodecRenderer extends BaseRenderer { - /** - * The modes to operate the {@link MediaCodec}. - * - *
Allowed values: - * - *
Operates the underlying {@link MediaCodec} in asynchronous mode and submits input buffers + * from a separate thread to unblock the playback thread. * *
This method is experimental, and will be renamed or removed in a future release. It should * only be called before the renderer is used. - * - * @param mode The mode of the MediaCodec. The supported modes are: - *