From 2f8ce053b96eb5f542eb23b2a96deef1d69b7da0 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Wed, 17 Apr 2024 03:00:55 -0700 Subject: [PATCH] Avoid crash when testing spatialization of high channel count audio For audio with more than 12 channels, no channel mask was determined, which meant that the code to check spatializability would throw because of creating an invalid audio format. Return early if the channel mask was invalid instead (and assume spatialization isn't possible). PiperOrigin-RevId: 625618683 --- .../exoplayer/trackselection/DefaultTrackSelector.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java index dc7c10f0c9..415e6fbc6c 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java @@ -4249,10 +4249,14 @@ public class DefaultTrackSelector extends MappingTrackSelector MimeTypes.AUDIO_E_AC3_JOC.equals(format.sampleMimeType) && format.channelCount == 16 ? 12 : format.channelCount; + int channelConfig = Util.getAudioTrackChannelConfig(linearChannelCount); + if (channelConfig == AudioFormat.CHANNEL_INVALID) { + return false; + } AudioFormat.Builder builder = new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) - .setChannelMask(Util.getAudioTrackChannelConfig(linearChannelCount)); + .setChannelMask(channelConfig); if (format.sampleRate != Format.NO_VALUE) { builder.setSampleRate(format.sampleRate); }