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 0b74d1175c..bd56974b32 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 @@ -90,7 +90,8 @@ public class DefaultRenderersFactory implements RenderersFactory { private long allowedVideoJoiningTimeMs; private boolean enableDecoderFallback; private MediaCodecSelector mediaCodecSelector; - private @MediaCodecRenderer.MediaCodecOperationMode int mediaCodecOperationMode; + private @MediaCodecRenderer.MediaCodecOperationMode int audioMediaCodecOperationMode; + private @MediaCodecRenderer.MediaCodecOperationMode int videoMediaCodecOperationMode; private boolean enableOffload; /** @param context A {@link Context}. */ @@ -99,7 +100,8 @@ public class DefaultRenderersFactory implements RenderersFactory { extensionRendererMode = EXTENSION_RENDERER_MODE_OFF; allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS; mediaCodecSelector = MediaCodecSelector.DEFAULT; - mediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS; + audioMediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS; + videoMediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS; } /** @@ -145,7 +147,7 @@ public class DefaultRenderersFactory implements RenderersFactory { } /** - * Set the {@link MediaCodecRenderer.MediaCodecOperationMode} of {@link MediaCodecRenderer} + * Set the {@link MediaCodecRenderer.MediaCodecOperationMode} of {@link MediaCodecAudioRenderer} * instances. * *

This method is experimental, and will be renamed or removed in a future release. @@ -153,9 +155,40 @@ public class DefaultRenderersFactory implements RenderersFactory { * @param mode The {@link MediaCodecRenderer.MediaCodecOperationMode} to set. * @return This factory, for convenience. */ + public DefaultRenderersFactory experimental_setAudioMediaCodecOperationMode( + @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 experimental_setVideoMediaCodecOperationMode( + @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 experimental_setMediaCodecOperationMode( @MediaCodecRenderer.MediaCodecOperationMode int mode) { - mediaCodecOperationMode = mode; + experimental_setAudioMediaCodecOperationMode(mode); + experimental_setVideoMediaCodecOperationMode(mode); return this; } @@ -283,7 +316,7 @@ public class DefaultRenderersFactory implements RenderersFactory { eventHandler, eventListener, MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY); - videoRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode); + videoRenderer.experimental_setMediaCodecOperationMode(videoMediaCodecOperationMode); out.add(videoRenderer); if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { @@ -415,7 +448,7 @@ public class DefaultRenderersFactory implements RenderersFactory { new DefaultAudioProcessorChain(audioProcessors), /* enableFloatOutput= */ false, enableOffload)); - audioRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode); + audioRenderer.experimental_setMediaCodecOperationMode(audioMediaCodecOperationMode); out.add(audioRenderer); if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { 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 53875b6018..b85fbe3a71 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 @@ -76,6 +76,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer { *

  • {@link #OPERATION_MODE_ASYNCHRONOUS_PLAYBACK_THREAD} *
  • {@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD} *
  • {@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_MULTI_LOCK} + *
  • {@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_ASYNCHRONOUS_QUEUEING} + *
  • {@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_MULTI_LOCK_ASYNCHRONOUS_QUEUEING} * */ @Documented