diff --git a/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp b/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp index 0bcafa334f..e5cf53c153 100644 --- a/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp +++ b/bluetooth/audio/utils/aidl_session/BluetoothAudioSession.cpp @@ -588,15 +588,32 @@ std::vector BluetoothAudioSession::GetSupportedLatencyModes() { << " has NO session"; return std::vector(); } - if (low_latency_allowed_) return latency_modes_; - std::vector modes; - for (LatencyMode mode : latency_modes_) { - if (mode == LatencyMode::LOW_LATENCY) - // ignore those low latency mode if Bluetooth stack doesn't allow - continue; - modes.push_back(mode); + + std::vector supported_latency_modes; + if (session_type_ == + SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH) { + for (LatencyMode mode : latency_modes_) { + if (mode == LatencyMode::LOW_LATENCY) { + // LOW_LATENCY is not supported for LE_HARDWARE_OFFLOAD_ENC sessions + continue; + } + supported_latency_modes.push_back(mode); + } + } else { + for (LatencyMode mode : latency_modes_) { + if (!low_latency_allowed_ && mode == LatencyMode::LOW_LATENCY) { + // ignore LOW_LATENCY mode if Bluetooth stack doesn't allow + continue; + } + if (mode == LatencyMode::DYNAMIC_SPATIAL_AUDIO_SOFTWARE || + mode == LatencyMode::DYNAMIC_SPATIAL_AUDIO_HARDWARE) { + // DSA_SW and DSA_HW only supported for LE_HARDWARE_OFFLOAD_ENC sessions + continue; + } + supported_latency_modes.push_back(mode); + } } - return modes; + return supported_latency_modes; } void BluetoothAudioSession::SetLatencyMode(const LatencyMode& latency_mode) {