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 f53d72f598e..97ad6613e38 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,6 +28,7 @@ import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; +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; @@ -93,6 +94,7 @@ public class DefaultRenderersFactory implements RenderersFactory { private boolean playClearSamplesWithoutKeys; private boolean enableDecoderFallback; private MediaCodecSelector mediaCodecSelector; + @MediaCodecRenderer.MediaCodecOperationMode private int mediaCodecOperationMode; /** @param context A {@link Context}. */ public DefaultRenderersFactory(Context context) { @@ -100,6 +102,7 @@ public DefaultRenderersFactory(Context context) { extensionRendererMode = EXTENSION_RENDERER_MODE_OFF; allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS; mediaCodecSelector = MediaCodecSelector.DEFAULT; + mediaCodecOperationMode = MediaCodecRenderer.MediaCodecOperationMode.SYNCHRONOUS; } /** @@ -185,6 +188,21 @@ public DefaultRenderersFactory setExtensionRendererMode( return this; } + /** + * Set the {@link MediaCodecRenderer.MediaCodecOperationMode} of {@link MediaCodecRenderer} + * 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;
+ return this;
+ }
+
/**
* Sets whether renderers are permitted to play clear regions of encrypted media prior to having
* obtained the keys necessary to decrypt encrypted regions of the media. For encrypted media that
@@ -319,7 +337,7 @@ protected void buildVideoRenderers(
VideoRendererEventListener eventListener,
long allowedVideoJoiningTimeMs,
ArrayList