Allow multiple video and audio debug listeners in SimpleExoPlayer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177184331
This commit is contained in:
tonihei 2017-11-28 10:45:38 -08:00 committed by Oliver Woodman
parent 2282527821
commit 9e8f50a9c0
3 changed files with 97 additions and 21 deletions

View File

@ -298,8 +298,8 @@ public class PlayerActivity extends Activity implements OnClickListener,
player.addListener(new PlayerEventListener()); player.addListener(new PlayerEventListener());
player.addListener(eventLogger); player.addListener(eventLogger);
player.addMetadataOutput(eventLogger); player.addMetadataOutput(eventLogger);
player.setAudioDebugListener(eventLogger); player.addAudioDebugListener(eventLogger);
player.setVideoDebugListener(eventLogger); player.addVideoDebugListener(eventLogger);
simpleExoPlayerView.setPlayer(player); simpleExoPlayerView.setPlayer(player);
player.setPlayWhenReady(shouldAutoPlay); player.setPlayWhenReady(shouldAutoPlay);

View File

@ -91,6 +91,8 @@ public class SimpleExoPlayer implements ExoPlayer {
private final CopyOnWriteArraySet<VideoListener> videoListeners; private final CopyOnWriteArraySet<VideoListener> videoListeners;
private final CopyOnWriteArraySet<TextOutput> textOutputs; private final CopyOnWriteArraySet<TextOutput> textOutputs;
private final CopyOnWriteArraySet<MetadataOutput> metadataOutputs; private final CopyOnWriteArraySet<MetadataOutput> metadataOutputs;
private final CopyOnWriteArraySet<VideoRendererEventListener> videoDebugListeners;
private final CopyOnWriteArraySet<AudioRendererEventListener> audioDebugListeners;
private final int videoRendererCount; private final int videoRendererCount;
private final int audioRendererCount; private final int audioRendererCount;
@ -103,8 +105,6 @@ public class SimpleExoPlayer implements ExoPlayer {
private int videoScalingMode; private int videoScalingMode;
private SurfaceHolder surfaceHolder; private SurfaceHolder surfaceHolder;
private TextureView textureView; private TextureView textureView;
private AudioRendererEventListener audioDebugListener;
private VideoRendererEventListener videoDebugListener;
private DecoderCounters videoDecoderCounters; private DecoderCounters videoDecoderCounters;
private DecoderCounters audioDecoderCounters; private DecoderCounters audioDecoderCounters;
private int audioSessionId; private int audioSessionId;
@ -117,6 +117,8 @@ public class SimpleExoPlayer implements ExoPlayer {
videoListeners = new CopyOnWriteArraySet<>(); videoListeners = new CopyOnWriteArraySet<>();
textOutputs = new CopyOnWriteArraySet<>(); textOutputs = new CopyOnWriteArraySet<>();
metadataOutputs = new CopyOnWriteArraySet<>(); metadataOutputs = new CopyOnWriteArraySet<>();
videoDebugListeners = new CopyOnWriteArraySet<>();
audioDebugListeners = new CopyOnWriteArraySet<>();
Looper eventLooper = Looper.myLooper() != null ? Looper.myLooper() : Looper.getMainLooper(); Looper eventLooper = Looper.myLooper() != null ? Looper.myLooper() : Looper.getMainLooper();
Handler eventHandler = new Handler(eventLooper); Handler eventHandler = new Handler(eventLooper);
renderers = renderersFactory.createRenderers(eventHandler, componentListener, componentListener, renderers = renderersFactory.createRenderers(eventHandler, componentListener, componentListener,
@ -579,18 +581,64 @@ public class SimpleExoPlayer implements ExoPlayer {
* Sets a listener to receive debug events from the video renderer. * Sets a listener to receive debug events from the video renderer.
* *
* @param listener The listener. * @param listener The listener.
* @deprecated Use {@link #addVideoDebugListener(VideoRendererEventListener)}.
*/ */
@Deprecated
public void setVideoDebugListener(VideoRendererEventListener listener) { public void setVideoDebugListener(VideoRendererEventListener listener) {
videoDebugListener = listener; videoDebugListeners.clear();
if (listener != null) {
addVideoDebugListener(listener);
}
}
/**
* Adds a listener to receive debug events from the video renderer.
*
* @param listener The listener.
*/
public void addVideoDebugListener(VideoRendererEventListener listener) {
videoDebugListeners.add(listener);
}
/**
* Removes a listener to receive debug events from the video renderer.
*
* @param listener The listener.
*/
public void removeVideoDebugListener(VideoRendererEventListener listener) {
videoDebugListeners.remove(listener);
} }
/** /**
* Sets a listener to receive debug events from the audio renderer. * Sets a listener to receive debug events from the audio renderer.
* *
* @param listener The listener. * @param listener The listener.
* @deprecated Use {@link #addAudioDebugListener(AudioRendererEventListener)}.
*/ */
@Deprecated
public void setAudioDebugListener(AudioRendererEventListener listener) { public void setAudioDebugListener(AudioRendererEventListener listener) {
audioDebugListener = listener; audioDebugListeners.clear();
if (listener != null) {
addAudioDebugListener(listener);
}
}
/**
* Adds a listener to receive debug events from the audio renderer.
*
* @param listener The listener.
*/
public void addAudioDebugListener(AudioRendererEventListener listener) {
audioDebugListeners.add(listener);
}
/**
* Removes a listener to receive debug events from the audio renderer.
*
* @param listener The listener.
*/
public void removeAudioDebugListener(AudioRendererEventListener listener) {
audioDebugListeners.remove(listener);
} }
// ExoPlayer implementation // ExoPlayer implementation
@ -885,7 +933,7 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onVideoEnabled(DecoderCounters counters) { public void onVideoEnabled(DecoderCounters counters) {
videoDecoderCounters = counters; videoDecoderCounters = counters;
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onVideoEnabled(counters); videoDebugListener.onVideoEnabled(counters);
} }
} }
@ -893,7 +941,7 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onVideoDecoderInitialized(String decoderName, long initializedTimestampMs, public void onVideoDecoderInitialized(String decoderName, long initializedTimestampMs,
long initializationDurationMs) { long initializationDurationMs) {
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onVideoDecoderInitialized(decoderName, initializedTimestampMs, videoDebugListener.onVideoDecoderInitialized(decoderName, initializedTimestampMs,
initializationDurationMs); initializationDurationMs);
} }
@ -902,14 +950,14 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onVideoInputFormatChanged(Format format) { public void onVideoInputFormatChanged(Format format) {
videoFormat = format; videoFormat = format;
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onVideoInputFormatChanged(format); videoDebugListener.onVideoInputFormatChanged(format);
} }
} }
@Override @Override
public void onDroppedFrames(int count, long elapsed) { public void onDroppedFrames(int count, long elapsed) {
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onDroppedFrames(count, elapsed); videoDebugListener.onDroppedFrames(count, elapsed);
} }
} }
@ -921,7 +969,7 @@ public class SimpleExoPlayer implements ExoPlayer {
videoListener.onVideoSizeChanged(width, height, unappliedRotationDegrees, videoListener.onVideoSizeChanged(width, height, unappliedRotationDegrees,
pixelWidthHeightRatio); pixelWidthHeightRatio);
} }
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onVideoSizeChanged(width, height, unappliedRotationDegrees, videoDebugListener.onVideoSizeChanged(width, height, unappliedRotationDegrees,
pixelWidthHeightRatio); pixelWidthHeightRatio);
} }
@ -934,14 +982,14 @@ public class SimpleExoPlayer implements ExoPlayer {
videoListener.onRenderedFirstFrame(); videoListener.onRenderedFirstFrame();
} }
} }
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onRenderedFirstFrame(surface); videoDebugListener.onRenderedFirstFrame(surface);
} }
} }
@Override @Override
public void onVideoDisabled(DecoderCounters counters) { public void onVideoDisabled(DecoderCounters counters) {
if (videoDebugListener != null) { for (VideoRendererEventListener videoDebugListener : videoDebugListeners) {
videoDebugListener.onVideoDisabled(counters); videoDebugListener.onVideoDisabled(counters);
} }
videoFormat = null; videoFormat = null;
@ -953,7 +1001,7 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onAudioEnabled(DecoderCounters counters) { public void onAudioEnabled(DecoderCounters counters) {
audioDecoderCounters = counters; audioDecoderCounters = counters;
if (audioDebugListener != null) { for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
audioDebugListener.onAudioEnabled(counters); audioDebugListener.onAudioEnabled(counters);
} }
} }
@ -961,7 +1009,7 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onAudioSessionId(int sessionId) { public void onAudioSessionId(int sessionId) {
audioSessionId = sessionId; audioSessionId = sessionId;
if (audioDebugListener != null) { for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
audioDebugListener.onAudioSessionId(sessionId); audioDebugListener.onAudioSessionId(sessionId);
} }
} }
@ -969,7 +1017,7 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onAudioDecoderInitialized(String decoderName, long initializedTimestampMs, public void onAudioDecoderInitialized(String decoderName, long initializedTimestampMs,
long initializationDurationMs) { long initializationDurationMs) {
if (audioDebugListener != null) { for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
audioDebugListener.onAudioDecoderInitialized(decoderName, initializedTimestampMs, audioDebugListener.onAudioDecoderInitialized(decoderName, initializedTimestampMs,
initializationDurationMs); initializationDurationMs);
} }
@ -978,7 +1026,7 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onAudioInputFormatChanged(Format format) { public void onAudioInputFormatChanged(Format format) {
audioFormat = format; audioFormat = format;
if (audioDebugListener != null) { for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
audioDebugListener.onAudioInputFormatChanged(format); audioDebugListener.onAudioInputFormatChanged(format);
} }
} }
@ -986,14 +1034,14 @@ public class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onAudioSinkUnderrun(int bufferSize, long bufferSizeMs, public void onAudioSinkUnderrun(int bufferSize, long bufferSizeMs,
long elapsedSinceLastFeedMs) { long elapsedSinceLastFeedMs) {
if (audioDebugListener != null) { for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
audioDebugListener.onAudioSinkUnderrun(bufferSize, bufferSizeMs, elapsedSinceLastFeedMs); audioDebugListener.onAudioSinkUnderrun(bufferSize, bufferSizeMs, elapsedSinceLastFeedMs);
} }
} }
@Override @Override
public void onAudioDisabled(DecoderCounters counters) { public void onAudioDisabled(DecoderCounters counters) {
if (audioDebugListener != null) { for (AudioRendererEventListener audioDebugListener : audioDebugListeners) {
audioDebugListener.onAudioDisabled(counters); audioDebugListener.onAudioDisabled(counters);
} }
audioFormat = null; audioFormat = null;

View File

@ -78,6 +78,8 @@ public abstract class ExoHostedTest extends Player.DefaultEventListener implemen
private Surface surface; private Surface surface;
private ExoPlaybackException playerError; private ExoPlaybackException playerError;
private Player.EventListener playerEventListener; private Player.EventListener playerEventListener;
private VideoRendererEventListener videoDebugListener;
private AudioRendererEventListener audioDebugListener;
private boolean playerWasPrepared; private boolean playerWasPrepared;
private boolean playing; private boolean playing;
@ -140,6 +142,26 @@ public abstract class ExoHostedTest extends Player.DefaultEventListener implemen
} }
} }
/**
* Sets an {@link VideoRendererEventListener} to listen for video debug events during the test.
*/
public final void setVideoDebugListener(VideoRendererEventListener videoDebugListener) {
this.videoDebugListener = videoDebugListener;
if (player != null) {
player.addVideoDebugListener(videoDebugListener);
}
}
/**
* Sets an {@link AudioRendererEventListener} to listen for audio debug events during the test.
*/
public final void setAudioDebugListener(AudioRendererEventListener audioDebugListener) {
this.audioDebugListener = audioDebugListener;
if (player != null) {
player.addAudioDebugListener(audioDebugListener);
}
}
// HostedTest implementation // HostedTest implementation
@Override @Override
@ -155,9 +177,15 @@ public abstract class ExoHostedTest extends Player.DefaultEventListener implemen
if (playerEventListener != null) { if (playerEventListener != null) {
player.addListener(playerEventListener); player.addListener(playerEventListener);
} }
if (videoDebugListener != null) {
player.addVideoDebugListener(videoDebugListener);
}
if (audioDebugListener != null) {
player.addAudioDebugListener(audioDebugListener);
}
player.addListener(this); player.addListener(this);
player.setAudioDebugListener(this); player.addAudioDebugListener(this);
player.setVideoDebugListener(this); player.addVideoDebugListener(this);
player.setPlayWhenReady(true); player.setPlayWhenReady(true);
actionHandler = new Handler(); actionHandler = new Handler();
// Schedule any pending actions. // Schedule any pending actions.