diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c index a4e0f9fdd..88331dcac 100644 --- a/src/examples/media-session/media-session.c +++ b/src/examples/media-session/media-session.c @@ -49,9 +49,6 @@ #define DEFAULT_IDLE_SECONDS 3 -#define MIN_QUANTUM_SIZE 64 -#define MAX_QUANTUM_SIZE 1024 - struct impl; struct monitor { diff --git a/src/pipewire/buffers.c b/src/pipewire/buffers.c index c55d47a51..79a4c5b33 100644 --- a/src/pipewire/buffers.c +++ b/src/pipewire/buffers.c @@ -94,8 +94,6 @@ static int alloc_buffers(struct pw_mempool *pool, } } - - for (i = 0; i < n_datas; i++) { struct spa_data *d = &datas[i]; diff --git a/src/pipewire/core.c b/src/pipewire/core.c index 47463ef0b..fd7eb1d48 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -1080,7 +1080,9 @@ static int collect_nodes(struct pw_node *driver) struct pw_node *n, *t; struct pw_port *p; struct pw_link *l; - uint32_t quantum = DEFAULT_QUANTUM; + uint32_t max_quantum = 0; + uint32_t min_quantum = 0; + uint32_t quantum; spa_list_consume(t, &driver->slave_list, slave_link) { spa_list_remove(&t->slave_link); @@ -1097,8 +1099,12 @@ static int collect_nodes(struct pw_node *driver) spa_list_remove(&n->sort_link); pw_node_set_driver(n, driver); - if (n->quantum_size > 0 && n->quantum_size < quantum) - quantum = n->quantum_size; + if (n->quantum_size > 0) { + if (min_quantum == 0 || n->quantum_size < min_quantum) + min_quantum = n->quantum_size; + if (n->quantum_size > max_quantum) + max_quantum = n->quantum_size; + } spa_list_for_each(p, &n->input_ports, link) { spa_list_for_each(l, &p->links, input_link) { @@ -1119,7 +1125,14 @@ static int collect_nodes(struct pw_node *driver) } } } - driver->quantum_current = SPA_MAX(quantum, MIN_QUANTUM); + + quantum = min_quantum; + if (quantum == 0) + quantum = DEFAULT_QUANTUM; + + /* for now, we try to limit the latency between min and default, We can + * go higher but we should really only do this when in power save mode */ + driver->quantum_current = SPA_CLAMP(quantum, MIN_QUANTUM, DEFAULT_QUANTUM); return 0; } diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 779278ce5..565d0a887 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -50,6 +50,7 @@ extern "C" { #define DEFAULT_QUANTUM 1024u #define MIN_QUANTUM 32u +#define MAX_QUANTUM 8192u #define MAX_PARAMS 32