From 2ebc65728c161d2208000ef83d082731b38cc212 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 28 Sep 2018 11:25:22 +0200 Subject: [PATCH] link: also try to link controls --- src/pipewire/link.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/pipewire/link.c b/src/pipewire/link.c index 82ff01cec..2aaeb9f91 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -28,6 +28,7 @@ #include "private.h" #include "pipewire.h" #include "interfaces.h" +#include "control.h" #include "link.h" #include "work-queue.h" @@ -1234,6 +1235,26 @@ static bool pw_link_is_feedback(struct pw_node *output, struct pw_node *input) return false; } +static void try_link_controls(struct impl *impl, struct pw_port *port, struct pw_port *target) +{ + struct pw_control *cin, *cout; + int res; + + pw_log_debug("link %p: trying controls", impl); + spa_list_for_each(cout, &port->control_list[SPA_DIRECTION_OUTPUT], port_link) { + spa_list_for_each(cin, &target->control_list[SPA_DIRECTION_INPUT], port_link) { + if ((res = pw_control_link(cout, cin)) < 0) + pw_log_error("failed to link controls: %s", spa_strerror(res)); + } + } + spa_list_for_each(cin, &port->control_list[SPA_DIRECTION_INPUT], port_link) { + spa_list_for_each(cout, &target->control_list[SPA_DIRECTION_OUTPUT], port_link) { + if ((res = pw_control_link(cout, cin)) < 0) + pw_log_error("failed to link controls: %s", spa_strerror(res)); + } + } +} + struct pw_link *pw_link_new(struct pw_core *core, struct pw_port *output, struct pw_port *input, @@ -1322,6 +1343,8 @@ struct pw_link *pw_link_new(struct pw_core *core, spa_hook_list_call(&output->listener_list, struct pw_port_events, link_added, 0, this); spa_hook_list_call(&input->listener_list, struct pw_port_events, link_added, 0, this); + try_link_controls(impl, output, input); + return this; same_ports: