From 9423e8d648848675dcbe7597ca9a2ce7363037f7 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 8 Sep 2021 11:51:09 +0200 Subject: [PATCH] impl-node: move quantum and rate When we move a node from one driver to another, move the quantum and rate if the target driver was idle so that we can mostly continue uninterupted until a quantum/rate change is calculated. --- src/pipewire/impl-node.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 94562a90c..37f094d02 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -789,7 +789,17 @@ int pw_impl_node_set_driver(struct pw_impl_node *node, struct pw_impl_node *driv remove_segment_owner(old, node->info.id); + if (old != node && old->driving && driver->info.state < PW_NODE_STATE_RUNNING) { + driver->rt.activation->position.clock.rate = old->rt.position->clock.rate; + driver->rt.activation->position.clock.duration = old->rt.position->clock.duration; + pw_log_info("move quantum:%"PRIu64" rate:%d (%s-%d -> %s-%d)", + driver->rt.activation->position.clock.duration, + driver->rt.activation->position.clock.rate.denom, + old->name, old->info.id, + driver->name, driver->info.id); + } node->driving = node->driver && driver == node; + pw_log_debug(NAME" %p: driver %p driving:%u", node, driver, node->driving); pw_log_info("(%s-%u) -> change driver (%s-%d -> %s-%d)",