Commit 8e45bd27 by andrewlewis Committed by Oliver Woodman

Add nullable annotations to Renderer constructors

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=165437929
parent bbc3b182
...@@ -19,6 +19,7 @@ import android.content.Context; ...@@ -19,6 +19,7 @@ import android.content.Context;
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;
import android.support.annotation.Nullable;
import android.util.Log; import android.util.Log;
import com.google.android.exoplayer2.audio.AudioCapabilities; import com.google.android.exoplayer2.audio.AudioCapabilities;
import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioProcessor;
...@@ -79,7 +80,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -79,7 +80,7 @@ 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 DrmSessionManager<FrameworkMediaCrypto> drmSessionManager; @Nullable private final DrmSessionManager<FrameworkMediaCrypto> drmSessionManager;
private final @ExtensionRendererMode int extensionRendererMode; private final @ExtensionRendererMode int extensionRendererMode;
private final long allowedVideoJoiningTimeMs; private final long allowedVideoJoiningTimeMs;
...@@ -96,29 +97,28 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -96,29 +97,28 @@ public class DefaultRenderersFactory implements RenderersFactory {
* playbacks are not required. * playbacks are not required.
*/ */
public DefaultRenderersFactory(Context context, public DefaultRenderersFactory(Context context,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) { @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
this(context, drmSessionManager, EXTENSION_RENDERER_MODE_OFF); this(context, drmSessionManager, EXTENSION_RENDERER_MODE_OFF);
} }
/** /**
* @param context A {@link Context}. * @param context A {@link Context}.
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if DRM protected * @param drmSessionManager An optional {@link DrmSessionManager}. May be null if DRM protected
* playbacks are not required.. * playbacks are not required.
* @param extensionRendererMode The extension renderer mode, which determines if and how * @param extensionRendererMode The extension renderer mode, which determines if and how
* available extension renderers are used. Note that extensions must be included in the * available extension renderers are used. Note that extensions must be included in the
* application build for them to be considered available. * application build for them to be considered available.
*/ */
public DefaultRenderersFactory(Context context, public DefaultRenderersFactory(Context context,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
@ExtensionRendererMode int extensionRendererMode) { @ExtensionRendererMode int extensionRendererMode) {
this(context, drmSessionManager, extensionRendererMode, this(context, drmSessionManager, extensionRendererMode, DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS);
DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS);
} }
/** /**
* @param context A {@link Context}. * @param context A {@link Context}.
* @param drmSessionManager An optional {@link DrmSessionManager}. May be null if DRM protected * @param drmSessionManager An optional {@link DrmSessionManager}. May be null if DRM protected
* playbacks are not required.. * playbacks are not required.
* @param extensionRendererMode The extension renderer mode, which determines if and how * @param extensionRendererMode The extension renderer mode, which determines if and how
* available extension renderers are used. Note that extensions must be included in the * available extension renderers are used. Note that extensions must be included in the
* application build for them to be considered available. * application build for them to be considered available.
...@@ -126,7 +126,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -126,7 +126,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
* to seamlessly join an ongoing playback. * to seamlessly join an ongoing playback.
*/ */
public DefaultRenderersFactory(Context context, public DefaultRenderersFactory(Context context,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
@ExtensionRendererMode int extensionRendererMode, long allowedVideoJoiningTimeMs) { @ExtensionRendererMode int extensionRendererMode, long allowedVideoJoiningTimeMs) {
this.context = context; this.context = context;
this.drmSessionManager = drmSessionManager; this.drmSessionManager = drmSessionManager;
...@@ -137,8 +137,8 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -137,8 +137,8 @@ public class DefaultRenderersFactory implements RenderersFactory {
@Override @Override
public Renderer[] createRenderers(Handler eventHandler, public Renderer[] createRenderers(Handler eventHandler,
VideoRendererEventListener videoRendererEventListener, VideoRendererEventListener videoRendererEventListener,
AudioRendererEventListener audioRendererEventListener, AudioRendererEventListener audioRendererEventListener, TextRenderer.Output textRendererOutput,
TextRenderer.Output textRendererOutput, MetadataRenderer.Output metadataRendererOutput) { MetadataRenderer.Output metadataRendererOutput) {
ArrayList<Renderer> renderersList = new ArrayList<>(); ArrayList<Renderer> renderersList = new ArrayList<>();
buildVideoRenderers(context, drmSessionManager, allowedVideoJoiningTimeMs, buildVideoRenderers(context, drmSessionManager, allowedVideoJoiningTimeMs,
eventHandler, videoRendererEventListener, extensionRendererMode, renderersList); eventHandler, videoRendererEventListener, extensionRendererMode, renderersList);
...@@ -166,9 +166,10 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -166,9 +166,10 @@ public class DefaultRenderersFactory implements RenderersFactory {
* @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,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, long allowedVideoJoiningTimeMs, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
Handler eventHandler, VideoRendererEventListener eventListener, long allowedVideoJoiningTimeMs, Handler eventHandler,
@ExtensionRendererMode int extensionRendererMode, ArrayList<Renderer> out) { VideoRendererEventListener eventListener, @ExtensionRendererMode int extensionRendererMode,
ArrayList<Renderer> out) {
out.add(new MediaCodecVideoRenderer(context, MediaCodecSelector.DEFAULT, out.add(new MediaCodecVideoRenderer(context, MediaCodecSelector.DEFAULT,
allowedVideoJoiningTimeMs, drmSessionManager, false, eventHandler, eventListener, allowedVideoJoiningTimeMs, drmSessionManager, false, eventHandler, eventListener,
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY)); MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY));
...@@ -211,7 +212,7 @@ public class DefaultRenderersFactory implements RenderersFactory { ...@@ -211,7 +212,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
* @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,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
AudioProcessor[] audioProcessors, Handler eventHandler, AudioProcessor[] audioProcessors, Handler eventHandler,
AudioRendererEventListener eventListener, @ExtensionRendererMode int extensionRendererMode, AudioRendererEventListener eventListener, @ExtensionRendererMode int extensionRendererMode,
ArrayList<Renderer> out) { ArrayList<Renderer> out) {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package com.google.android.exoplayer2; package com.google.android.exoplayer2;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable;
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.trackselection.TrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelector;
...@@ -54,7 +55,8 @@ public final class ExoPlayerFactory { ...@@ -54,7 +55,8 @@ public final class ExoPlayerFactory {
*/ */
@Deprecated @Deprecated
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector, public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
LoadControl loadControl, DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) { LoadControl loadControl,
@Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager) {
RenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager); RenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager);
return newSimpleInstance(renderersFactory, trackSelector, loadControl); return newSimpleInstance(renderersFactory, trackSelector, loadControl);
} }
...@@ -74,7 +76,7 @@ public final class ExoPlayerFactory { ...@@ -74,7 +76,7 @@ public final class ExoPlayerFactory {
*/ */
@Deprecated @Deprecated
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector, public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
LoadControl loadControl, DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, LoadControl loadControl, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode) { @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode) {
RenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager, RenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager,
extensionRendererMode); extensionRendererMode);
...@@ -98,7 +100,7 @@ public final class ExoPlayerFactory { ...@@ -98,7 +100,7 @@ public final class ExoPlayerFactory {
*/ */
@Deprecated @Deprecated
public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector, public static SimpleExoPlayer newSimpleInstance(Context context, TrackSelector trackSelector,
LoadControl loadControl, DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, LoadControl loadControl, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
@DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode, @DefaultRenderersFactory.ExtensionRendererMode int extensionRendererMode,
long allowedVideoJoiningTimeMs) { long allowedVideoJoiningTimeMs) {
RenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager, RenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager,
......
...@@ -17,6 +17,7 @@ package com.google.android.exoplayer2.audio; ...@@ -17,6 +17,7 @@ package com.google.android.exoplayer2.audio;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
...@@ -84,15 +85,16 @@ public interface AudioRendererEventListener { ...@@ -84,15 +85,16 @@ public interface AudioRendererEventListener {
*/ */
final class EventDispatcher { final class EventDispatcher {
private final Handler handler; @Nullable private final Handler handler;
private final AudioRendererEventListener listener; @Nullable private final AudioRendererEventListener listener;
/** /**
* @param handler A handler for dispatching events, or null if creating a dummy instance. * @param handler A handler for dispatching events, or null if creating a dummy instance.
* @param listener The listener to which events should be dispatched, or null if creating a * @param listener The listener to which events should be dispatched, or null if creating a
* dummy instance. * dummy instance.
*/ */
public EventDispatcher(Handler handler, AudioRendererEventListener listener) { public EventDispatcher(@Nullable Handler handler,
@Nullable AudioRendererEventListener listener) {
this.handler = listener != null ? Assertions.checkNotNull(handler) : null; this.handler = listener != null ? Assertions.checkNotNull(handler) : null;
this.listener = listener; this.listener = listener;
} }
......
...@@ -22,6 +22,7 @@ import android.media.AudioManager; ...@@ -22,6 +22,7 @@ import android.media.AudioManager;
import android.media.AudioTimestamp; import android.media.AudioTimestamp;
import android.os.ConditionVariable; import android.os.ConditionVariable;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.util.Log; import android.util.Log;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
...@@ -277,7 +278,7 @@ public final class AudioTrack { ...@@ -277,7 +278,7 @@ public final class AudioTrack {
*/ */
public static boolean failOnSpuriousAudioTimestamp = false; public static boolean failOnSpuriousAudioTimestamp = false;
private final AudioCapabilities audioCapabilities; @Nullable private final AudioCapabilities audioCapabilities;
private final ChannelMappingAudioProcessor channelMappingAudioProcessor; private final ChannelMappingAudioProcessor channelMappingAudioProcessor;
private final SonicAudioProcessor sonicAudioProcessor; private final SonicAudioProcessor sonicAudioProcessor;
private final AudioProcessor[] availableAudioProcessors; private final AudioProcessor[] availableAudioProcessors;
...@@ -355,7 +356,7 @@ public final class AudioTrack { ...@@ -355,7 +356,7 @@ public final class AudioTrack {
* output. May be empty. * output. May be empty.
* @param listener Listener for audio track events. * @param listener Listener for audio track events.
*/ */
public AudioTrack(AudioCapabilities audioCapabilities, AudioProcessor[] audioProcessors, public AudioTrack(@Nullable AudioCapabilities audioCapabilities, AudioProcessor[] audioProcessors,
Listener listener) { Listener listener) {
this.audioCapabilities = audioCapabilities; this.audioCapabilities = audioCapabilities;
this.listener = listener; this.listener = listener;
......
...@@ -21,6 +21,7 @@ import android.media.MediaCrypto; ...@@ -21,6 +21,7 @@ import android.media.MediaCrypto;
import android.media.MediaFormat; import android.media.MediaFormat;
import android.media.audiofx.Virtualizer; import android.media.audiofx.Virtualizer;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
...@@ -72,7 +73,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media ...@@ -72,7 +73,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* has obtained the keys necessary to decrypt encrypted regions of the media. * has obtained the keys necessary to decrypt encrypted regions of the media.
*/ */
public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
boolean playClearSamplesWithoutKeys) { boolean playClearSamplesWithoutKeys) {
this(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, null, null); this(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, null, null);
} }
...@@ -83,8 +84,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media ...@@ -83,8 +84,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* null if delivery of events is not required. * null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required.
*/ */
public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, Handler eventHandler, public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector,
AudioRendererEventListener eventListener) { @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener) {
this(mediaCodecSelector, null, true, eventHandler, eventListener); this(mediaCodecSelector, null, true, eventHandler, eventListener);
} }
...@@ -102,9 +103,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media ...@@ -102,9 +103,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* @param eventListener A listener of events. May be null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required.
*/ */
public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
boolean playClearSamplesWithoutKeys, Handler eventHandler, boolean playClearSamplesWithoutKeys, @Nullable Handler eventHandler,
AudioRendererEventListener eventListener) { @Nullable AudioRendererEventListener eventListener) {
this(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, eventHandler, this(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, eventHandler,
eventListener, null); eventListener, null);
} }
...@@ -127,10 +128,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media ...@@ -127,10 +128,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* output. * output.
*/ */
public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
boolean playClearSamplesWithoutKeys, Handler eventHandler, boolean playClearSamplesWithoutKeys, @Nullable Handler eventHandler,
AudioRendererEventListener eventListener, AudioCapabilities audioCapabilities, @Nullable AudioRendererEventListener eventListener,
AudioProcessor... audioProcessors) { @Nullable AudioCapabilities audioCapabilities, AudioProcessor... audioProcessors) {
super(C.TRACK_TYPE_AUDIO, mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys); super(C.TRACK_TYPE_AUDIO, mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys);
audioTrack = new AudioTrack(audioCapabilities, audioProcessors, new AudioTrackListener()); audioTrack = new AudioTrack(audioCapabilities, audioProcessors, new AudioTrackListener());
eventDispatcher = new EventDispatcher(eventHandler, eventListener); eventDispatcher = new EventDispatcher(eventHandler, eventListener);
......
...@@ -169,7 +169,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -169,7 +169,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private static final int ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT = 32; private static final int ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT = 32;
private final MediaCodecSelector mediaCodecSelector; private final MediaCodecSelector mediaCodecSelector;
private final DrmSessionManager<FrameworkMediaCrypto> drmSessionManager; @Nullable private final DrmSessionManager<FrameworkMediaCrypto> drmSessionManager;
private final boolean playClearSamplesWithoutKeys; private final boolean playClearSamplesWithoutKeys;
private final DecoderInputBuffer buffer; private final DecoderInputBuffer buffer;
private final DecoderInputBuffer flagsOnlyBuffer; private final DecoderInputBuffer flagsOnlyBuffer;
...@@ -223,7 +223,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -223,7 +223,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
* has obtained the keys necessary to decrypt encrypted regions of the media. * has obtained the keys necessary to decrypt encrypted regions of the media.
*/ */
public MediaCodecRenderer(int trackType, MediaCodecSelector mediaCodecSelector, public MediaCodecRenderer(int trackType, MediaCodecSelector mediaCodecSelector,
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
boolean playClearSamplesWithoutKeys) { boolean playClearSamplesWithoutKeys) {
super(trackType); super(trackType);
Assertions.checkState(Util.SDK_INT >= 16); Assertions.checkState(Util.SDK_INT >= 16);
...@@ -1090,7 +1090,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -1090,7 +1090,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
* @param drmInitData {@link DrmInitData} of the format to check for support. * @param drmInitData {@link DrmInitData} of the format to check for support.
* @return Whether the encryption scheme is supported, or true if {@code drmInitData} is null. * @return Whether the encryption scheme is supported, or true if {@code drmInitData} is null.
*/ */
private static boolean isDrmSchemeSupported(DrmSessionManager drmSessionManager, private static boolean isDrmSchemeSupported(@Nullable DrmSessionManager drmSessionManager,
@Nullable DrmInitData drmInitData) { @Nullable DrmInitData drmInitData) {
if (drmInitData == null) { if (drmInitData == null) {
// Content is unencrypted. // Content is unencrypted.
......
...@@ -26,6 +26,7 @@ import android.media.MediaFormat; ...@@ -26,6 +26,7 @@ import android.media.MediaFormat;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log; import android.util.Log;
import android.view.Surface; import android.view.Surface;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
...@@ -137,8 +138,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -137,8 +138,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
*/ */
public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector,
long allowedJoiningTimeMs, Handler eventHandler, VideoRendererEventListener eventListener, long allowedJoiningTimeMs, @Nullable Handler eventHandler,
int maxDroppedFrameCountToNotify) { @Nullable VideoRendererEventListener eventListener, int maxDroppedFrameCountToNotify) {
this(context, mediaCodecSelector, allowedJoiningTimeMs, null, false, eventHandler, this(context, mediaCodecSelector, allowedJoiningTimeMs, null, false, eventHandler,
eventListener, maxDroppedFrameCountToNotify); eventListener, maxDroppedFrameCountToNotify);
} }
...@@ -162,9 +163,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -162,9 +163,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
*/ */
public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector,
long allowedJoiningTimeMs, DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, long allowedJoiningTimeMs,
boolean playClearSamplesWithoutKeys, Handler eventHandler, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager,
VideoRendererEventListener eventListener, int maxDroppedFramesToNotify) { boolean playClearSamplesWithoutKeys, @Nullable Handler eventHandler,
@Nullable VideoRendererEventListener eventListener, int maxDroppedFramesToNotify) {
super(C.TRACK_TYPE_VIDEO, mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys); super(C.TRACK_TYPE_VIDEO, mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys);
this.allowedJoiningTimeMs = allowedJoiningTimeMs; this.allowedJoiningTimeMs = allowedJoiningTimeMs;
this.maxDroppedFramesToNotify = maxDroppedFramesToNotify; this.maxDroppedFramesToNotify = maxDroppedFramesToNotify;
......
...@@ -17,6 +17,7 @@ package com.google.android.exoplayer2.video; ...@@ -17,6 +17,7 @@ package com.google.android.exoplayer2.video;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.view.Surface; import android.view.Surface;
import android.view.TextureView; import android.view.TextureView;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
...@@ -109,15 +110,16 @@ public interface VideoRendererEventListener { ...@@ -109,15 +110,16 @@ public interface VideoRendererEventListener {
*/ */
final class EventDispatcher { final class EventDispatcher {
private final Handler handler; @Nullable private final Handler handler;
private final VideoRendererEventListener listener; @Nullable private final VideoRendererEventListener listener;
/** /**
* @param handler A handler for dispatching events, or null if creating a dummy instance. * @param handler A handler for dispatching events, or null if creating a dummy instance.
* @param listener The listener to which events should be dispatched, or null if creating a * @param listener The listener to which events should be dispatched, or null if creating a
* dummy instance. * dummy instance.
*/ */
public EventDispatcher(Handler handler, VideoRendererEventListener listener) { public EventDispatcher(@Nullable Handler handler,
@Nullable VideoRendererEventListener listener) {
this.handler = listener != null ? Assertions.checkNotNull(handler) : null; this.handler = listener != null ? Assertions.checkNotNull(handler) : null;
this.listener = listener; this.listener = listener;
} }
......
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