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 e9fba20498..c15c7247d2 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 @@ -157,10 +157,7 @@ public final class AudioCapabilities { ImmutableSet.Builder supportedEncodings = new ImmutableSet.Builder<>(); supportedEncodings.add(C.ENCODING_PCM_16BIT); - if (deviceMaySetExternalSurroundSoundGlobalSetting() - && Global.getInt(context.getContentResolver(), EXTERNAL_SURROUND_SOUND_KEY, 0) == 1) { - supportedEncodings.addAll(EXTERNAL_SURROUND_SOUND_ENCODINGS); - } + // AudioTrack.isDirectPlaybackSupported returns true for encodings that are supported for audio // offload, as well as for encodings we want to list for passthrough mode. Therefore we only use // it on TV and automotive devices, which generally shouldn't support audio offload for surround @@ -171,6 +168,11 @@ 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) { + supportedEncodings.addAll(EXTERNAL_SURROUND_SOUND_ENCODINGS); + } + if (intent != null && intent.getIntExtra(AudioManager.EXTRA_AUDIO_PLUG_STATE, 0) == 1) { @Nullable int[] encodingsFromExtra = intent.getIntArrayExtra(AudioManager.EXTRA_ENCODINGS); if (encodingsFromExtra != null) {