From 118d689a08b1097a346f543111ea65deead56459 Mon Sep 17 00:00:00 2001 From: christosts Date: Tue, 14 Jun 2022 16:45:16 +0000 Subject: [PATCH] Spatializer: Assume linear channel count for E-AC3 JOC streams #minor-release PiperOrigin-RevId: 454884692 --- .../exoplayer/trackselection/DefaultTrackSelector.java | 9 ++++++++- 1 file changed, 8 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 fbd9f6e57d..e0020888e6 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 @@ -3685,10 +3685,17 @@ public class DefaultTrackSelector extends MappingTrackSelector { } public boolean canBeSpatialized(AudioAttributes audioAttributes, Format format) { + // For E-AC3 JOC, the format is object based. When the channel count is 16, this maps to 12 + // linear channels and the rest are used for objects. See + // https://github.com/google/ExoPlayer/pull/10322#discussion_r895265881 + int linearChannelCount = + MimeTypes.AUDIO_E_AC3_JOC.equals(format.sampleMimeType) && format.channelCount == 16 + ? 12 + : format.channelCount; AudioFormat.Builder builder = new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) - .setChannelMask(Util.getAudioTrackChannelConfig(format.channelCount)); + .setChannelMask(Util.getAudioTrackChannelConfig(linearChannelCount)); if (format.sampleRate != Format.NO_VALUE) { builder.setSampleRate(format.sampleRate); }