From d1207422e09f3a4d334a15bcb6ef0421ce2a1e0f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 21 Apr 2022 10:14:53 +0200 Subject: [PATCH] make NODE_WANT_DRIVER=true the default So that all nodes attach to some driver to be scheduled. For the virtual sink/sources this is a normal thing and we can remove the custom settings. For normal stream, this now makes it possible to link pw-play directly to pw-record and have it transport data. Fixes #1761 --- src/modules/module-example-sink.c | 3 --- src/modules/module-example-source.c | 3 --- src/modules/module-protocol-pulse/modules/module-pipe-sink.c | 2 -- .../module-protocol-pulse/modules/module-pipe-source.c | 2 -- src/modules/module-protocol-simple.c | 2 -- src/modules/module-pulse-tunnel.c | 3 --- src/modules/module-raop-sink.c | 3 --- src/modules/module-roc-sink.c | 2 -- src/modules/module-roc-source.c | 2 -- src/pipewire/filter.c | 5 +++++ src/pipewire/stream.c | 4 ++++ 11 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/modules/module-example-sink.c b/src/modules/module-example-sink.c index 9defba166..a0651b096 100644 --- a/src/modules/module-example-sink.c +++ b/src/modules/module-example-sink.c @@ -401,8 +401,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) impl->context = context; impl->work = pw_context_get_work_queue(context); - if (pw_properties_get(props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); @@ -424,7 +422,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) copy_props(impl, props, PW_KEY_NODE_NAME); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_GROUP); - copy_props(impl, props, PW_KEY_NODE_WANT_DRIVER); copy_props(impl, props, PW_KEY_NODE_LATENCY); copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_MEDIA_CLASS); diff --git a/src/modules/module-example-source.c b/src/modules/module-example-source.c index e1487a6c8..21d9d75bd 100644 --- a/src/modules/module-example-source.c +++ b/src/modules/module-example-source.c @@ -407,8 +407,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) impl->context = context; impl->work = pw_context_get_work_queue(context); - if (pw_properties_get(props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); @@ -430,7 +428,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) copy_props(impl, props, PW_KEY_NODE_NAME); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_GROUP); - copy_props(impl, props, PW_KEY_NODE_WANT_DRIVER); copy_props(impl, props, PW_KEY_NODE_LATENCY); copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_MEDIA_CLASS); diff --git a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c index 9a056ee3e..1c98c9841 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c @@ -298,8 +298,6 @@ struct module *create_module_pipe_sink(struct impl *impl, const char *argument) goto out; } - if (pw_properties_get(capture_props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(capture_props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(capture_props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(capture_props, PW_KEY_NODE_VIRTUAL, "true"); pw_properties_set(capture_props, PW_KEY_MEDIA_CLASS, "Audio/Sink"); diff --git a/src/modules/module-protocol-pulse/modules/module-pipe-source.c b/src/modules/module-protocol-pulse/modules/module-pipe-source.c index 66546aed6..60ca29b7c 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-source.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-source.c @@ -357,8 +357,6 @@ struct module *create_module_pipe_source(struct impl *impl, const char *argument goto out; } - if (pw_properties_get(playback_props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(playback_props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(playback_props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(playback_props, PW_KEY_NODE_VIRTUAL, "true"); pw_properties_set(playback_props, PW_KEY_MEDIA_CLASS, "Audio/Source"); diff --git a/src/modules/module-protocol-simple.c b/src/modules/module-protocol-simple.c index f674ec236..51dc17221 100644 --- a/src/modules/module-protocol-simple.c +++ b/src/modules/module-protocol-simple.c @@ -378,7 +378,6 @@ static int create_streams(struct impl *impl, struct client *client) if (impl->capture) { props = pw_properties_new( - PW_KEY_NODE_WANT_DRIVER, "true", PW_KEY_NODE_LATENCY, latency, PW_KEY_NODE_RATE, pw_properties_get(impl->props, PW_KEY_NODE_RATE), PW_KEY_NODE_TARGET, pw_properties_get(impl->props, "capture.node"), @@ -402,7 +401,6 @@ static int create_streams(struct impl *impl, struct client *client) } if (impl->playback) { props = pw_properties_new( - PW_KEY_NODE_WANT_DRIVER, "true", PW_KEY_NODE_LATENCY, latency, PW_KEY_NODE_RATE, pw_properties_get(impl->props, PW_KEY_NODE_RATE), PW_KEY_NODE_TARGET, pw_properties_get(impl->props, "playback.node"), diff --git a/src/modules/module-pulse-tunnel.c b/src/modules/module-pulse-tunnel.c index 7fe9e1331..4dbb6c324 100644 --- a/src/modules/module-pulse-tunnel.c +++ b/src/modules/module-pulse-tunnel.c @@ -889,8 +889,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) impl->latency_msec = pw_properties_get_uint32(props, "pulse.latency", DEFAULT_LATENCY_MSEC); - if (pw_properties_get(props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); if (pw_properties_get(props, PW_KEY_NODE_NETWORK) == NULL) @@ -911,7 +909,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) copy_props(impl, props, PW_KEY_NODE_NAME); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_GROUP); - copy_props(impl, props, PW_KEY_NODE_WANT_DRIVER); copy_props(impl, props, PW_KEY_NODE_LATENCY); copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_MEDIA_CLASS); diff --git a/src/modules/module-raop-sink.c b/src/modules/module-raop-sink.c index 847e231e9..6e6680e17 100644 --- a/src/modules/module-raop-sink.c +++ b/src/modules/module-raop-sink.c @@ -1579,8 +1579,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) impl->context = context; impl->loop = pw_context_get_main_loop(context); - if (pw_properties_get(props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); @@ -1605,7 +1603,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) copy_props(impl, props, PW_KEY_NODE_NAME); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_GROUP); - copy_props(impl, props, PW_KEY_NODE_WANT_DRIVER); copy_props(impl, props, PW_KEY_NODE_LATENCY); copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_MEDIA_CLASS); diff --git a/src/modules/module-roc-sink.c b/src/modules/module-roc-sink.c index 0da760e9d..f1de6110d 100644 --- a/src/modules/module-roc-sink.c +++ b/src/modules/module-roc-sink.c @@ -410,8 +410,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) pw_properties_set(capture_props, PW_KEY_NODE_NAME, "roc-sink"); if (pw_properties_get(capture_props, PW_KEY_NODE_DESCRIPTION) == NULL) pw_properties_set(capture_props, PW_KEY_NODE_DESCRIPTION, "ROC Sink"); - if (pw_properties_get(capture_props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(capture_props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(capture_props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(capture_props, PW_KEY_NODE_VIRTUAL, "true"); if (pw_properties_get(capture_props, PW_KEY_NODE_NETWORK) == NULL) diff --git a/src/modules/module-roc-source.c b/src/modules/module-roc-source.c index 33a80bf6f..9a14f9c44 100644 --- a/src/modules/module-roc-source.c +++ b/src/modules/module-roc-source.c @@ -455,8 +455,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) pw_properties_set(playback_props, PW_KEY_NODE_NAME, "roc-source"); if (pw_properties_get(playback_props, PW_KEY_NODE_DESCRIPTION) == NULL) pw_properties_set(playback_props, PW_KEY_NODE_DESCRIPTION, "ROC Source"); - if (pw_properties_get(playback_props, PW_KEY_NODE_WANT_DRIVER) == NULL) - pw_properties_set(playback_props, PW_KEY_NODE_WANT_DRIVER, "true"); if (pw_properties_get(playback_props, PW_KEY_NODE_VIRTUAL) == NULL) pw_properties_set(playback_props, PW_KEY_NODE_VIRTUAL, "true"); if (pw_properties_get(playback_props, PW_KEY_NODE_NETWORK) == NULL) diff --git a/src/pipewire/filter.c b/src/pipewire/filter.c index c44fa5f6d..23e6ff598 100644 --- a/src/pipewire/filter.c +++ b/src/pipewire/filter.c @@ -1513,6 +1513,11 @@ pw_filter_connect(struct pw_filter *filter, impl->disconnecting = false; filter_set_state(filter, PW_FILTER_STATE_CONNECTING, NULL); + if (flags & PW_FILTER_FLAG_DRIVER) + pw_properties_set(filter->properties, PW_KEY_NODE_DRIVER, "true"); + if ((pw_properties_get(filter->properties, PW_KEY_NODE_WANT_DRIVER) == NULL)) + pw_properties_set(filter->properties, PW_KEY_NODE_WANT_DRIVER, "true"); + if (filter->core == NULL) { filter->core = pw_context_connect(impl->context, pw_properties_copy(filter->properties), 0); diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index b5e87cb25..01a53c6d4 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -1834,6 +1834,9 @@ pw_stream_connect(struct pw_stream *stream, } if (flags & PW_STREAM_FLAG_DRIVER) pw_properties_set(stream->properties, PW_KEY_NODE_DRIVER, "true"); + if ((pw_properties_get(stream->properties, PW_KEY_NODE_WANT_DRIVER) == NULL)) + pw_properties_set(stream->properties, PW_KEY_NODE_WANT_DRIVER, "true"); + if (flags & PW_STREAM_FLAG_EXCLUSIVE) pw_properties_set(stream->properties, PW_KEY_NODE_EXCLUSIVE, "true"); if (flags & PW_STREAM_FLAG_DONT_RECONNECT) @@ -1852,6 +1855,7 @@ pw_stream_connect(struct pw_stream *stream, direction == PW_DIRECTION_INPUT ? "Input" : "Output", media_type ? media_type : get_media_class(impl)); } + if ((str = pw_properties_get(stream->properties, PW_KEY_FORMAT_DSP)) != NULL) pw_properties_set(impl->port_props, PW_KEY_FORMAT_DSP, str); else if (impl->media_type == SPA_MEDIA_TYPE_application &&