Propagate audio session ID to MediaCodecVideoRenderer

Issue: #8190
PiperOrigin-RevId: 350357825
This commit is contained in:
olly 2021-01-06 16:29:28 +00:00 committed by Ian Baker
parent aa2beb080c
commit d1d28a418d
3 changed files with 24 additions and 15 deletions

View file

@ -160,13 +160,14 @@ public interface Renderer extends PlayerMessage.Target {
*/ */
int MSG_SET_SKIP_SILENCE_ENABLED = 101; int MSG_SET_SKIP_SILENCE_ENABLED = 101;
/** /**
* A type of a message that can be passed to an audio renderer via {@link * The type of a message that can be passed to audio and video renderers via {@link
* ExoPlayer#createMessage(Target)}. The message payload should be an {@link Integer} instance * ExoPlayer#createMessage(Target)}. The message payload should be an {@link Integer} instance
* representing the audio session ID that will be attached to the underlying audio track. * representing the audio session ID that will be attached to the underlying audio track. Video
* renderers that support tunneling will use the audio session ID when tunneling is enabled.
*/ */
int MSG_SET_AUDIO_SESSION_ID = 102; int MSG_SET_AUDIO_SESSION_ID = 102;
/** /**
* A type of a message that can be passed to a {@link Renderer} via {@link * The type of a message that can be passed to a {@link Renderer} via {@link
* ExoPlayer#createMessage(Target)}, to inform the renderer that it can schedule waking up another * ExoPlayer#createMessage(Target)}, to inform the renderer that it can schedule waking up another
* component. * component.
* *

View file

@ -962,6 +962,7 @@ public class SimpleExoPlayer extends BasePlayer
} }
this.audioSessionId = audioSessionId; this.audioSessionId = audioSessionId;
sendRendererMessage(C.TRACK_TYPE_AUDIO, Renderer.MSG_SET_AUDIO_SESSION_ID, audioSessionId); sendRendererMessage(C.TRACK_TYPE_AUDIO, Renderer.MSG_SET_AUDIO_SESSION_ID, audioSessionId);
sendRendererMessage(C.TRACK_TYPE_VIDEO, Renderer.MSG_SET_AUDIO_SESSION_ID, audioSessionId);
if (audioSessionId != C.AUDIO_SESSION_ID_UNSET) { if (audioSessionId != C.AUDIO_SESSION_ID_UNSET) {
notifyAudioSessionIdSet(); notifyAudioSessionIdSet();
} }

View file

@ -501,18 +501,25 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@Override @Override
public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException { public void handleMessage(int messageType, @Nullable Object message) throws ExoPlaybackException {
if (messageType == MSG_SET_SURFACE) { switch (messageType) {
setSurface((Surface) message); case MSG_SET_SURFACE:
} else if (messageType == MSG_SET_SCALING_MODE) { setSurface((Surface) message);
scalingMode = (Integer) message; break;
@Nullable MediaCodecAdapter codec = getCodec(); case MSG_SET_SCALING_MODE:
if (codec != null) { scalingMode = (Integer) message;
codec.setVideoScalingMode(scalingMode); @Nullable MediaCodecAdapter codec = getCodec();
} if (codec != null) {
} else if (messageType == MSG_SET_VIDEO_FRAME_METADATA_LISTENER) { codec.setVideoScalingMode(scalingMode);
frameMetadataListener = (VideoFrameMetadataListener) message; }
} else { break;
super.handleMessage(messageType, message); case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
frameMetadataListener = (VideoFrameMetadataListener) message;
break;
case MSG_SET_AUDIO_SESSION_ID:
// TODO: Set tunnelingAudioSessionId.
break;
default:
super.handleMessage(messageType, message);
} }
} }