mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
DefaultRenderersFactory can set MediaCodecOperation
Add experimental method on DefaultRenderersFactory to set the MediaCodecOperationMode on MediaCodecRenderer instances. PiperOrigin-RevId: 286004667
This commit is contained in:
parent
863bf45341
commit
43bbc172a4
1 changed files with 26 additions and 4 deletions
|
|
@ -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 {
|
||||||
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 {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -185,6 +188,21 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
|
@ -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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue