mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
context: scale quantum values to default rate
The quantum values are relative to the default clock rate. When an alternative rate is selected, scale the quantum values accordingly.
This commit is contained in:
parent
349324b9a6
commit
36fe2e9b9e
1 changed files with 10 additions and 3 deletions
|
|
@ -1081,12 +1081,14 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *driver
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void get_quantums(struct pw_context *context, uint32_t *def, uint32_t *min, uint32_t *max)
|
static inline void get_quantums(struct pw_context *context, uint32_t *def,
|
||||||
|
uint32_t *min, uint32_t *max, uint32_t *rate)
|
||||||
{
|
{
|
||||||
struct settings *s = &context->settings;
|
struct settings *s = &context->settings;
|
||||||
*def = s->clock_force_quantum == 0 ? s->clock_quantum : s->clock_force_quantum;
|
*def = s->clock_force_quantum == 0 ? s->clock_quantum : s->clock_force_quantum;
|
||||||
*min = s->clock_force_quantum == 0 ? s->clock_min_quantum : s->clock_force_quantum;
|
*min = s->clock_force_quantum == 0 ? s->clock_min_quantum : s->clock_force_quantum;
|
||||||
*max = s->clock_force_quantum == 0 ? s->clock_max_quantum : s->clock_force_quantum;
|
*max = s->clock_force_quantum == 0 ? s->clock_max_quantum : s->clock_force_quantum;
|
||||||
|
*rate = s->clock_force_quantum == 0 ? s->clock_rate : s->clock_force_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t *get_rates(struct pw_context *context, uint32_t *def, uint32_t *n_rates,
|
static inline uint32_t *get_rates(struct pw_context *context, uint32_t *def, uint32_t *n_rates,
|
||||||
|
|
@ -1144,7 +1146,7 @@ int pw_context_recalc_graph(struct pw_context *context, const char *reason)
|
||||||
{
|
{
|
||||||
struct impl *impl = SPA_CONTAINER_OF(context, struct impl, this);
|
struct impl *impl = SPA_CONTAINER_OF(context, struct impl, this);
|
||||||
struct pw_impl_node *n, *s, *target, *fallback;
|
struct pw_impl_node *n, *s, *target, *fallback;
|
||||||
uint32_t max_quantum, min_quantum, def_quantum;
|
uint32_t max_quantum, min_quantum, def_quantum, rate_quantum;
|
||||||
uint32_t *rates, n_rates, def_rate;
|
uint32_t *rates, n_rates, def_rate;
|
||||||
bool freewheel = false, force_rate;
|
bool freewheel = false, force_rate;
|
||||||
|
|
||||||
|
|
@ -1158,7 +1160,7 @@ int pw_context_recalc_graph(struct pw_context *context, const char *reason)
|
||||||
again:
|
again:
|
||||||
impl->recalc = true;
|
impl->recalc = true;
|
||||||
|
|
||||||
get_quantums(context, &def_quantum, &min_quantum, &max_quantum);
|
get_quantums(context, &def_quantum, &min_quantum, &max_quantum, &rate_quantum);
|
||||||
rates = get_rates(context, &def_rate, &n_rates, &force_rate);
|
rates = get_rates(context, &def_rate, &n_rates, &force_rate);
|
||||||
|
|
||||||
/* start from all drivers and group all nodes that are linked
|
/* start from all drivers and group all nodes that are linked
|
||||||
|
|
@ -1307,6 +1309,11 @@ again:
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rate_quantum != 0 && current_rate != rate_quantum) {
|
||||||
|
def_quantum = def_quantum * current_rate / rate_quantum;
|
||||||
|
min_quantum = min_quantum * current_rate / rate_quantum;
|
||||||
|
max_quantum = max_quantum * current_rate / rate_quantum;
|
||||||
|
}
|
||||||
|
|
||||||
/* calculate desired quantum */
|
/* calculate desired quantum */
|
||||||
if (max_latency.denom != 0) {
|
if (max_latency.denom != 0) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue