Add open @IntDef for Renderer message types.

#exofixit

PiperOrigin-RevId: 395233622
This commit is contained in:
samrobinson 2021-09-07 14:26:53 +01:00 committed by Ian Baker
parent 093d117127
commit 11d2d7daf9
13 changed files with 102 additions and 16 deletions

View File

@ -196,7 +196,8 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
// PlayerMessage.Target implementation.
@Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
// Do nothing.
}

View File

@ -179,7 +179,8 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities
// PlayerMessage.Target implementation.
@Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
// Do nothing.
}

View File

@ -18,6 +18,7 @@ package com.google.android.exoplayer2;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.Renderer.MessageType;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Clock;
import java.util.concurrent.TimeoutException;
@ -39,7 +40,8 @@ public final class PlayerMessage {
* @throws ExoPlaybackException If an error occurred whilst handling the message. Should only be
* 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. */

View File

@ -74,6 +74,33 @@ public interface Renderer extends PlayerMessage.Target {
void onWakeup();
}
/**
* 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
* ExoPlayer#createMessage(Target)}. The message payload is normally a {@link Surface}, however

View File

@ -45,6 +45,7 @@ import android.view.TextureView;
import androidx.annotation.IntRange;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.google.android.exoplayer2.Renderer.MessageType;
import com.google.android.exoplayer2.analytics.AnalyticsCollector;
import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.audio.AudioAttributes;
@ -2206,11 +2207,15 @@ public class SimpleExoPlayer extends BasePlayer
private static final class FrameMetadataListener
implements VideoFrameMetadataListener, CameraMotionListener, PlayerMessage.Target {
@MessageType
public static final int MSG_SET_VIDEO_FRAME_METADATA_LISTENER =
Renderer.MSG_SET_VIDEO_FRAME_METADATA_LISTENER;
@MessageType
public static final int 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 CameraMotionListener cameraMotionListener;
@ -2218,7 +2223,7 @@ public class SimpleExoPlayer extends BasePlayer
@Nullable private CameraMotionListener internalCameraMotionListener;
@Override
public void handleMessage(int messageType, @Nullable Object message) {
public void handleMessage(@MessageType int messageType, @Nullable Object message) {
switch (messageType) {
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
videoFrameMetadataListener = (VideoFrameMetadataListener) message;
@ -2227,7 +2232,7 @@ public class SimpleExoPlayer extends BasePlayer
cameraMotionListener = (CameraMotionListener) message;
break;
case MSG_SET_SPHERICAL_SURFACE_VIEW:
SphericalGLSurfaceView surfaceView = (SphericalGLSurfaceView) message;
@Nullable SphericalGLSurfaceView surfaceView = (SphericalGLSurfaceView) message;
if (surfaceView == null) {
internalVideoFrameMetadataListener = null;
internalCameraMotionListener = null;
@ -2236,6 +2241,15 @@ public class SimpleExoPlayer extends BasePlayer
internalCameraMotionListener = surfaceView.getCameraMotionListener();
}
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:
break;
}

View File

@ -571,7 +571,8 @@ public abstract class DecoderAudioRenderer<
}
@Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) {
case MSG_SET_VOLUME:
audioSink.setVolume((Float) message);
@ -590,6 +591,12 @@ public abstract class DecoderAudioRenderer<
case MSG_SET_AUDIO_SESSION_ID:
audioSink.setAudioSessionId((Integer) message);
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:
super.handleMessage(messageType, message);
break;

View File

@ -15,6 +15,11 @@
*/
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.REUSE_RESULT_NO;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
@ -667,7 +672,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
}
@Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) {
case MSG_SET_VOLUME:
audioSink.setVolume((Float) message);
@ -689,6 +695,11 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
case MSG_SET_WAKEUP_LISTENER:
this.wakeupListener = (WakeupListener) message;
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:
super.handleMessage(messageType, message);
break;

View File

@ -247,7 +247,8 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
// PlayerMessage.Target implementation.
@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) {
setOutput(message);
} else if (messageType == MSG_SET_VIDEO_FRAME_METADATA_LISTENER) {

View File

@ -505,7 +505,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
}
@Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) {
case MSG_SET_VIDEO_OUTPUT:
setOutput(message);
@ -532,6 +533,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
}
}
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:
super.handleMessage(messageType, message);
}

View File

@ -64,7 +64,8 @@ public final class CameraMotionRenderer extends BaseRenderer {
}
@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) {
listener = (CameraMotionListener) message;
} else {

View File

@ -2573,7 +2573,7 @@ public final class ExoPlayerTest {
Renderer videoRenderer =
new FakeRenderer(C.TRACK_TYPE_VIDEO) {
@Override
public void handleMessage(int messageType, @Nullable Object message)
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
super.handleMessage(messageType, message);
rendererMessages.add(messageType);
@ -11093,7 +11093,7 @@ public final class ExoPlayerTest {
}
@Override
public void handleMessage(int messageType, @Nullable Object message)
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
if (messageType == MSG_SET_WAKEUP_LISTENER) {
assertThat(message).isNotNull();
@ -11116,7 +11116,7 @@ public final class ExoPlayerTest {
public int messageCount;
@Override
public void handleMessage(int messageType, @Nullable Object message) {
public void handleMessage(@Renderer.MessageType int messageType, @Nullable Object message) {
messageCount++;
}
}

View File

@ -24,6 +24,7 @@ import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.PlayerMessage;
import com.google.android.exoplayer2.PlayerMessage.Target;
import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.audio.AudioAttributes;
@ -616,7 +617,8 @@ public final class ActionSchedule {
SimpleExoPlayer player, int messageType, @Nullable Object message);
@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);
if (callback != null) {
hasArrived = true;

View File

@ -95,12 +95,24 @@ public class FakeVideoRenderer extends FakeRenderer {
}
@Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
public void handleMessage(@MessageType int messageType, @Nullable Object message)
throws ExoPlaybackException {
switch (messageType) {
case MSG_SET_VIDEO_OUTPUT:
output = message;
renderedFirstFrameAfterReset = false;
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:
super.handleMessage(messageType, message);
}