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(eventLogger);
player.addMetadataOutput(eventLogger);
player.setAudioDebugListener(eventLogger);
player.setVideoDebugListener(eventLogger);
player.addAudioDebugListener(eventLogger);
player.addVideoDebugListener(eventLogger);
simpleExoPlayerView.setPlayer(player);
player.setPlayWhenReady(shouldAutoPlay);

View File

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

View File

@ -78,6 +78,8 @@ public abstract class ExoHostedTest extends Player.DefaultEventListener implemen
private Surface surface;
private ExoPlaybackException playerError;
private Player.EventListener playerEventListener;
private VideoRendererEventListener videoDebugListener;
private AudioRendererEventListener audioDebugListener;
private boolean playerWasPrepared;
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
@Override
@ -155,9 +177,15 @@ public abstract class ExoHostedTest extends Player.DefaultEventListener implemen
if (playerEventListener != null) {
player.addListener(playerEventListener);
}
if (videoDebugListener != null) {
player.addVideoDebugListener(videoDebugListener);
}
if (audioDebugListener != null) {
player.addAudioDebugListener(audioDebugListener);
}
player.addListener(this);
player.setAudioDebugListener(this);
player.setVideoDebugListener(this);
player.addAudioDebugListener(this);
player.addVideoDebugListener(this);
player.setPlayWhenReady(true);
actionHandler = new Handler();
// Schedule any pending actions.