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(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);
|
||||||
|
@ -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;
|
||||||
|
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user