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
This commit is contained in:
Wim Taymans 2022-04-21 10:14:53 +02:00
parent 9a5fbd26df
commit d1207422e0
11 changed files with 9 additions and 22 deletions

View file

@ -401,8 +401,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
impl->context = context; impl->context = context;
impl->work = pw_context_get_work_queue(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) if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL)
pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); 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_NAME);
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
copy_props(impl, props, PW_KEY_NODE_GROUP); 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_LATENCY);
copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
copy_props(impl, props, PW_KEY_MEDIA_CLASS); copy_props(impl, props, PW_KEY_MEDIA_CLASS);

View file

@ -407,8 +407,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
impl->context = context; impl->context = context;
impl->work = pw_context_get_work_queue(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) if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL)
pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); 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_NAME);
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
copy_props(impl, props, PW_KEY_NODE_GROUP); 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_LATENCY);
copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
copy_props(impl, props, PW_KEY_MEDIA_CLASS); copy_props(impl, props, PW_KEY_MEDIA_CLASS);

View file

@ -298,8 +298,6 @@ struct module *create_module_pipe_sink(struct impl *impl, const char *argument)
goto out; 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) 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_NODE_VIRTUAL, "true");
pw_properties_set(capture_props, PW_KEY_MEDIA_CLASS, "Audio/Sink"); pw_properties_set(capture_props, PW_KEY_MEDIA_CLASS, "Audio/Sink");

View file

@ -357,8 +357,6 @@ struct module *create_module_pipe_source(struct impl *impl, const char *argument
goto out; 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) 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_NODE_VIRTUAL, "true");
pw_properties_set(playback_props, PW_KEY_MEDIA_CLASS, "Audio/Source"); pw_properties_set(playback_props, PW_KEY_MEDIA_CLASS, "Audio/Source");

View file

@ -378,7 +378,6 @@ static int create_streams(struct impl *impl, struct client *client)
if (impl->capture) { if (impl->capture) {
props = pw_properties_new( props = pw_properties_new(
PW_KEY_NODE_WANT_DRIVER, "true",
PW_KEY_NODE_LATENCY, latency, PW_KEY_NODE_LATENCY, latency,
PW_KEY_NODE_RATE, pw_properties_get(impl->props, PW_KEY_NODE_RATE), PW_KEY_NODE_RATE, pw_properties_get(impl->props, PW_KEY_NODE_RATE),
PW_KEY_NODE_TARGET, pw_properties_get(impl->props, "capture.node"), 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) { if (impl->playback) {
props = pw_properties_new( props = pw_properties_new(
PW_KEY_NODE_WANT_DRIVER, "true",
PW_KEY_NODE_LATENCY, latency, PW_KEY_NODE_LATENCY, latency,
PW_KEY_NODE_RATE, pw_properties_get(impl->props, PW_KEY_NODE_RATE), PW_KEY_NODE_RATE, pw_properties_get(impl->props, PW_KEY_NODE_RATE),
PW_KEY_NODE_TARGET, pw_properties_get(impl->props, "playback.node"), PW_KEY_NODE_TARGET, pw_properties_get(impl->props, "playback.node"),

View file

@ -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); 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) if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL)
pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true");
if (pw_properties_get(props, PW_KEY_NODE_NETWORK) == NULL) 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_NAME);
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
copy_props(impl, props, PW_KEY_NODE_GROUP); 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_LATENCY);
copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
copy_props(impl, props, PW_KEY_MEDIA_CLASS); copy_props(impl, props, PW_KEY_MEDIA_CLASS);

View file

@ -1579,8 +1579,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
impl->context = context; impl->context = context;
impl->loop = pw_context_get_main_loop(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) if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL)
pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); 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_NAME);
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION); copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
copy_props(impl, props, PW_KEY_NODE_GROUP); 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_LATENCY);
copy_props(impl, props, PW_KEY_NODE_VIRTUAL); copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
copy_props(impl, props, PW_KEY_MEDIA_CLASS); copy_props(impl, props, PW_KEY_MEDIA_CLASS);

View file

@ -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"); pw_properties_set(capture_props, PW_KEY_NODE_NAME, "roc-sink");
if (pw_properties_get(capture_props, PW_KEY_NODE_DESCRIPTION) == NULL) if (pw_properties_get(capture_props, PW_KEY_NODE_DESCRIPTION) == NULL)
pw_properties_set(capture_props, PW_KEY_NODE_DESCRIPTION, "ROC Sink"); 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) 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_NODE_VIRTUAL, "true");
if (pw_properties_get(capture_props, PW_KEY_NODE_NETWORK) == NULL) if (pw_properties_get(capture_props, PW_KEY_NODE_NETWORK) == NULL)

View file

@ -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"); pw_properties_set(playback_props, PW_KEY_NODE_NAME, "roc-source");
if (pw_properties_get(playback_props, PW_KEY_NODE_DESCRIPTION) == NULL) if (pw_properties_get(playback_props, PW_KEY_NODE_DESCRIPTION) == NULL)
pw_properties_set(playback_props, PW_KEY_NODE_DESCRIPTION, "ROC Source"); 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) 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_NODE_VIRTUAL, "true");
if (pw_properties_get(playback_props, PW_KEY_NODE_NETWORK) == NULL) if (pw_properties_get(playback_props, PW_KEY_NODE_NETWORK) == NULL)

View file

@ -1513,6 +1513,11 @@ pw_filter_connect(struct pw_filter *filter,
impl->disconnecting = false; impl->disconnecting = false;
filter_set_state(filter, PW_FILTER_STATE_CONNECTING, NULL); 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) { if (filter->core == NULL) {
filter->core = pw_context_connect(impl->context, filter->core = pw_context_connect(impl->context,
pw_properties_copy(filter->properties), 0); pw_properties_copy(filter->properties), 0);

View file

@ -1834,6 +1834,9 @@ pw_stream_connect(struct pw_stream *stream,
} }
if (flags & PW_STREAM_FLAG_DRIVER) if (flags & PW_STREAM_FLAG_DRIVER)
pw_properties_set(stream->properties, PW_KEY_NODE_DRIVER, "true"); 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) if (flags & PW_STREAM_FLAG_EXCLUSIVE)
pw_properties_set(stream->properties, PW_KEY_NODE_EXCLUSIVE, "true"); pw_properties_set(stream->properties, PW_KEY_NODE_EXCLUSIVE, "true");
if (flags & PW_STREAM_FLAG_DONT_RECONNECT) if (flags & PW_STREAM_FLAG_DONT_RECONNECT)
@ -1852,6 +1855,7 @@ pw_stream_connect(struct pw_stream *stream,
direction == PW_DIRECTION_INPUT ? "Input" : "Output", direction == PW_DIRECTION_INPUT ? "Input" : "Output",
media_type ? media_type : get_media_class(impl)); media_type ? media_type : get_media_class(impl));
} }
if ((str = pw_properties_get(stream->properties, PW_KEY_FORMAT_DSP)) != NULL) if ((str = pw_properties_get(stream->properties, PW_KEY_FORMAT_DSP)) != NULL)
pw_properties_set(impl->port_props, PW_KEY_FORMAT_DSP, str); pw_properties_set(impl->port_props, PW_KEY_FORMAT_DSP, str);
else if (impl->media_type == SPA_MEDIA_TYPE_application && else if (impl->media_type == SPA_MEDIA_TYPE_application &&