From 7447dedef40af36cda222f044ad55c1d555b0d07 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 19 Jul 2024 11:48:14 +0200 Subject: [PATCH] module-netjack2: implement netjack2.connect When netjack2.connect is true, make streams and set the autoconnect property on them. Otherwise, make sink/source as it was before. Fixes #4125 --- src/modules/module-netjack2-manager.c | 28 ++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/modules/module-netjack2-manager.c b/src/modules/module-netjack2-manager.c index 32b33f7d1..e79aee7c4 100644 --- a/src/modules/module-netjack2-manager.c +++ b/src/modules/module-netjack2-manager.c @@ -65,7 +65,7 @@ * - `net.ttl = `: TTL to use, default 1 * - `net.loop = `: loopback multicast, default false * - `netjack2.connect`: if jack ports should be connected automatically. Can also be - * placed per stream. + * placed per stream, default false. * - `netjack2.sample-rate`: the sample rate to use, default 48000 * - `netjack2.period-size`: the buffer size to use, default 1024 * - `netjack2.encoding`: the encoding, float|opus|int, default float @@ -133,6 +133,7 @@ PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); #define NETWORK_MAX_LATENCY 30 +#define DEFAULT_CONNECT false #define DEFAULT_SAMPLE_RATE 48000 #define DEFAULT_PERIOD_SIZE 1024 #define DEFAULT_ENCODING "float" @@ -148,7 +149,7 @@ PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); "( net.mtu= ) " \ "( net.ttl= ) " \ "( net.loop= ) " \ - "( netjack2.connect= ) " \ + "( netjack2.connect= ) " \ "( netjack2.sample-rate= ) "\ "( netjack2.period-size= ) " \ "( midi.ports= ) " \ @@ -1312,10 +1313,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) if (pw_properties_get(props, PW_KEY_NODE_LOCK_RATE) == NULL) pw_properties_set(props, PW_KEY_NODE_LOCK_RATE, "true"); - pw_properties_set(impl->sink_props, PW_KEY_MEDIA_CLASS, "Audio/Sink"); pw_properties_set(impl->sink_props, PW_KEY_NODE_NAME, "netjack2_manager_send"); - - pw_properties_set(impl->source_props, PW_KEY_MEDIA_CLASS, "Audio/Source"); pw_properties_set(impl->source_props, PW_KEY_NODE_NAME, "netjack2_manager_recv"); if ((str = pw_properties_get(props, "sink.props")) != NULL) @@ -1332,6 +1330,26 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) copy_props(impl, props, PW_KEY_NODE_LOCK_RATE); copy_props(impl, props, PW_KEY_AUDIO_CHANNELS); copy_props(impl, props, SPA_KEY_AUDIO_POSITION); + copy_props(impl, props, "netjack2.connect"); + + if (pw_properties_get_bool(impl->sink_props, "netjack2.connect", DEFAULT_CONNECT)) { + if (pw_properties_get(impl->sink_props, PW_KEY_NODE_AUTOCONNECT) == NULL) + pw_properties_set(impl->sink_props, PW_KEY_NODE_AUTOCONNECT, "true"); + if (pw_properties_get(impl->sink_props, PW_KEY_MEDIA_CLASS) == NULL) + pw_properties_set(impl->sink_props, PW_KEY_MEDIA_CLASS, "Stream/Input/Audio"); + } else { + if (pw_properties_get(impl->sink_props, PW_KEY_MEDIA_CLASS) == NULL) + pw_properties_set(impl->sink_props, PW_KEY_MEDIA_CLASS, "Audio/Sink"); + } + if (pw_properties_get_bool(impl->source_props, "netjack2.connect", DEFAULT_CONNECT)) { + if (pw_properties_get(impl->source_props, PW_KEY_NODE_AUTOCONNECT) == NULL) + pw_properties_set(impl->source_props, PW_KEY_NODE_AUTOCONNECT, "true"); + if (pw_properties_get(impl->source_props, PW_KEY_MEDIA_CLASS) == NULL) + pw_properties_set(impl->source_props, PW_KEY_MEDIA_CLASS, "Stream/Output/Audio"); + } else { + if (pw_properties_get(impl->source_props, PW_KEY_MEDIA_CLASS) == NULL) + pw_properties_set(impl->source_props, PW_KEY_MEDIA_CLASS, "Audio/Source"); + } impl->core = pw_context_get_object(impl->context, PW_TYPE_INTERFACE_Core); if (impl->core == NULL) {