Commit 43bbc172 by christosts Committed by Oliver Woodman

DefaultRenderersFactory can set MediaCodecOperation

Add experimental method on DefaultRenderersFactory to set the
MediaCodecOperationMode on MediaCodecRenderer instances.

PiperOrigin-RevId: 286004667
parent 863bf453
...@@ -28,6 +28,7 @@ import com.google.android.exoplayer2.audio.DefaultAudioSink; ...@@ -28,6 +28,7 @@ import com.google.android.exoplayer2.audio.DefaultAudioSink;
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer; import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; 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.mediacodec.MediaCodecSelector;
import com.google.android.exoplayer2.metadata.MetadataOutput; import com.google.android.exoplayer2.metadata.MetadataOutput;
import com.google.android.exoplayer2.metadata.MetadataRenderer; import com.google.android.exoplayer2.metadata.MetadataRenderer;
...@@ -93,6 +94,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -93,6 +94,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
private boolean playClearSamplesWithoutKeys; private boolean playClearSamplesWithoutKeys;
private boolean enableDecoderFallback; private boolean enableDecoderFallback;
private MediaCodecSelector mediaCodecSelector; private MediaCodecSelector mediaCodecSelector;
@MediaCodecRenderer.MediaCodecOperationMode private int mediaCodecOperationMode;
/** @param context A {@link Context}. */ /** @param context A {@link Context}. */
public DefaultRenderersFactory(Context context) { public DefaultRenderersFactory(Context context) {
...@@ -100,6 +102,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -100,6 +102,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
extensionRendererMode = EXTENSION_RENDERER_MODE_OFF; extensionRendererMode = EXTENSION_RENDERER_MODE_OFF;
allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS; allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS;
mediaCodecSelector = MediaCodecSelector.DEFAULT; mediaCodecSelector = MediaCodecSelector.DEFAULT;
mediaCodecOperationMode = MediaCodecRenderer.MediaCodecOperationMode.SYNCHRONOUS;
} }
/** /**
...@@ -186,6 +189,21 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -186,6 +189,21 @@ public class DefaultRenderersFactory implements RenderersFactory {
} }
/** /**
* Set the {@link MediaCodecRenderer.MediaCodecOperationMode} of {@link MediaCodecRenderer}
* instances.
*
* <p>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 * 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 * obtained the keys necessary to decrypt encrypted regions of the media. For encrypted media that
* starts with a short clear region, this allows playback to begin in parallel with key * starts with a short clear region, this allows playback to begin in parallel with key
...@@ -319,7 +337,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -319,7 +337,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
VideoRendererEventListener eventListener, VideoRendererEventListener eventListener,
long allowedVideoJoiningTimeMs, long allowedVideoJoiningTimeMs,
ArrayList<Renderer> out) { ArrayList<Renderer> out) {
out.add( MediaCodecVideoRenderer videoRenderer =
new MediaCodecVideoRenderer( new MediaCodecVideoRenderer(
context, context,
mediaCodecSelector, mediaCodecSelector,
...@@ -329,7 +347,9 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -329,7 +347,9 @@ public class DefaultRenderersFactory implements RenderersFactory {
enableDecoderFallback, enableDecoderFallback,
eventHandler, eventHandler,
eventListener, eventListener,
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY)); MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY);
videoRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode);
out.add(videoRenderer);
if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) {
return; return;
...@@ -425,7 +445,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -425,7 +445,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
Handler eventHandler, Handler eventHandler,
AudioRendererEventListener eventListener, AudioRendererEventListener eventListener,
ArrayList<Renderer> out) { ArrayList<Renderer> out) {
out.add( MediaCodecAudioRenderer audioRenderer =
new MediaCodecAudioRenderer( new MediaCodecAudioRenderer(
context, context,
mediaCodecSelector, mediaCodecSelector,
...@@ -434,7 +454,9 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -434,7 +454,9 @@ public class DefaultRenderersFactory implements RenderersFactory {
enableDecoderFallback, enableDecoderFallback,
eventHandler, eventHandler,
eventListener, eventListener,
new DefaultAudioSink(AudioCapabilities.getCapabilities(context), audioProcessors))); new DefaultAudioSink(AudioCapabilities.getCapabilities(context), audioProcessors));
audioRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode);
out.add(audioRenderer);
if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) {
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment