mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Set MediaCodec operation mode for audio/video
Add experimental APIs to set the MediaCodecOperationMode separately for audio and video. PiperOrigin-RevId: 315467157
This commit is contained in:
parent
a56a02d2c5
commit
d23ca7b11a
2 changed files with 41 additions and 6 deletions
|
|
@ -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 {
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 {
|
||||||
* @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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
* <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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue