From 410c0492cc9c7888df7a5283c5ebf8d99bf9c0cc Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 11 Mar 2024 05:52:52 -0700 Subject: [PATCH] Force external surround sound flag if requested by device Some FireOS6 devices ask to force the external surround global flag and ignore any signals from the HDMI connection. This is the equivalent change of https://github.com/amzn/exoplayer-amazon-port/commit/e341944d1ee71eecc776425a0fcf3c9bc2669e46 PiperOrigin-RevId: 614634499 --- .../exoplayer/audio/AudioCapabilities.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 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 d01638473a..c85964986f 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 @@ -20,6 +20,7 @@ import static androidx.media3.common.util.Assertions.checkNotNull; import static java.lang.Math.max; import android.annotation.SuppressLint; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -90,6 +91,13 @@ public final class AudioCapabilities { /** Global settings key for devices that can specify external surround sound. */ private static final String EXTERNAL_SURROUND_SOUND_KEY = "external_surround_sound_enabled"; + /** + * Global setting key for devices that want to force the usage of {@link + * #EXTERNAL_SURROUND_SOUND_KEY} over other signals like HDMI. + */ + private static final String FORCE_EXTERNAL_SURROUND_SOUND_KEY = + "use_external_surround_sound_flag"; + /** * @deprecated Use {@link #getCapabilities(Context, AudioAttributes, AudioDeviceInfo)} instead. */ @@ -168,12 +176,17 @@ public final class AudioCapabilities { getAudioProfiles(Ints.toArray(supportedEncodings.build()), DEFAULT_MAX_CHANNEL_COUNT)); } - if (deviceMaySetExternalSurroundSoundGlobalSetting() - && Global.getInt(context.getContentResolver(), EXTERNAL_SURROUND_SOUND_KEY, 0) == 1) { + ContentResolver contentResolver = context.getContentResolver(); + boolean forceExternalSurroundSoundSetting = + Global.getInt(contentResolver, FORCE_EXTERNAL_SURROUND_SOUND_KEY, 0) == 1; + if ((forceExternalSurroundSoundSetting || deviceMaySetExternalSurroundSoundGlobalSetting()) + && Global.getInt(contentResolver, EXTERNAL_SURROUND_SOUND_KEY, 0) == 1) { supportedEncodings.addAll(EXTERNAL_SURROUND_SOUND_ENCODINGS); } - if (intent != null && intent.getIntExtra(AudioManager.EXTRA_AUDIO_PLUG_STATE, 0) == 1) { + if (intent != null + && !forceExternalSurroundSoundSetting + && intent.getIntExtra(AudioManager.EXTRA_AUDIO_PLUG_STATE, 0) == 1) { @Nullable int[] encodingsFromExtra = intent.getIntArrayExtra(AudioManager.EXTRA_ENCODINGS); if (encodingsFromExtra != null) { supportedEncodings.addAll(Ints.asList(encodingsFromExtra));