From d01a93b94e28d4b457d4e54d3078cc439ee7139c Mon Sep 17 00:00:00 2001 From: Cedric T Date: Fri, 5 May 2023 14:27:07 +0800 Subject: [PATCH] Add getAllSurroundEncodingsMaybeSupported() --- .../exoplayer/audio/AudioCapabilities.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/AudioCapabilities.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/AudioCapabilities.java index bbe0a3aae7..1a48062ca4 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/AudioCapabilities.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/AudioCapabilities.java @@ -42,6 +42,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.primitives.Ints; +import java.util.ArrayList; import java.util.Arrays; /** Represents the set of audio formats that a device is capable of playing. */ @@ -365,11 +366,7 @@ public final class AudioCapabilities { @DoNotInline public static int[] getDirectPlaybackSupportedEncodings() { ImmutableList.Builder supportedEncodingsListBuilder = ImmutableList.builder(); - for (int encoding : ALL_SURROUND_ENCODINGS_AND_MAX_CHANNELS.keySet()) { - // Skip ENCODING_DTS_UHD_P2 if API < 34. Otherwise setEncoding will crash. - if ((Util.SDK_INT < 34) && (encoding == C.ENCODING_DTS_UHD_P2)) { - continue; - } + for (int encoding : getAllSurroundEncodingsMaybeSupported()) { if (AudioTrack.isDirectPlaybackSupported( new AudioFormat.Builder() .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO) @@ -406,5 +403,20 @@ public final class AudioCapabilities { } return 0; } + + /** + * Returns an array list of surround encodings that maybe supported. + */ + private static ArrayList getAllSurroundEncodingsMaybeSupported() { + ArrayList encodings = new ArrayList<>(); + for (int encoding : ALL_SURROUND_ENCODINGS_AND_MAX_CHANNELS.keySet()) { + // AudioFormat.ENCODING_DTS_UHD_P2 is supported from API 34. + if (Util.SDK_INT < 34 && encoding == C.ENCODING_DTS_UHD_P2) { + continue; + } + encodings.add(encoding); + } + return encodings; + } } }