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:
parent
2282527821
commit
9e8f50a9c0
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user