Skip to content

Commit

Permalink
DefaultRenderersFactory can set MediaCodecOperation
Browse files Browse the repository at this point in the history
Add experimental method on DefaultRenderersFactory to set the
MediaCodecOperationMode on MediaCodecRenderer instances.

PiperOrigin-RevId: 286004667
  • Loading branch information
christosts authored and ojw28 committed Dec 18, 2019
1 parent 863bf45 commit 43bbc17
Showing 1 changed file with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -93,13 +94,15 @@ 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) {
this.context = context;
extensionRendererMode = EXTENSION_RENDERER_MODE_OFF;
allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS;
mediaCodecSelector = MediaCodecSelector.DEFAULT;
mediaCodecOperationMode = MediaCodecRenderer.MediaCodecOperationMode.SYNCHRONOUS;
}

/**
Expand Down Expand Up @@ -185,6 +188,21 @@ public DefaultRenderersFactory setExtensionRendererMode(
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
* obtained the keys necessary to decrypt encrypted regions of the media. For encrypted media that
Expand Down Expand Up @@ -319,7 +337,7 @@ protected void buildVideoRenderers(
VideoRendererEventListener eventListener,
long allowedVideoJoiningTimeMs,
ArrayList<Renderer> out) {
out.add(
MediaCodecVideoRenderer videoRenderer =
new MediaCodecVideoRenderer(
context,
mediaCodecSelector,
Expand All @@ -329,7 +347,9 @@ protected void buildVideoRenderers(
enableDecoderFallback,
eventHandler,
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) {
return;
Expand Down Expand Up @@ -425,7 +445,7 @@ protected void buildAudioRenderers(
Handler eventHandler,
AudioRendererEventListener eventListener,
ArrayList<Renderer> out) {
out.add(
MediaCodecAudioRenderer audioRenderer =
new MediaCodecAudioRenderer(
context,
mediaCodecSelector,
Expand All @@ -434,7 +454,9 @@ protected void buildAudioRenderers(
enableDecoderFallback,
eventHandler,
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) {
return;
Expand Down

0 comments on commit 43bbc17

Please sign in to comment.