diff --git a/src/pipewire/context.c b/src/pipewire/context.c index a3551c2b8..f28369b30 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -1180,21 +1180,22 @@ again: running = !n->passive; } - /* calculate desired rate */ - target_rate = def_rate; - if (rate.denom != 0 && rate.num == 1) { - if (rates_contains(rates, n_rates, rate.denom)) - target_rate = rate.denom; - } if (force_rate) lock_rate = false; current_rate = n->current_rate.denom; - if (target_rate != current_rate && lock_rate) - target_rate = current_rate; - else if (target_rate != current_rate && !force_rate && - (n->info.state > PW_NODE_STATE_IDLE)) + if (lock_rate || + (!force_rate && + (n->info.state > PW_NODE_STATE_IDLE))) target_rate = current_rate; + else { + /* calculate desired rate */ + target_rate = def_rate; + if (rate.denom != 0 && rate.num == 1) { + if (rates_contains(rates, n_rates, rate.denom)) + target_rate = rate.denom; + } + } if (target_rate != current_rate) { pw_log_info("(%s-%u) state:%s new rate:%u->%u",