bluez5: media-source: add option to control the target latency of the decode-buffer

On production systems, having a constant high latency is favored over
dynamically adjusting it in order to optimize for low latency,
because every time a dynamic adjustment happens, there's a glitch.

This adds an option to let the user specify the exact amount of latency
they want.
This commit is contained in:
George Kiagiadakis 2025-08-24 00:47:43 +03:00 committed by Wim Taymans
parent 5af8340183
commit e9b78f1c31
2 changed files with 12 additions and 0 deletions

View file

@ -141,6 +141,8 @@ struct impl {
unsigned int is_duplex:1;
unsigned int is_internal:1;
unsigned int decode_buffer_target;
unsigned int node_latency;
int fd;
@ -885,6 +887,8 @@ static int transport_start(struct impl *this)
this->quantum_limit, this->quantum_limit)) < 0)
return res;
spa_bt_decode_buffer_set_target_latency(&port->buffer, (int32_t) this->decode_buffer_target);
if (this->codec->kind == MEDIA_CODEC_HFP) {
/* 40 ms max buffer (on top of duration) */
spa_bt_decode_buffer_set_max_extra_latency(&port->buffer,
@ -2057,6 +2061,9 @@ impl_init(const struct spa_handle_factory *factory,
this->is_duplex = spa_atob(str);
if ((str = spa_dict_lookup(info, "api.bluez5.internal")) != NULL)
this->is_internal = spa_atob(str);
if ((str = spa_dict_lookup(info, "bluez5.decode-buffer.latency")) != NULL) {
spa_atou32(str, &this->decode_buffer_target, 0);
}
}
if (this->is_duplex) {