bluetooth: handle HFP codec list in any order

HFP HF peer can send +BAC= list of codecs in any order and pa only expects "1,2"
Fix this by actually parsing codec list elements while looking for "2" (mSBC)

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/537>
This commit is contained in:
Igor V. Kovalenko 2021-04-14 22:55:38 +03:00 committed by PulseAudio Marge Bot
parent 651e0db07b
commit e3fa937508

View file

@ -562,6 +562,9 @@ static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf
struct hfp_config *c = t->config;
int val;
char str[5];
const char *r;
size_t len;
const char *state;
/* first-time initialize selected codec to CVSD */
if (c->selected_codec == 0)
@ -576,10 +579,17 @@ static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf
return true;
} else if (sscanf(buf, "AT+BAC=%3s", str) == 1) {
if (strncmp(str, "1,2", 3) == 0)
c->support_msbc = true;
else
c->support_msbc = false;
c->support_msbc = false;
state = NULL;
/* check if codec id 2 (mSBC) is in the list of supported codecs */
while ((r = pa_split_in_place(str, ",", &len, &state))) {
if (len == 1 && r[0] == '2') {
c->support_msbc = true;
break;
}
}
c->support_codec_negotiation = true;