fix: property inspector - read sample rate from node.latency, not node.rate

- node.rate was a PipeWire internal flag (always 1), not sample rate
- Now reads from node.latency (format: '256/48000') for quantum + rate
- Fallback to clock.rate if latency not available
- Reuses rate field for ALSA period-size
- Shows 'Latency: 256 samples @ 48000 Hz' and 'Period Size: 256'
This commit is contained in:
joren
2026-03-30 00:36:40 +02:00
parent 130771d6dc
commit 4cc6f554af
2 changed files with 22 additions and 4 deletions

View File

@@ -125,8 +125,26 @@ static void on_node_info(void *data, const struct pw_node_info *info) {
str = spa_dict_lookup(info->props, "priority.driver");
if (str) nobj->node.priority = atoi(str);
str = spa_dict_lookup(info->props, "node.rate");
if (str) nobj->node.rate = (uint32_t)atoi(str);
// Latency info
str = spa_dict_lookup(info->props, "node.latency");
if (str) {
// Format: "256/48000" -> quantum=256 rate=48000
uint32_t q = 0, r = 0;
if (sscanf(str, "%u/%u", &q, &r) == 2) {
nobj->node.quantum = q;
nobj->node.sample_rate = r;
}
}
// Fallback: read clock rate from device props
if (nobj->node.sample_rate == 0) {
str = spa_dict_lookup(info->props, "clock.rate");
if (str) nobj->node.sample_rate = (uint32_t)atoi(str);
}
// ALSA latency
str = spa_dict_lookup(info->props, "api.alsa.period-size");
if (str) nobj->node.rate = (uint32_t)atoi(str); // reuse rate field for period-size
}
}