mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Merge #5462: Making easier to set the playClearSampleWithoutKeys to renderers
Imported from GitHub PR https://github.com/google/ExoPlayer/pull/5462
Pull request for the following issue: #5421
Merge d9d88b079c4ca0533a836b2715a65b924babbb89 into a738191627
PiperOrigin-RevId: 232335113
This commit is contained in:
parent
3818d7329d
commit
67be9e7783
3 changed files with 195 additions and 65 deletions
|
|
@ -16,6 +16,7 @@
|
||||||
package com.google.android.exoplayer2;
|
package com.google.android.exoplayer2;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.media.MediaCodec;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.support.annotation.IntDef;
|
import android.support.annotation.IntDef;
|
||||||
|
|
@ -85,15 +86,18 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
protected static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50;
|
protected static final int MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY = 50;
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
private final @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager;
|
@Nullable private DrmSessionManager<FrameworkMediaCrypto> drmSessionManager;
|
||||||
private final @ExtensionRendererMode int extensionRendererMode;
|
@ExtensionRendererMode private int extensionRendererMode;
|
||||||
private final long allowedVideoJoiningTimeMs;
|
private long allowedVideoJoiningTimeMs;
|
||||||
|
private boolean playClearSamplesWithoutKeys;
|
||||||
|
private MediaCodecSelector mediaCodecSelector;
|
||||||
|
|
||||||
/**
|
/** @param context A {@link Context}. */
|
||||||
* @param context A {@link Context}.
|
|
||||||
*/
|
|
||||||
public DefaultRenderersFactory(Context context) {
|
public DefaultRenderersFactory(Context context) {
|
||||||
this(context, EXTENSION_RENDERER_MODE_OFF);
|
this.context = context;
|
||||||
|
extensionRendererMode = EXTENSION_RENDERER_MODE_OFF;
|
||||||
|
allowedVideoJoiningTimeMs = DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS;
|
||||||
|
mediaCodecSelector = MediaCodecSelector.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -108,19 +112,20 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param context A {@link Context}.
|
* @deprecated Use {@link #DefaultRenderersFactory(Context)} and {@link
|
||||||
* @param extensionRendererMode The extension renderer mode, which determines if and how available
|
* #setExtensionRendererMode(int)}.
|
||||||
* extension renderers are used. Note that extensions must be included in the application
|
|
||||||
* build for them to be considered available.
|
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public DefaultRenderersFactory(
|
public DefaultRenderersFactory(
|
||||||
Context context, @ExtensionRendererMode int extensionRendererMode) {
|
Context context, @ExtensionRendererMode int extensionRendererMode) {
|
||||||
this(context, extensionRendererMode, DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS);
|
this(context, extensionRendererMode, DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link #DefaultRenderersFactory(Context, int)} and pass {@link
|
* @deprecated Use {@link #DefaultRenderersFactory(Context)} and {@link
|
||||||
* DrmSessionManager} directly to {@link SimpleExoPlayer} or {@link ExoPlayerFactory}.
|
* #setExtensionRendererMode(int)}, and pass {@link DrmSessionManager} directly to {@link
|
||||||
|
* SimpleExoPlayer} or {@link ExoPlayerFactory}.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
|
|
@ -132,26 +137,22 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param context A {@link Context}.
|
* @deprecated Use {@link #DefaultRenderersFactory(Context)}, {@link
|
||||||
* @param extensionRendererMode The extension renderer mode, which determines if and how available
|
* #setExtensionRendererMode(int)} and {@link #setAllowedVideoJoiningTimeMs(long)}.
|
||||||
* extension renderers are used. Note that extensions must be included in the application
|
|
||||||
* build for them to be considered available.
|
|
||||||
* @param allowedVideoJoiningTimeMs The maximum duration for which video renderers can attempt to
|
|
||||||
* seamlessly join an ongoing playback.
|
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public DefaultRenderersFactory(
|
public DefaultRenderersFactory(
|
||||||
Context context,
|
Context context,
|
||||||
@ExtensionRendererMode int extensionRendererMode,
|
@ExtensionRendererMode int extensionRendererMode,
|
||||||
long allowedVideoJoiningTimeMs) {
|
long allowedVideoJoiningTimeMs) {
|
||||||
this.context = context;
|
this(context, null, extensionRendererMode, allowedVideoJoiningTimeMs);
|
||||||
this.extensionRendererMode = extensionRendererMode;
|
|
||||||
this.allowedVideoJoiningTimeMs = allowedVideoJoiningTimeMs;
|
|
||||||
this.drmSessionManager = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link #DefaultRenderersFactory(Context, int, long)} and pass {@link
|
* @deprecated Use {@link #DefaultRenderersFactory(Context)}, {@link
|
||||||
* DrmSessionManager} directly to {@link SimpleExoPlayer} or {@link ExoPlayerFactory}.
|
* #setExtensionRendererMode(int)} and {@link #setAllowedVideoJoiningTimeMs(long)}, and pass
|
||||||
|
* {@link DrmSessionManager} directly to {@link SimpleExoPlayer} or {@link ExoPlayerFactory}.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public DefaultRenderersFactory(
|
public DefaultRenderersFactory(
|
||||||
|
|
@ -163,6 +164,70 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
this.extensionRendererMode = extensionRendererMode;
|
this.extensionRendererMode = extensionRendererMode;
|
||||||
this.allowedVideoJoiningTimeMs = allowedVideoJoiningTimeMs;
|
this.allowedVideoJoiningTimeMs = allowedVideoJoiningTimeMs;
|
||||||
this.drmSessionManager = drmSessionManager;
|
this.drmSessionManager = drmSessionManager;
|
||||||
|
mediaCodecSelector = MediaCodecSelector.DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the extension renderer mode, which determines if and how available extension renderers are
|
||||||
|
* used. Note that extensions must be included in the application build for them to be considered
|
||||||
|
* available.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@link #EXTENSION_RENDERER_MODE_OFF}.
|
||||||
|
*
|
||||||
|
* @param extensionRendererMode The extension renderer mode.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultRenderersFactory setExtensionRendererMode(
|
||||||
|
@ExtensionRendererMode int extensionRendererMode) {
|
||||||
|
this.extensionRendererMode = extensionRendererMode;
|
||||||
|
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
|
||||||
|
* starts with a short clear region, this allows playback to begin in parallel with key
|
||||||
|
* acquisition, which can reduce startup latency.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@code false}.
|
||||||
|
*
|
||||||
|
* @param playClearSamplesWithoutKeys 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.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultRenderersFactory setPlayClearSamplesWithoutKeys(
|
||||||
|
boolean playClearSamplesWithoutKeys) {
|
||||||
|
this.playClearSamplesWithoutKeys = playClearSamplesWithoutKeys;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a {@link MediaCodecSelector} for use by {@link MediaCodec} based renderers.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@link MediaCodecSelector#DEFAULT}.
|
||||||
|
*
|
||||||
|
* @param mediaCodecSelector The {@link MediaCodecSelector}.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultRenderersFactory setMediaCodecSelector(MediaCodecSelector mediaCodecSelector) {
|
||||||
|
this.mediaCodecSelector = mediaCodecSelector;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing
|
||||||
|
* playback.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@link #DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS}.
|
||||||
|
*
|
||||||
|
* @param allowedVideoJoiningTimeMs The maximum duration for which video renderers can attempt to
|
||||||
|
* seamlessly join an ongoing playback, in milliseconds.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultRenderersFactory setAllowedVideoJoiningTimeMs(long allowedVideoJoiningTimeMs) {
|
||||||
|
this.allowedVideoJoiningTimeMs = allowedVideoJoiningTimeMs;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -177,10 +242,26 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
drmSessionManager = this.drmSessionManager;
|
drmSessionManager = this.drmSessionManager;
|
||||||
}
|
}
|
||||||
ArrayList<Renderer> renderersList = new ArrayList<>();
|
ArrayList<Renderer> renderersList = new ArrayList<>();
|
||||||
buildVideoRenderers(context, drmSessionManager, allowedVideoJoiningTimeMs,
|
buildVideoRenderers(
|
||||||
eventHandler, videoRendererEventListener, extensionRendererMode, renderersList);
|
context,
|
||||||
buildAudioRenderers(context, drmSessionManager, buildAudioProcessors(),
|
extensionRendererMode,
|
||||||
eventHandler, audioRendererEventListener, extensionRendererMode, renderersList);
|
mediaCodecSelector,
|
||||||
|
drmSessionManager,
|
||||||
|
playClearSamplesWithoutKeys,
|
||||||
|
eventHandler,
|
||||||
|
videoRendererEventListener,
|
||||||
|
allowedVideoJoiningTimeMs,
|
||||||
|
renderersList);
|
||||||
|
buildAudioRenderers(
|
||||||
|
context,
|
||||||
|
extensionRendererMode,
|
||||||
|
mediaCodecSelector,
|
||||||
|
drmSessionManager,
|
||||||
|
playClearSamplesWithoutKeys,
|
||||||
|
buildAudioProcessors(),
|
||||||
|
eventHandler,
|
||||||
|
audioRendererEventListener,
|
||||||
|
renderersList);
|
||||||
buildTextRenderers(context, textRendererOutput, eventHandler.getLooper(),
|
buildTextRenderers(context, textRendererOutput, eventHandler.getLooper(),
|
||||||
extensionRendererMode, renderersList);
|
extensionRendererMode, renderersList);
|
||||||
buildMetadataRenderers(context, metadataRendererOutput, eventHandler.getLooper(),
|
buildMetadataRenderers(context, metadataRendererOutput, eventHandler.getLooper(),
|
||||||
|
|
@ -194,27 +275,36 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
* Builds video renderers for use by the player.
|
* Builds video renderers for use by the player.
|
||||||
*
|
*
|
||||||
* @param context The {@link Context} associated with the player.
|
* @param context The {@link Context} associated with the player.
|
||||||
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the player
|
* @param extensionRendererMode The extension renderer mode.
|
||||||
* will not be used for DRM protected playbacks.
|
* @param mediaCodecSelector A decoder selector.
|
||||||
* @param allowedVideoJoiningTimeMs The maximum duration in milliseconds for which video
|
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the player will
|
||||||
* renderers can attempt to seamlessly join an ongoing playback.
|
* not be used for DRM protected playbacks.
|
||||||
|
* @param playClearSamplesWithoutKeys 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.
|
||||||
* @param eventHandler A handler associated with the main thread's looper.
|
* @param eventHandler A handler associated with the main thread's looper.
|
||||||
* @param eventListener An event listener.
|
* @param eventListener An event listener.
|
||||||
* @param extensionRendererMode The extension renderer mode.
|
* @param allowedVideoJoiningTimeMs The maximum duration for which video renderers can attempt to
|
||||||
|
* seamlessly join an ongoing playback, in milliseconds.
|
||||||
* @param out An array to which the built renderers should be appended.
|
* @param out An array to which the built renderers should be appended.
|
||||||
*/
|
*/
|
||||||
protected void buildVideoRenderers(Context context,
|
protected void buildVideoRenderers(
|
||||||
|
Context context,
|
||||||
|
@ExtensionRendererMode int extensionRendererMode,
|
||||||
|
MediaCodecSelector mediaCodecSelector,
|
||||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||||
long allowedVideoJoiningTimeMs, Handler eventHandler,
|
boolean playClearSamplesWithoutKeys,
|
||||||
VideoRendererEventListener eventListener, @ExtensionRendererMode int extensionRendererMode,
|
Handler eventHandler,
|
||||||
|
VideoRendererEventListener eventListener,
|
||||||
|
long allowedVideoJoiningTimeMs,
|
||||||
ArrayList<Renderer> out) {
|
ArrayList<Renderer> out) {
|
||||||
out.add(
|
out.add(
|
||||||
new MediaCodecVideoRenderer(
|
new MediaCodecVideoRenderer(
|
||||||
context,
|
context,
|
||||||
MediaCodecSelector.DEFAULT,
|
mediaCodecSelector,
|
||||||
allowedVideoJoiningTimeMs,
|
allowedVideoJoiningTimeMs,
|
||||||
drmSessionManager,
|
drmSessionManager,
|
||||||
/* playClearSamplesWithoutKeys= */ false,
|
playClearSamplesWithoutKeys,
|
||||||
eventHandler,
|
eventHandler,
|
||||||
eventListener,
|
eventListener,
|
||||||
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY));
|
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY));
|
||||||
|
|
@ -259,26 +349,35 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
* Builds audio renderers for use by the player.
|
* Builds audio renderers for use by the player.
|
||||||
*
|
*
|
||||||
* @param context The {@link Context} associated with the player.
|
* @param context The {@link Context} associated with the player.
|
||||||
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the player
|
* @param extensionRendererMode The extension renderer mode.
|
||||||
* will not be used for DRM protected playbacks.
|
* @param mediaCodecSelector A decoder selector.
|
||||||
* @param audioProcessors An array of {@link AudioProcessor}s that will process PCM audio
|
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if the player will
|
||||||
* buffers before output. May be empty.
|
* not be used for DRM protected playbacks.
|
||||||
|
* @param playClearSamplesWithoutKeys 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.
|
||||||
|
* @param audioProcessors An array of {@link AudioProcessor}s that will process PCM audio buffers
|
||||||
|
* before output. May be empty.
|
||||||
* @param eventHandler A handler to use when invoking event listeners and outputs.
|
* @param eventHandler A handler to use when invoking event listeners and outputs.
|
||||||
* @param eventListener An event listener.
|
* @param eventListener An event listener.
|
||||||
* @param extensionRendererMode The extension renderer mode.
|
|
||||||
* @param out An array to which the built renderers should be appended.
|
* @param out An array to which the built renderers should be appended.
|
||||||
*/
|
*/
|
||||||
protected void buildAudioRenderers(Context context,
|
protected void buildAudioRenderers(
|
||||||
|
Context context,
|
||||||
|
@ExtensionRendererMode int extensionRendererMode,
|
||||||
|
MediaCodecSelector mediaCodecSelector,
|
||||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||||
AudioProcessor[] audioProcessors, Handler eventHandler,
|
boolean playClearSamplesWithoutKeys,
|
||||||
AudioRendererEventListener eventListener, @ExtensionRendererMode int extensionRendererMode,
|
AudioProcessor[] audioProcessors,
|
||||||
|
Handler eventHandler,
|
||||||
|
AudioRendererEventListener eventListener,
|
||||||
ArrayList<Renderer> out) {
|
ArrayList<Renderer> out) {
|
||||||
out.add(
|
out.add(
|
||||||
new MediaCodecAudioRenderer(
|
new MediaCodecAudioRenderer(
|
||||||
context,
|
context,
|
||||||
MediaCodecSelector.DEFAULT,
|
mediaCodecSelector,
|
||||||
drmSessionManager,
|
drmSessionManager,
|
||||||
/* playClearSamplesWithoutKeys= */ false,
|
playClearSamplesWithoutKeys,
|
||||||
eventHandler,
|
eventHandler,
|
||||||
eventListener,
|
eventListener,
|
||||||
AudioCapabilities.getCapabilities(context),
|
AudioCapabilities.getCapabilities(context),
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,8 @@ public final class ExoPlayerFactory {
|
||||||
LoadControl loadControl,
|
LoadControl loadControl,
|
||||||
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||||
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode) {
|
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode) {
|
||||||
RenderersFactory renderersFactory = new DefaultRenderersFactory(context, extensionRendererMode);
|
RenderersFactory renderersFactory =
|
||||||
|
new DefaultRenderersFactory(context).setExtensionRendererMode(extensionRendererMode);
|
||||||
return newSimpleInstance(
|
return newSimpleInstance(
|
||||||
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||||
}
|
}
|
||||||
|
|
@ -88,7 +89,9 @@ public final class ExoPlayerFactory {
|
||||||
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
|
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
|
||||||
long allowedVideoJoiningTimeMs) {
|
long allowedVideoJoiningTimeMs) {
|
||||||
RenderersFactory renderersFactory =
|
RenderersFactory renderersFactory =
|
||||||
new DefaultRenderersFactory(context, extensionRendererMode, allowedVideoJoiningTimeMs);
|
new DefaultRenderersFactory(context)
|
||||||
|
.setExtensionRendererMode(extensionRendererMode)
|
||||||
|
.setAllowedVideoJoiningTimeMs(allowedVideoJoiningTimeMs);
|
||||||
return newSimpleInstance(
|
return newSimpleInstance(
|
||||||
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
context, renderersFactory, trackSelector, loadControl, drmSessionManager);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import android.content.Context;
|
||||||
import android.media.MediaCodec;
|
import android.media.MediaCodec;
|
||||||
import android.media.MediaCrypto;
|
import android.media.MediaCrypto;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import com.google.android.exoplayer2.DefaultRenderersFactory;
|
import com.google.android.exoplayer2.DefaultRenderersFactory;
|
||||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||||
import com.google.android.exoplayer2.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
|
|
@ -37,22 +38,37 @@ import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A debug extension of {@link DefaultRenderersFactory}. Provides a video renderer that performs
|
* A debug extension of {@link DefaultRenderersFactory}. Provides a video renderer that performs
|
||||||
* video buffer timestamp assertions.
|
* video buffer timestamp assertions, and modifies the default value for {@link
|
||||||
|
* #setAllowedVideoJoiningTimeMs(long)} to be {@code 0}.
|
||||||
*/
|
*/
|
||||||
public class DebugRenderersFactory extends DefaultRenderersFactory {
|
public class DebugRenderersFactory extends DefaultRenderersFactory {
|
||||||
|
|
||||||
public DebugRenderersFactory(Context context) {
|
public DebugRenderersFactory(Context context) {
|
||||||
super(context, DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF, 0);
|
super(context);
|
||||||
|
setAllowedVideoJoiningTimeMs(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildVideoRenderers(Context context,
|
protected void buildVideoRenderers(
|
||||||
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, long allowedVideoJoiningTimeMs,
|
Context context,
|
||||||
Handler eventHandler, VideoRendererEventListener eventListener,
|
@ExtensionRendererMode int extensionRendererMode,
|
||||||
@ExtensionRendererMode int extensionRendererMode, ArrayList<Renderer> out) {
|
MediaCodecSelector mediaCodecSelector,
|
||||||
out.add(new DebugMediaCodecVideoRenderer(context, MediaCodecSelector.DEFAULT,
|
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||||
allowedVideoJoiningTimeMs, drmSessionManager, eventHandler, eventListener,
|
boolean playClearSamplesWithoutKeys,
|
||||||
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY));
|
Handler eventHandler,
|
||||||
|
VideoRendererEventListener eventListener,
|
||||||
|
long allowedVideoJoiningTimeMs,
|
||||||
|
ArrayList<Renderer> out) {
|
||||||
|
out.add(
|
||||||
|
new DebugMediaCodecVideoRenderer(
|
||||||
|
context,
|
||||||
|
mediaCodecSelector,
|
||||||
|
allowedVideoJoiningTimeMs,
|
||||||
|
drmSessionManager,
|
||||||
|
playClearSamplesWithoutKeys,
|
||||||
|
eventHandler,
|
||||||
|
eventListener,
|
||||||
|
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -71,12 +87,24 @@ public class DebugRenderersFactory extends DefaultRenderersFactory {
|
||||||
private int minimumInsertIndex;
|
private int minimumInsertIndex;
|
||||||
private boolean skipToPositionBeforeRenderingFirstFrame;
|
private boolean skipToPositionBeforeRenderingFirstFrame;
|
||||||
|
|
||||||
public DebugMediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector,
|
public DebugMediaCodecVideoRenderer(
|
||||||
long allowedJoiningTimeMs, DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
Context context,
|
||||||
Handler eventHandler, VideoRendererEventListener eventListener,
|
MediaCodecSelector mediaCodecSelector,
|
||||||
|
long allowedJoiningTimeMs,
|
||||||
|
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
|
||||||
|
boolean playClearSamplesWithoutKeys,
|
||||||
|
Handler eventHandler,
|
||||||
|
VideoRendererEventListener eventListener,
|
||||||
int maxDroppedFrameCountToNotify) {
|
int maxDroppedFrameCountToNotify) {
|
||||||
super(context, mediaCodecSelector, allowedJoiningTimeMs, drmSessionManager, false,
|
super(
|
||||||
eventHandler, eventListener, maxDroppedFrameCountToNotify);
|
context,
|
||||||
|
mediaCodecSelector,
|
||||||
|
allowedJoiningTimeMs,
|
||||||
|
drmSessionManager,
|
||||||
|
playClearSamplesWithoutKeys,
|
||||||
|
eventHandler,
|
||||||
|
eventListener,
|
||||||
|
maxDroppedFrameCountToNotify);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue