Commit d23ca7b1 by christosts Committed by Ian Baker

Set MediaCodec operation mode for audio/video

Add experimental APIs to set the MediaCodecOperationMode separately
for audio and video.

PiperOrigin-RevId: 315467157
parent a56a02d2
...@@ -90,7 +90,8 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -90,7 +90,8 @@ public class DefaultRenderersFactory implements RenderersFactory {
private long allowedVideoJoiningTimeMs; private long allowedVideoJoiningTimeMs;
private boolean enableDecoderFallback; private boolean enableDecoderFallback;
private MediaCodecSelector mediaCodecSelector; private MediaCodecSelector mediaCodecSelector;
private @MediaCodecRenderer.MediaCodecOperationMode int mediaCodecOperationMode; private @MediaCodecRenderer.MediaCodecOperationMode int audioMediaCodecOperationMode;
private @MediaCodecRenderer.MediaCodecOperationMode int videoMediaCodecOperationMode;
private boolean enableOffload; private boolean enableOffload;
/** @param context A {@link Context}. */ /** @param context A {@link Context}. */
...@@ -99,7 +100,8 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -99,7 +100,8 @@ 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.OPERATION_MODE_SYNCHRONOUS; audioMediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS;
videoMediaCodecOperationMode = MediaCodecRenderer.OPERATION_MODE_SYNCHRONOUS;
} }
/** /**
...@@ -145,7 +147,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -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. * instances.
* *
* <p>This method is experimental, and will be renamed or removed in a future release. * <p>This method is experimental, and will be renamed or removed in a future release.
...@@ -153,9 +155,40 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -153,9 +155,40 @@ public class DefaultRenderersFactory implements RenderersFactory {
* @param mode The {@link MediaCodecRenderer.MediaCodecOperationMode} to set. * @param mode The {@link MediaCodecRenderer.MediaCodecOperationMode} to set.
* @return This factory, for convenience. * @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.
*
* <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_setVideoMediaCodecOperationMode(
@MediaCodecRenderer.MediaCodecOperationMode int mode) {
videoMediaCodecOperationMode = mode;
return this;
}
/**
* Set the {@link MediaCodecRenderer.MediaCodecOperationMode} for both {@link
* MediaCodecAudioRenderer} {@link MediaCodecVideoRenderer} 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( public DefaultRenderersFactory experimental_setMediaCodecOperationMode(
@MediaCodecRenderer.MediaCodecOperationMode int mode) { @MediaCodecRenderer.MediaCodecOperationMode int mode) {
mediaCodecOperationMode = mode; experimental_setAudioMediaCodecOperationMode(mode);
experimental_setVideoMediaCodecOperationMode(mode);
return this; return this;
} }
...@@ -283,7 +316,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -283,7 +316,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
eventHandler, eventHandler,
eventListener, eventListener,
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY); MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY);
videoRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode); videoRenderer.experimental_setMediaCodecOperationMode(videoMediaCodecOperationMode);
out.add(videoRenderer); out.add(videoRenderer);
if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) {
...@@ -415,7 +448,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -415,7 +448,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
new DefaultAudioProcessorChain(audioProcessors), new DefaultAudioProcessorChain(audioProcessors),
/* enableFloatOutput= */ false, /* enableFloatOutput= */ false,
enableOffload)); enableOffload));
audioRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode); audioRenderer.experimental_setMediaCodecOperationMode(audioMediaCodecOperationMode);
out.add(audioRenderer); out.add(audioRenderer);
if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) { if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) {
......
...@@ -76,6 +76,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -76,6 +76,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
* <li>{@link #OPERATION_MODE_ASYNCHRONOUS_PLAYBACK_THREAD} * <li>{@link #OPERATION_MODE_ASYNCHRONOUS_PLAYBACK_THREAD}
* <li>{@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD} * <li>{@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD}
* <li>{@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_MULTI_LOCK} * <li>{@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_MULTI_LOCK}
* <li>{@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_ASYNCHRONOUS_QUEUEING}
* <li>{@link #OPERATION_MODE_ASYNCHRONOUS_DEDICATED_THREAD_MULTI_LOCK_ASYNCHRONOUS_QUEUEING}
* </ul> * </ul>
*/ */
@Documented @Documented
......
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