core: explicitly calculate min and max quantum

Just clamp to default for now until we can implement power save mode.
This commit is contained in:
Wim Taymans 2019-10-24 12:19:21 +02:00
parent b74080ea55
commit 12fb58add1
4 changed files with 18 additions and 9 deletions

View file

@ -49,9 +49,6 @@
#define DEFAULT_IDLE_SECONDS 3
#define MIN_QUANTUM_SIZE 64
#define MAX_QUANTUM_SIZE 1024
struct impl;
struct monitor {

View file

@ -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];

View file

@ -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;
}

View file

@ -50,6 +50,7 @@ extern "C" {
#define DEFAULT_QUANTUM 1024u
#define MIN_QUANTUM 32u
#define MAX_QUANTUM 8192u
#define MAX_PARAMS 32