Commit 11d2d7da by samrobinson Committed by Ian Baker

Add open @IntDef for Renderer message types.

#exofixit

PiperOrigin-RevId: 395233622
parent 093d1171
...@@ -196,7 +196,8 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities { ...@@ -196,7 +196,8 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
// PlayerMessage.Target implementation. // PlayerMessage.Target implementation.
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
// Do nothing. // Do nothing.
} }
......
...@@ -179,7 +179,8 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities ...@@ -179,7 +179,8 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities
// PlayerMessage.Target implementation. // PlayerMessage.Target implementation.
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
// Do nothing. // Do nothing.
} }
......
...@@ -18,6 +18,7 @@ package com.google.android.exoplayer2; ...@@ -18,6 +18,7 @@ package com.google.android.exoplayer2;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.Renderer.MessageType;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.util.Clock;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
...@@ -39,7 +40,8 @@ public final class PlayerMessage { ...@@ -39,7 +40,8 @@ public final class PlayerMessage {
* @throws ExoPlaybackException If an error occurred whilst handling the message. Should only be * @throws ExoPlaybackException If an error occurred whilst handling the message. Should only be
* thrown by targets that handle messages on the playback thread. * thrown by targets that handle messages on the playback thread.
*/ */
void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException; void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException;
} }
/** A sender for messages. */ /** A sender for messages. */
......
...@@ -75,6 +75,33 @@ public interface Renderer extends PlayerMessage.Target { ...@@ -75,6 +75,33 @@ public interface Renderer extends PlayerMessage.Target {
} }
/** /**
* Represents a type of message that can be passed to a renderer. May be one of {@link
* #MSG_SET_VIDEO_OUTPUT}, {@link #MSG_SET_VOLUME}, {@link #MSG_SET_AUDIO_ATTRIBUTES}, {@link
* #MSG_SET_SCALING_MODE}, {@link #MSG_SET_CHANGE_FRAME_RATE_STRATEGY}, {@link
* #MSG_SET_AUX_EFFECT_INFO}, {@link #MSG_SET_VIDEO_FRAME_METADATA_LISTENER}, {@link
* #MSG_SET_CAMERA_MOTION_LISTENER}, {@link #MSG_SET_SKIP_SILENCE_ENABLED}, {@link
* #MSG_SET_AUDIO_SESSION_ID} or {@link #MSG_SET_WAKEUP_LISTENER}. May also be an app-defined
* value (see {@link #MSG_CUSTOM_BASE}).
*/
@Documented
@Retention(RetentionPolicy.SOURCE)
@IntDef(
open = true,
value = {
MSG_SET_VIDEO_OUTPUT,
MSG_SET_VOLUME,
MSG_SET_AUDIO_ATTRIBUTES,
MSG_SET_SCALING_MODE,
MSG_SET_CHANGE_FRAME_RATE_STRATEGY,
MSG_SET_AUX_EFFECT_INFO,
MSG_SET_VIDEO_FRAME_METADATA_LISTENER,
MSG_SET_CAMERA_MOTION_LISTENER,
MSG_SET_SKIP_SILENCE_ENABLED,
MSG_SET_AUDIO_SESSION_ID,
MSG_SET_WAKEUP_LISTENER
})
public @interface MessageType {}
/**
* The type of a message that can be passed to a video renderer via {@link * The type of a message that can be passed to a video renderer via {@link
* ExoPlayer#createMessage(Target)}. The message payload is normally a {@link Surface}, however * ExoPlayer#createMessage(Target)}. The message payload is normally a {@link Surface}, however
* some video renderers may accept other outputs (e.g., {@link VideoDecoderOutputBufferRenderer}). * some video renderers may accept other outputs (e.g., {@link VideoDecoderOutputBufferRenderer}).
......
...@@ -45,6 +45,7 @@ import android.view.TextureView; ...@@ -45,6 +45,7 @@ import android.view.TextureView;
import androidx.annotation.IntRange; import androidx.annotation.IntRange;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import com.google.android.exoplayer2.Renderer.MessageType;
import com.google.android.exoplayer2.analytics.AnalyticsCollector; import com.google.android.exoplayer2.analytics.AnalyticsCollector;
import com.google.android.exoplayer2.analytics.AnalyticsListener; import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.audio.AudioAttributes; import com.google.android.exoplayer2.audio.AudioAttributes;
...@@ -2206,11 +2207,15 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -2206,11 +2207,15 @@ public class SimpleExoPlayer extends BasePlayer
private static final class FrameMetadataListener private static final class FrameMetadataListener
implements VideoFrameMetadataListener, CameraMotionListener, PlayerMessage.Target { implements VideoFrameMetadataListener, CameraMotionListener, PlayerMessage.Target {
@MessageType
public static final int MSG_SET_VIDEO_FRAME_METADATA_LISTENER = public static final int MSG_SET_VIDEO_FRAME_METADATA_LISTENER =
Renderer.MSG_SET_VIDEO_FRAME_METADATA_LISTENER; Renderer.MSG_SET_VIDEO_FRAME_METADATA_LISTENER;
@MessageType
public static final int MSG_SET_CAMERA_MOTION_LISTENER = public static final int MSG_SET_CAMERA_MOTION_LISTENER =
Renderer.MSG_SET_CAMERA_MOTION_LISTENER; Renderer.MSG_SET_CAMERA_MOTION_LISTENER;
public static final int MSG_SET_SPHERICAL_SURFACE_VIEW = Renderer.MSG_CUSTOM_BASE;
@MessageType public static final int MSG_SET_SPHERICAL_SURFACE_VIEW = Renderer.MSG_CUSTOM_BASE;
@Nullable private VideoFrameMetadataListener videoFrameMetadataListener; @Nullable private VideoFrameMetadataListener videoFrameMetadataListener;
@Nullable private CameraMotionListener cameraMotionListener; @Nullable private CameraMotionListener cameraMotionListener;
...@@ -2218,7 +2223,7 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -2218,7 +2223,7 @@ public class SimpleExoPlayer extends BasePlayer
@Nullable private CameraMotionListener internalCameraMotionListener; @Nullable private CameraMotionListener internalCameraMotionListener;
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) { public void handleMessage(@MessageType int messageType, @Nullable Object message) {
switch (messageType) { switch (messageType) {
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER: case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
videoFrameMetadataListener = (VideoFrameMetadataListener) message; videoFrameMetadataListener = (VideoFrameMetadataListener) message;
...@@ -2227,7 +2232,7 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -2227,7 +2232,7 @@ public class SimpleExoPlayer extends BasePlayer
cameraMotionListener = (CameraMotionListener) message; cameraMotionListener = (CameraMotionListener) message;
break; break;
case MSG_SET_SPHERICAL_SURFACE_VIEW: case MSG_SET_SPHERICAL_SURFACE_VIEW:
SphericalGLSurfaceView surfaceView = (SphericalGLSurfaceView) message; @Nullable SphericalGLSurfaceView surfaceView = (SphericalGLSurfaceView) message;
if (surfaceView == null) { if (surfaceView == null) {
internalVideoFrameMetadataListener = null; internalVideoFrameMetadataListener = null;
internalCameraMotionListener = null; internalCameraMotionListener = null;
...@@ -2236,6 +2241,15 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -2236,6 +2241,15 @@ public class SimpleExoPlayer extends BasePlayer
internalCameraMotionListener = surfaceView.getCameraMotionListener(); internalCameraMotionListener = surfaceView.getCameraMotionListener();
} }
break; break;
case Renderer.MSG_SET_AUDIO_ATTRIBUTES:
case Renderer.MSG_SET_AUDIO_SESSION_ID:
case Renderer.MSG_SET_AUX_EFFECT_INFO:
case Renderer.MSG_SET_CHANGE_FRAME_RATE_STRATEGY:
case Renderer.MSG_SET_SCALING_MODE:
case Renderer.MSG_SET_SKIP_SILENCE_ENABLED:
case Renderer.MSG_SET_VIDEO_OUTPUT:
case Renderer.MSG_SET_VOLUME:
case Renderer.MSG_SET_WAKEUP_LISTENER:
default: default:
break; break;
} }
......
...@@ -571,7 +571,8 @@ public abstract class DecoderAudioRenderer< ...@@ -571,7 +571,8 @@ public abstract class DecoderAudioRenderer<
} }
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) { switch (messageType) {
case MSG_SET_VOLUME: case MSG_SET_VOLUME:
audioSink.setVolume((Float) message); audioSink.setVolume((Float) message);
...@@ -590,6 +591,12 @@ public abstract class DecoderAudioRenderer< ...@@ -590,6 +591,12 @@ public abstract class DecoderAudioRenderer<
case MSG_SET_AUDIO_SESSION_ID: case MSG_SET_AUDIO_SESSION_ID:
audioSink.setAudioSessionId((Integer) message); audioSink.setAudioSessionId((Integer) message);
break; break;
case MSG_SET_CAMERA_MOTION_LISTENER:
case MSG_SET_CHANGE_FRAME_RATE_STRATEGY:
case MSG_SET_SCALING_MODE:
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
case MSG_SET_VIDEO_OUTPUT:
case MSG_SET_WAKEUP_LISTENER:
default: default:
super.handleMessage(messageType, message); super.handleMessage(messageType, message);
break; break;
......
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
*/ */
package com.google.android.exoplayer2.audio; package com.google.android.exoplayer2.audio;
import static com.google.android.exoplayer2.Renderer.MSG_SET_CAMERA_MOTION_LISTENER;
import static com.google.android.exoplayer2.Renderer.MSG_SET_CHANGE_FRAME_RATE_STRATEGY;
import static com.google.android.exoplayer2.Renderer.MSG_SET_SCALING_MODE;
import static com.google.android.exoplayer2.Renderer.MSG_SET_VIDEO_FRAME_METADATA_LISTENER;
import static com.google.android.exoplayer2.Renderer.MSG_SET_VIDEO_OUTPUT;
import static com.google.android.exoplayer2.decoder.DecoderReuseEvaluation.DISCARD_REASON_MAX_INPUT_SIZE_EXCEEDED; import static com.google.android.exoplayer2.decoder.DecoderReuseEvaluation.DISCARD_REASON_MAX_INPUT_SIZE_EXCEEDED;
import static com.google.android.exoplayer2.decoder.DecoderReuseEvaluation.REUSE_RESULT_NO; import static com.google.android.exoplayer2.decoder.DecoderReuseEvaluation.REUSE_RESULT_NO;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
...@@ -667,7 +672,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media ...@@ -667,7 +672,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
} }
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) { switch (messageType) {
case MSG_SET_VOLUME: case MSG_SET_VOLUME:
audioSink.setVolume((Float) message); audioSink.setVolume((Float) message);
...@@ -689,6 +695,11 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media ...@@ -689,6 +695,11 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
case MSG_SET_WAKEUP_LISTENER: case MSG_SET_WAKEUP_LISTENER:
this.wakeupListener = (WakeupListener) message; this.wakeupListener = (WakeupListener) message;
break; break;
case MSG_SET_CAMERA_MOTION_LISTENER:
case MSG_SET_CHANGE_FRAME_RATE_STRATEGY:
case MSG_SET_SCALING_MODE:
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
case MSG_SET_VIDEO_OUTPUT:
default: default:
super.handleMessage(messageType, message); super.handleMessage(messageType, message);
break; break;
......
...@@ -247,7 +247,8 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -247,7 +247,8 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
// PlayerMessage.Target implementation. // PlayerMessage.Target implementation.
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
if (messageType == MSG_SET_VIDEO_OUTPUT) { if (messageType == MSG_SET_VIDEO_OUTPUT) {
setOutput(message); setOutput(message);
} else if (messageType == MSG_SET_VIDEO_FRAME_METADATA_LISTENER) { } else if (messageType == MSG_SET_VIDEO_FRAME_METADATA_LISTENER) {
......
...@@ -505,7 +505,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -505,7 +505,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
} }
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) { switch (messageType) {
case MSG_SET_VIDEO_OUTPUT: case MSG_SET_VIDEO_OUTPUT:
setOutput(message); setOutput(message);
...@@ -532,6 +533,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -532,6 +533,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
} }
} }
break; break;
case MSG_SET_AUDIO_ATTRIBUTES:
case MSG_SET_AUX_EFFECT_INFO:
case MSG_SET_CAMERA_MOTION_LISTENER:
case MSG_SET_SKIP_SILENCE_ENABLED:
case MSG_SET_VOLUME:
case MSG_SET_WAKEUP_LISTENER:
default: default:
super.handleMessage(messageType, message); super.handleMessage(messageType, message);
} }
......
...@@ -64,7 +64,8 @@ public final class CameraMotionRenderer extends BaseRenderer { ...@@ -64,7 +64,8 @@ public final class CameraMotionRenderer extends BaseRenderer {
} }
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
if (messageType == MSG_SET_CAMERA_MOTION_LISTENER) { if (messageType == MSG_SET_CAMERA_MOTION_LISTENER) {
listener = (CameraMotionListener) message; listener = (CameraMotionListener) message;
} else { } else {
......
...@@ -2573,7 +2573,7 @@ public final class ExoPlayerTest { ...@@ -2573,7 +2573,7 @@ public final class ExoPlayerTest {
Renderer videoRenderer = Renderer videoRenderer =
new FakeRenderer(C.TRACK_TYPE_VIDEO) { new FakeRenderer(C.TRACK_TYPE_VIDEO) {
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException { throws ExoPlaybackException {
super.handleMessage(messageType, message); super.handleMessage(messageType, message);
rendererMessages.add(messageType); rendererMessages.add(messageType);
...@@ -11093,7 +11093,7 @@ public final class ExoPlayerTest { ...@@ -11093,7 +11093,7 @@ public final class ExoPlayerTest {
} }
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException { throws ExoPlaybackException {
if (messageType == MSG_SET_WAKEUP_LISTENER) { if (messageType == MSG_SET_WAKEUP_LISTENER) {
assertThat(message).isNotNull(); assertThat(message).isNotNull();
...@@ -11116,7 +11116,7 @@ public final class ExoPlayerTest { ...@@ -11116,7 +11116,7 @@ public final class ExoPlayerTest {
public int messageCount; public int messageCount;
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) { public void handleMessage(@Renderer.MessageType int messageType, @Nullable Object message) {
messageCount++; messageCount++;
} }
} }
......
...@@ -24,6 +24,7 @@ import com.google.android.exoplayer2.PlaybackParameters; ...@@ -24,6 +24,7 @@ import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.PlayerMessage; import com.google.android.exoplayer2.PlayerMessage;
import com.google.android.exoplayer2.PlayerMessage.Target; import com.google.android.exoplayer2.PlayerMessage.Target;
import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.audio.AudioAttributes; import com.google.android.exoplayer2.audio.AudioAttributes;
...@@ -616,7 +617,8 @@ public final class ActionSchedule { ...@@ -616,7 +617,8 @@ public final class ActionSchedule {
SimpleExoPlayer player, int messageType, @Nullable Object message); SimpleExoPlayer player, int messageType, @Nullable Object message);
@Override @Override
public final void handleMessage(int messageType, @Nullable Object message) { public final void handleMessage(
@Renderer.MessageType int messageType, @Nullable Object message) {
handleMessage(Assertions.checkStateNotNull(player), messageType, message); handleMessage(Assertions.checkStateNotNull(player), messageType, message);
if (callback != null) { if (callback != null) {
hasArrived = true; hasArrived = true;
......
...@@ -95,12 +95,24 @@ public class FakeVideoRenderer extends FakeRenderer { ...@@ -95,12 +95,24 @@ public class FakeVideoRenderer extends FakeRenderer {
} }
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) { switch (messageType) {
case MSG_SET_VIDEO_OUTPUT: case MSG_SET_VIDEO_OUTPUT:
output = message; output = message;
renderedFirstFrameAfterReset = false; renderedFirstFrameAfterReset = false;
break; break;
case Renderer.MSG_SET_AUDIO_ATTRIBUTES:
case Renderer.MSG_SET_AUDIO_SESSION_ID:
case Renderer.MSG_SET_AUX_EFFECT_INFO:
case Renderer.MSG_SET_CAMERA_MOTION_LISTENER:
case Renderer.MSG_SET_CHANGE_FRAME_RATE_STRATEGY:
case Renderer.MSG_SET_SCALING_MODE:
case Renderer.MSG_SET_SKIP_SILENCE_ENABLED:
case Renderer.MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
case Renderer.MSG_SET_VOLUME:
case Renderer.MSG_SET_WAKEUP_LISTENER:
default: default:
super.handleMessage(messageType, message); super.handleMessage(messageType, message);
} }
......
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