diff --git a/spa/plugins/bluez5/bap-codec-lc3.c b/spa/plugins/bluez5/bap-codec-lc3.c index 1cffbedde..bd67c6366 100644 --- a/spa/plugins/bluez5/bap-codec-lc3.c +++ b/spa/plugins/bluez5/bap-codec-lc3.c @@ -123,7 +123,8 @@ static int codec_fill_caps(const struct media_codec *codec, uint32_t flags, uint16_t framelen[2] = {htobs(LC3_MIN_FRAME_BYTES), htobs(LC3_MAX_FRAME_BYTES)}; data += write_ltv_uint16(data, LC3_TYPE_FREQ, - htobs(LC3_FREQ_48KHZ | LC3_FREQ_24KHZ | LC3_FREQ_16KHZ | LC3_FREQ_8KHZ)); + htobs(LC3_FREQ_48KHZ | LC3_FREQ_32KHZ | \ + LC3_FREQ_24KHZ | LC3_FREQ_16KHZ | LC3_FREQ_8KHZ)); data += write_ltv_uint8(data, LC3_TYPE_DUR, LC3_DUR_ANY); data += write_ltv_uint8(data, LC3_TYPE_CHAN, LC3_CHAN_1 | LC3_CHAN_2); data += write_ltv(data, LC3_TYPE_FRAMELEN, framelen, sizeof(framelen)); @@ -266,6 +267,8 @@ static bool select_config(bap_lc3_t *conf, const struct pac_data *pac, struct sp uint16_t rate = ltv->value[0] + (ltv->value[1] << 8); if (rate & LC3_FREQ_48KHZ) conf->rate = LC3_CONFIG_FREQ_48KHZ; + else if (rate & LC3_FREQ_32KHZ) + conf->rate = LC3_CONFIG_FREQ_32KHZ; else if (rate & LC3_FREQ_24KHZ) conf->rate = LC3_CONFIG_FREQ_24KHZ; else if (rate & LC3_FREQ_16KHZ) @@ -346,6 +349,12 @@ static bool select_config(bap_lc3_t *conf, const struct pac_data *pac, struct sp else conf->framelen = 120; /* 48_4_2 */ break; + case LC3_CONFIG_FREQ_32KHZ: + if (conf->frame_duration == LC3_CONFIG_DURATION_7_5) + conf->framelen = 60; /* 32_1_2 */ + else + conf->framelen = 80; /* 32_2_2 */ + break; case LC3_CONFIG_FREQ_24KHZ: if (conf->frame_duration == LC3_CONFIG_DURATION_7_5) conf->framelen = 45; /* 24_1_2 */