diff --git a/doc/input-filter.py b/doc/input-filter.py index 2b64a2d65..9a0101fa6 100755 --- a/doc/input-filter.py +++ b/doc/input-filter.py @@ -5,7 +5,7 @@ Doxygen input filter that: - adds \privatesection to all files - removes macros -- parses pulse_module_options and substitutes it into @pulse_module_options@ +- parses module_args valid_args[] and substitutes it into @pulse_module_options@ This is used for .c files, and causes Doxygen to not include any symbols from them, unless they also appeared in a header file. @@ -25,22 +25,50 @@ def main(): text = re.sub("#define.*", "", text) if "@pulse_module_options@" in text: - m = re.search( - r"static const char[* ]*const pulse_module_options\s+=\s+(.*?\")\s*;\s*$", + type_names = { + "MODULE_TYPE_STRING": "string", + "MODULE_TYPE_STRINGV": "stringv", + "MODULE_TYPE_STRINGE": "stringe", + "MODULE_TYPE_INT": "int", + "MODULE_TYPE_BOOL": "bool", + "MODULE_TYPE_USEC": "usec", + "MODULE_TYPE_MSEC": "msec", + "MODULE_TYPE_PROPS": "proplist", + "MODULE_TYPE_FORMAT": "format", + "MODULE_TYPE_CHMAP": "chmap", + } + res = [] + args_match = re.search( + r'static const struct module_args valid_args\[\]\s*=\s*\{(.*?)\{\s*NULL', text, - re.M | re.S, + re.S, ) - if m: - res = [] - for line in m.group(1).splitlines(): - m = re.match(r"\s*\"\s*([a-z0-9_]+)\s*=\s*(.*)\"\s*$", line) - if m: - name = m.group(1) - value = m.group(2).strip().strip("<>") - res.append(f"- `{name}`: {value}") + args_text = args_match.group(1) if args_match else "" + for m in re.finditer( + r'{\s*"([a-z0-9_]+)"\s*,\s*"([^"]*)"\s*,\s*([^,]*),\s*([^,]*),\s*([^,}]*)', + args_text, + ): + name = m.group(1) + desc = m.group(2) + flags = m.group(3).strip() + typ = m.group(4).strip() + defval = m.group(5).strip().strip('"') + parts = [] + typ = type_names.get(typ, "") + if typ: + parts.append(typ) + if defval and defval != "NULL": + parts.append(f"default {defval}") + parts.append(desc) + entry = f"- `{name}`: {', '.join(parts)}" + if "MODULE_ARG_MANDATORY" in flags: + entry += " *(mandatory)*" + if "MODULE_ARG_ENOTIMPL" in flags: + entry += " *(not implemented)*" + res.append(entry) - res = "\n * ".join(res) - text = text.replace("@pulse_module_options@", res) + res = "\n * ".join(res) + text = text.replace("@pulse_module_options@", res) if os.path.basename(fn).startswith("module-") and fn.endswith(".c"): text = re.sub(r"^ \* ##", r" * #", text, flags=re.M) diff --git a/src/modules/module-protocol-pulse/message-handler.c b/src/modules/module-protocol-pulse/message-handler.c index 2ef14b8d8..33f2e3124 100644 --- a/src/modules/module-protocol-pulse/message-handler.c +++ b/src/modules/module-protocol-pulse/message-handler.c @@ -292,8 +292,29 @@ static int core_object_message_handler(struct client *client, struct pw_manager_ fprintf(response, "Description: %s\n", s); if ((s = spa_dict_lookup(i->properties, PW_KEY_MODULE_AUTHOR))) fprintf(response, "Author: %s\n", s); - if ((s = spa_dict_lookup(i->properties, PW_KEY_MODULE_USAGE))) - fprintf(response, "Usage: %s\n", s); + if (i->valid_args) { + const struct module_args *a; + fprintf(response, "Usage:"); + for (a = i->valid_args; a->key; a++) { + fprintf(response, " %s=<%s", a->key, a->type); + if (a->def) + fprintf(response, ", default %s", a->def); + fprintf(response, ", %s", a->description); + if (a->vals) { + const char **v; + fprintf(response, " ["); + for (v = a->vals; *v; v++) + fprintf(response, "%s%s", v == a->vals ? "" : "|", *v); + fprintf(response, "]"); + } + if (a->flags & MODULE_ARG_MANDATORY) + fprintf(response, " (mandatory)"); + if (a->flags & MODULE_ARG_ENOTIMPL) + fprintf(response, " (not implemented)"); + fprintf(response, ">"); + } + fprintf(response, "\n"); + } fprintf(response, "Load Once: %s\n", i->load_once ? "Yes": "No"); if ((s = spa_dict_lookup(i->properties, PW_KEY_MODULE_DEPRECATED))) fprintf(response, "Warning, deprecated: %s\n", s); diff --git a/src/modules/module-protocol-pulse/module.h b/src/modules/module-protocol-pulse/module.h index 9f36402cf..27aade2a4 100644 --- a/src/modules/module-protocol-pulse/module.h +++ b/src/modules/module-protocol-pulse/module.h @@ -21,7 +21,22 @@ struct module_args { const char *key; const char *description; #define MODULE_ARG_MANDATORY (1u<<0) +#define MODULE_ARG_ENOTIMPL (1u<<1) uint32_t flags; +#define MODULE_TYPE_NONE "" +#define MODULE_TYPE_STRING "string" +#define MODULE_TYPE_STRINGV "stringv" +#define MODULE_TYPE_STRINGE "stringe" +#define MODULE_TYPE_USEC "usec" +#define MODULE_TYPE_MSEC "msec" +#define MODULE_TYPE_INT "int" +#define MODULE_TYPE_BOOL "bool" +#define MODULE_TYPE_PROPS "proplist" +#define MODULE_TYPE_FORMAT "format" +#define MODULE_TYPE_CHMAP "chmap" + const char *type; + const char *def; + const char **vals; }; struct module_info { diff --git a/src/modules/module-protocol-pulse/modules/module-alsa-sink.c b/src/modules/module-protocol-pulse/modules/module-alsa-sink.c index 058324012..7fa254261 100644 --- a/src/modules/module-protocol-pulse/modules/module-alsa-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-alsa-sink.c @@ -18,57 +18,32 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "name= " - "sink_name= " - "sink_properties= " - "namereg_fail= " - "device= " - "device_id= " - "format= " - "rate= " - "alternate_rate= " - "channels= " - "channel_map= " - "fragments= " - "fragment_size= " - "mmap= " - "tsched= " - "tsched_buffer_size= " - "tsched_buffer_watermark= " - "ignore_dB= " - "control= " - "rewind_safeguard= " - "deferred_volume= " - "deferred_volume_safety_margin= " - "deferred_volume_extra_delay= " - "fixed_latency_range= "; static const struct module_args valid_args[] = { - { "name", "name of the sink, to be prefixed", }, - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "namereg_fail", "when false attempt to synthesise new sink_name if it is already taken", }, - { "device", "ALSA device", }, - { "device_id", "ALSA card index", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "alternate_rate", "alternate sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "fragments", "number of fragments", }, - { "fragment_size", "fragment size", }, - { "mmap", "enable memory mapping?", }, - { "tsched", "enable system timer based scheduling mode?", }, - { "tsched_buffer_size", "buffer size when using timer based scheduling", }, - { "tsched_buffer_watermark", "lower fill watermark", }, - { "ignore_dB", "ignore dB information from the device?", }, - { "control", "name of mixer control, or name and index separated by a comma", }, - { "rewind_safeguard", "number of bytes that cannot be rewound", }, - { "deferred_volume", "Synchronize software and hardware volume changes to avoid momentary jumps?", }, - { "deferred_volume_safety_margin", "usec adjustment depending on volume direction", }, - { "deferred_volume_extra_delay", "usec adjustment to HW volume changes", }, - { "fixed_latency_range", "disable latency range changes on underrun?", }, + { "name", "name of the sink, to be prefixed", 0, MODULE_TYPE_STRING, NULL }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "namereg_fail", "when false attempt to synthesise new sink_name if it is already taken", 0, MODULE_TYPE_BOOL, NULL }, + { "device", "ALSA device", 0, MODULE_TYPE_STRING, "default" }, + { "device_id", "ALSA card index", 0, MODULE_TYPE_STRING, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "alternate_rate", "alternate sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "fragments", "number of fragments", 0, MODULE_TYPE_INT, NULL }, + { "fragment_size", "fragment size", 0, MODULE_TYPE_INT, NULL }, + { "mmap", "enable memory mapping", 0, MODULE_TYPE_BOOL, NULL }, + { "tsched", "enable system timer based scheduling mode", 0, MODULE_TYPE_BOOL, NULL }, + { "tsched_buffer_size", "buffer size when using timer based scheduling", 0, MODULE_TYPE_INT, NULL }, + { "tsched_buffer_watermark", "lower fill watermark", 0, MODULE_TYPE_INT, NULL }, + { "ignore_dB", "ignore dB information from the device", 0, MODULE_TYPE_BOOL, NULL }, + { "control", "name of mixer control, or name and index separated by a comma", 0, MODULE_TYPE_STRING, NULL }, + { "rewind_safeguard", "number of bytes that cannot be rewound", 0, MODULE_TYPE_INT, NULL }, + { "deferred_volume", "Synchronize software and hardware volume changes to avoid momentary jumps", 0, MODULE_TYPE_BOOL, NULL }, + { "deferred_volume_safety_margin", "adjustment depending on volume direction", 0, MODULE_TYPE_USEC, NULL }, + { "deferred_volume_extra_delay", "adjustment to HW volume changes", 0, MODULE_TYPE_USEC, NULL }, + { "fixed_latency_range", "disable latency range changes on underrun", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -196,7 +171,6 @@ static int module_alsa_sink_unload(struct module *module) static const struct spa_dict_item module_alsa_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "An ALSA sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-alsa-source.c b/src/modules/module-protocol-pulse/modules/module-alsa-source.c index ef0af6439..b90befeb1 100644 --- a/src/modules/module-protocol-pulse/modules/module-alsa-source.c +++ b/src/modules/module-protocol-pulse/modules/module-alsa-source.c @@ -18,57 +18,32 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "name= " - "source_name= " - "source_properties= " - "namereg_fail= " - "device= " - "device_id= " - "format= " - "rate= " - "alternate_rate= " - "channels= " - "channel_map= " - "fragments= " - "fragment_size= " - "mmap= " - "tsched= " - "tsched_buffer_size= " - "tsched_buffer_watermark= " - "ignore_dB= " - "control= " - "rewind_safeguard= " - "deferred_volume= " - "deferred_volume_safety_margin= " - "deferred_volume_extra_delay= " - "fixed_latency_range="; static const struct module_args valid_args[] = { - { "name", "name of the source, to be prefixed", }, - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "namereg_fail", "when false attempt to synthesise new source_name if it is already taken", }, - { "device", "ALSA device", }, - { "device_id", "ALSA card index", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "alternate_rate", "alternate sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "fragments", "number of fragments", }, - { "fragment_size", "fragment size", }, - { "mmap", "enable memory mapping?", }, - { "tsched", "enable system timer based scheduling mode?", }, - { "tsched_buffer_size", "buffer size when using timer based scheduling", }, - { "tsched_buffer_watermark", "lower fill watermark", }, - { "ignore_dB", "ignore dB information from the device?", }, - { "control", "name of mixer control, or name and index separated by a comma", }, - { "rewind_safeguard", "number of bytes that cannot be rewound", }, - { "deferred_volume", "Synchronize software and hardware volume changes to avoid momentary jumps?", }, - { "deferred_volume_safety_margin", "usec adjustment depending on volume direction", }, - { "deferred_volume_extra_delay", "usec adjustment to HW volume changes", }, - { "fixed_latency_range", "disable latency range changes on underrun?", }, + { "name", "name of the source, to be prefixed", 0, MODULE_TYPE_STRING, NULL }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, NULL }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "namereg_fail", "when false attempt to synthesise new source_name if it is already taken", 0, MODULE_TYPE_BOOL, NULL }, + { "device", "ALSA device", 0, MODULE_TYPE_STRING, "default" }, + { "device_id", "ALSA card index", 0, MODULE_TYPE_STRING, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "alternate_rate", "alternate sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "fragments", "number of fragments", 0, MODULE_TYPE_INT, NULL }, + { "fragment_size", "fragment size", 0, MODULE_TYPE_INT, NULL }, + { "mmap", "enable memory mapping", 0, MODULE_TYPE_BOOL, NULL }, + { "tsched", "enable system timer based scheduling mode", 0, MODULE_TYPE_BOOL, NULL }, + { "tsched_buffer_size", "buffer size when using timer based scheduling", 0, MODULE_TYPE_INT, NULL }, + { "tsched_buffer_watermark", "lower fill watermark", 0, MODULE_TYPE_INT, NULL }, + { "ignore_dB", "ignore dB information from the device", 0, MODULE_TYPE_BOOL, NULL }, + { "control", "name of mixer control, or name and index separated by a comma", 0, MODULE_TYPE_STRING, NULL }, + { "rewind_safeguard", "number of bytes that cannot be rewound", 0, MODULE_TYPE_INT, NULL }, + { "deferred_volume", "Synchronize software and hardware volume changes to avoid momentary jumps", 0, MODULE_TYPE_BOOL, NULL }, + { "deferred_volume_safety_margin", "adjustment depending on volume direction", 0, MODULE_TYPE_USEC, NULL }, + { "deferred_volume_extra_delay", "adjustment to HW volume changes", 0, MODULE_TYPE_USEC, NULL }, + { "fixed_latency_range", "disable latency range changes on underrun", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -196,7 +171,6 @@ static int module_alsa_source_unload(struct module *module) static const struct spa_dict_item module_alsa_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "An ALSA source" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-always-sink.c b/src/modules/module-protocol-pulse/modules/module-always-sink.c index b07155288..487b4a96d 100644 --- a/src/modules/module-protocol-pulse/modules/module-always-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-always-sink.c @@ -19,10 +19,9 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = "sink_name="; static const struct module_args valid_args[] = { - { "sink_name", "name of sink", }, + { "sink_name", "name of sink", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -98,7 +97,6 @@ static int module_always_sink_unload(struct module *module) static const struct spa_dict_item module_always_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Pauli Virtanen " }, { PW_KEY_MODULE_DESCRIPTION, "Always keeps at least one sink loaded even if it's a null one" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-combine-sink.c b/src/modules/module-protocol-pulse/modules/module-combine-sink.c index 9b4dc236c..701eae828 100644 --- a/src/modules/module-protocol-pulse/modules/module-combine-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-combine-sink.c @@ -29,25 +29,16 @@ * \ref page_module_combine_stream "libpipewire-module-combine-stream" */ -static const char *const pulse_module_options = - "sink_name= " - "sink_properties= " - "sinks= " - "rate= " - "channels= " - "channel_map= " - "remix= " - "latency_compensate= "; static const struct module_args valid_args[] = { - { "sink_name", "name of the sink", }, - { "sink_properties", "properties for the sink", }, - { "sinks", "sinks to combine", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "remix", "remix channels", }, - { "latency_compensate", "bool", }, + { "sink_name", "name of the sink", 0, MODULE_TYPE_STRING, "combined" }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "sinks", "sinks to combine", 0, MODULE_TYPE_STRINGV, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "remix", "remix channels", 0, MODULE_TYPE_BOOL, NULL }, + { "latency_compensate", "bool", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -63,7 +54,6 @@ PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); static const struct spa_dict_item module_combine_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Arun Raghavan " }, { PW_KEY_MODULE_DESCRIPTION, "Combine multiple sinks into a single sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-device-manager.c b/src/modules/module-protocol-pulse/modules/module-device-manager.c index 90dc2ea2c..371270514 100644 --- a/src/modules/module-protocol-pulse/modules/module-device-manager.c +++ b/src/modules/module-protocol-pulse/modules/module-device-manager.c @@ -17,15 +17,11 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "do_routing= " - "on_hotplug= " - "on_rescue="; static const struct module_args valid_args[] = { - { "do_routing", "Automatically route streams based on a priority list (unique per-role)?", }, - { "on_hotplug", "When new device becomes available, recheck streams?", }, - { "on_rescue", "When device becomes unavailable, recheck streams?", }, + { "do_routing", "Automatically route streams based on a priority list (unique per-role)", 0, MODULE_TYPE_BOOL, NULL }, + { "on_hotplug", "When new device becomes available, recheck streams", 0, MODULE_TYPE_BOOL, NULL }, + { "on_rescue", "When device becomes unavailable, recheck streams", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -41,7 +37,6 @@ struct module_device_manager_data { static const struct spa_dict_item module_device_manager_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Keep track of devices (and their descriptions) both past and present and prioritise by role" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-device-restore.c b/src/modules/module-protocol-pulse/modules/module-device-restore.c index 0af76daf2..8e0291e34 100644 --- a/src/modules/module-protocol-pulse/modules/module-device-restore.c +++ b/src/modules/module-protocol-pulse/modules/module-device-restore.c @@ -57,17 +57,12 @@ enum { #include "../reply.h" #include "../volume.h" -static const char *const pulse_module_options = - "restore_port= " - "restore_volume= " - "restore_muted= " - "restore_formats="; static const struct module_args valid_args[] = { - { "restore_port", "Save/restore port?", }, - { "restore_volume", "Save/restore volumes?", }, - { "restore_muted", "Save/restore muted states?", }, - { "restore_formats", "Save/restore saved formats?", }, + { "restore_port", "Save/restore port", 0, MODULE_TYPE_BOOL, NULL }, + { "restore_volume", "Save/restore volumes", 0, MODULE_TYPE_BOOL, NULL }, + { "restore_muted", "Save/restore muted states", 0, MODULE_TYPE_BOOL, NULL }, + { "restore_formats", "Save/restore saved formats", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -85,7 +80,6 @@ struct module_device_restore_data { static const struct spa_dict_item module_device_restore_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Automatically restore the volume/mute state of devices" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c index 3722a45d7..6ae7f8e44 100644 --- a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c +++ b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c @@ -27,31 +27,19 @@ * \ref page_module_echo_cancel "libpipewire-module-echo-cancel" */ -static const char *const pulse_module_options = - "source_name= " - "source_properties= " - "source_master= " - "sink_name= " - "sink_properties= " - "sink_master= " - "rate= " - "channels= " - "channel_map= " - "aec_method= " - "aec_args= "; static const struct module_args valid_args[] = { - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "source_master", "name of source to filter", }, - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "sink_master", "name of sink to filter", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "aec_method", "implementation to use", }, - { "aec_args", "parameters for the AEC engine", }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, "echo-cancel-source" }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "source_master", "name of source to filter", 0, MODULE_TYPE_STRING, NULL }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, "echo-cancel-sink" }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "sink_master", "name of sink to filter", 0, MODULE_TYPE_STRING, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "aec_method", "implementation to use", 0, MODULE_TYPE_STRING, "webrtc" }, + { "aec_args", "parameters for the AEC engine", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -175,7 +163,6 @@ static int module_echo_cancel_unload(struct module *module) static const struct spa_dict_item module_echo_cancel_info[] = { { PW_KEY_MODULE_AUTHOR, "Arun Raghavan " }, { PW_KEY_MODULE_DESCRIPTION, "Acoustic echo canceller" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c b/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c index adeb86b28..398c69893 100644 --- a/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c +++ b/src/modules/module-protocol-pulse/modules/module-jackdbus-detect.c @@ -25,33 +25,20 @@ * \ref page_module_jackdbus_detect "libpipewire-module-jackdbus-detect" */ -static const char *const pulse_module_options = - "channels= " - "sink_name= " - "sink_properties= " - "sink_client_name= " - "sink_channels= " - "sink_channel_map= " - "source_name= " - "source_properties= " - "source_client_name= " - "source_channels= " - "source_channel_map= " - "connect="; static const struct module_args valid_args[] = { - { "channels", "number of channels", }, - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "sink_client_name", "jack client name", }, - { "sink_channels", "number of channels", }, - { "sink_channel_map", "channel map", }, - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "source_client_name", "jack client name", }, - { "source_channels", "number of channels", }, - { "source_channel_map", "channel map", }, - { "connect", "connect ports?", }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, "jack_out" }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "sink_client_name", "jack client name", 0, MODULE_TYPE_STRING, NULL }, + { "sink_channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "sink_channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, "jack_in" }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "source_client_name", "jack client name", 0, MODULE_TYPE_STRING, NULL }, + { "source_channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "source_channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "connect", "connect ports", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -147,7 +134,6 @@ static int module_jackdbus_detect_unload(struct module *module) static const struct spa_dict_item module_jackdbus_detect_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Creates a JACK client when jackdbus is started" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c b/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c index 280b6b8fb..beadb1428 100644 --- a/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c @@ -27,37 +27,22 @@ * \ref page_module_filter_chain "libpipewire-module-filter-chain" */ -static const char *const pulse_module_options = - "sink_name= " - "sink_properties= " - "sink_input_properties= " - "master= " - "sink_master= " - "format= " - "rate= " - "channels= " - "channel_map= " - "plugin= " - "label= " - "control= " - "input_ladspaport_map= " - "output_ladspaport_map= "; static const struct module_args valid_args[] = { - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "sink_input_properties", "properties for the sink input", }, - { "master", "name of sink to filter", }, - { "sink_master", "name of sink to filter", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "plugin", "LADSPA plugin name", MODULE_ARG_MANDATORY }, - { "label", "LADSPA plugin label", MODULE_ARG_MANDATORY }, - { "control", "comma separated list of input control values", }, - { "input_ladspaport_map", "comma separated list of input LADSPA port names", }, - { "output_ladspaport_map", "comma separated list of output LADSPA port names", }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "sink_input_properties", "properties for the sink input", 0, MODULE_TYPE_PROPS, NULL }, + { "master", "name of sink to filter", 0, MODULE_TYPE_STRING, NULL }, + { "sink_master", "name of sink to filter", 0, MODULE_TYPE_STRING, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "plugin", "LADSPA plugin name", MODULE_ARG_MANDATORY, MODULE_TYPE_STRING, NULL }, + { "label", "LADSPA plugin label", MODULE_ARG_MANDATORY, MODULE_TYPE_STRING, NULL }, + { "control", "comma separated list of input control values", 0, MODULE_TYPE_STRINGV, NULL }, + { "input_ladspaport_map", "comma separated list of input LADSPA port names", 0, MODULE_TYPE_STRINGV, NULL }, + { "output_ladspaport_map", "comma separated list of output LADSPA port names", 0, MODULE_TYPE_STRINGV, NULL }, { NULL, } }; @@ -196,7 +181,6 @@ static int module_ladspa_sink_unload(struct module *module) static const struct spa_dict_item module_ladspa_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Virtual LADSPA sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-ladspa-source.c b/src/modules/module-protocol-pulse/modules/module-ladspa-source.c index 5c38a387a..af878b4ef 100644 --- a/src/modules/module-protocol-pulse/modules/module-ladspa-source.c +++ b/src/modules/module-protocol-pulse/modules/module-ladspa-source.c @@ -27,37 +27,22 @@ * \ref page_module_filter_chain "libpipewire-module-filter-chain" */ -static const char *const pulse_module_options = - "source_name= " - "source_properties= " - "source_output_properties= " - "master= " - "source_master= " - "format= " - "rate= " - "channels= " - "channel_map= " - "plugin= " - "label= " - "control= " - "input_ladspaport_map= " - "output_ladspaport_map= "; static const struct module_args valid_args[] = { - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "source_output_properties", "properties for the source output", }, - { "master", "name of source to filter", }, - { "source_master", "name of source to filter", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "plugin", "LADSPA plugin name", MODULE_ARG_MANDATORY }, - { "label", "LADSPA plugin label", MODULE_ARG_MANDATORY }, - { "control", "comma separated list of input control values", }, - { "input_ladspaport_map", "comma separated list of input LADSPA port names", }, - { "output_ladspaport_map", "comma separated list of output LADSPA port names", }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, NULL }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "source_output_properties", "properties for the source output", 0, MODULE_TYPE_PROPS, NULL }, + { "master", "name of source to filter", 0, MODULE_TYPE_STRING, NULL }, + { "source_master", "name of source to filter", 0, MODULE_TYPE_STRING, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "plugin", "LADSPA plugin name", MODULE_ARG_MANDATORY, MODULE_TYPE_STRING, NULL }, + { "label", "LADSPA plugin label", MODULE_ARG_MANDATORY, MODULE_TYPE_STRING, NULL }, + { "control", "comma separated list of input control values", 0, MODULE_TYPE_STRINGV, NULL }, + { "input_ladspaport_map", "comma separated list of input LADSPA port names", 0, MODULE_TYPE_STRINGV, NULL }, + { "output_ladspaport_map", "comma separated list of output LADSPA port names", 0, MODULE_TYPE_STRINGV, NULL }, { NULL, } }; @@ -196,7 +181,6 @@ static int module_ladspa_source_unload(struct module *module) static const struct spa_dict_item module_ladspa_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Virtual LADSPA source" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-loopback.c b/src/modules/module-protocol-pulse/modules/module-loopback.c index 665f4a844..3e50dc9cc 100644 --- a/src/modules/module-protocol-pulse/modules/module-loopback.c +++ b/src/modules/module-protocol-pulse/modules/module-loopback.c @@ -27,31 +27,19 @@ * \ref page_module_loopback "libpipewire-module-loopback" */ -static const char *const pulse_module_options = - "source= " - "sink= " - "latency_msec= " - "rate= " - "channels= " - "channel_map= " - "sink_input_properties= " - "source_output_properties= " - "source_dont_move= " - "sink_dont_move= " - "remix= "; static const struct module_args valid_args[] = { - { "source", "source to connect to", }, - { "sink", "sink to connect to", }, - { "latency_msec", "latency in ms", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "sink_input_properties", "proplist", }, - { "source_output_properties", "proplist", }, - { "source_dont_move", "boolean", }, - { "sink_dont_move", "boolean", }, - { "remix", "remix channels?", }, + { "source", "source to connect to", 0, MODULE_TYPE_STRING, NULL }, + { "sink", "sink to connect to", 0, MODULE_TYPE_STRING, NULL }, + { "latency_msec", "latency", 0, MODULE_TYPE_MSEC, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "sink_input_properties", "proplist", 0, MODULE_TYPE_PROPS, NULL }, + { "source_output_properties", "proplist", 0, MODULE_TYPE_PROPS, NULL }, + { "source_dont_move", "boolean", 0, MODULE_TYPE_BOOL, NULL }, + { "sink_dont_move", "boolean", 0, MODULE_TYPE_BOOL, NULL }, + { "remix", "remix channels", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -146,7 +134,6 @@ static int module_loopback_unload(struct module *module) static const struct spa_dict_item module_loopback_info[] = { { PW_KEY_MODULE_AUTHOR, "Arun Raghavan " }, { PW_KEY_MODULE_DESCRIPTION, "Loopback from source to sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c b/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c index 3d9293438..43cdbdb6f 100644 --- a/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c +++ b/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c @@ -21,15 +21,11 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "port= " - "listen=
" - "auth-anonymous="; static const struct module_args valid_args[] = { - { "port", "TCP port number", }, - { "listen", "address to listen on", }, - { "auth-anonymous", "don't check for cookies?", }, + { "port", "TCP port number", 0, MODULE_TYPE_INT, "4713" }, + { "listen", "address to listen on", 0, MODULE_TYPE_STRING, NULL }, + { "auth-anonymous", "don't check for cookies", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -78,7 +74,6 @@ static int module_native_protocol_tcp_unload(struct module *module) static const struct spa_dict_item module_native_protocol_tcp_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Native protocol (TCP sockets)" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-null-sink.c b/src/modules/module-protocol-pulse/modules/module-null-sink.c index fb407e469..82320e669 100644 --- a/src/modules/module-protocol-pulse/modules/module-null-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-null-sink.c @@ -18,21 +18,14 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "sink_name= " - "sink_properties= " - "format= " - "rate= " - "channels= " - "channel_map="; static const struct module_args valid_args[] = { - { "sink_name", "name of sink", }, - { "sink_properties", "properties for the sink", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, + { "sink_name", "name of sink", 0, MODULE_TYPE_STRING, "null-sink" }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, { NULL, } }; @@ -158,7 +151,6 @@ static int module_null_sink_unload(struct module *module) static const struct spa_dict_item module_null_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "A NULL sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; 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 a38046f83..18cc1a0eb 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c @@ -31,25 +31,16 @@ * \ref page_module_pipe_tunnel "libpipewire-module-pipe-tunnel" */ -static const char *const pulse_module_options = - "file= " - "sink_name= " - "sink_properties= " - "format= " - "rate= " - "channels= " - "channel_map= " - "use_system_clock_for_timing= "; static const struct module_args valid_args[] = { - { "file", "name of the FIFO special file to use", }, - { "sink_name", "name for the sink", }, - { "sink_properties", "sink properties", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "use_system_clock_for_timing", "yes or no", }, + { "file", "name of the FIFO special file to use", 0, MODULE_TYPE_STRING, NULL }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, "fifo_output" }, + { "sink_properties", "sink properties", 0, MODULE_TYPE_PROPS, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "use_system_clock_for_timing", "use system clock for timing", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -134,7 +125,6 @@ static int module_pipe_sink_unload(struct module *module) static const struct spa_dict_item module_pipe_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Sanchayan Maity " }, { PW_KEY_MODULE_DESCRIPTION, "Pipe sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; 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 0375d4aad..bcab8d76f 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-source.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-source.c @@ -31,23 +31,15 @@ * \ref page_module_pipe_tunnel "libpipewire-module-pipe-tunnel" */ -static const char *const pulse_module_options = - "file= " - "source_name= " - "source_properties= " - "format= " - "rate= " - "channels= " - "channel_map= "; static const struct module_args valid_args[] = { - { "file", "name of the FIFO special file to use", }, - { "source_name", "name for the source", }, - { "source_properties", "source properties", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, + { "file", "name of the FIFO special file to use", 0, MODULE_TYPE_STRING, NULL }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, "fifo_input" }, + { "source_properties", "source properties", 0, MODULE_TYPE_PROPS, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, { NULL, } }; @@ -132,7 +124,6 @@ static int module_pipe_source_unload(struct module *module) static const struct spa_dict_item module_pipe_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Sanchayan Maity " }, { PW_KEY_MODULE_DESCRIPTION, "Pipe source" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-raop-discover.c b/src/modules/module-protocol-pulse/modules/module-raop-discover.c index f5c97f860..f20f38234 100644 --- a/src/modules/module-protocol-pulse/modules/module-raop-discover.c +++ b/src/modules/module-protocol-pulse/modules/module-raop-discover.c @@ -18,7 +18,7 @@ * * ## Module Options * - * No options. + * @pulse_module_options@ * * ## See Also * @@ -26,7 +26,7 @@ */ static const struct module_args valid_args[] = { - { "latency_msec", "latency in ms", }, + { "latency_msec", "latency", 0, MODULE_TYPE_MSEC, NULL }, { NULL, } }; @@ -106,7 +106,6 @@ static int module_raop_discover_unload(struct module *module) static const struct spa_dict_item module_raop_discover_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "mDNS/DNS-SD Service Discovery of RAOP devices" }, - { PW_KEY_MODULE_USAGE, "" }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-remap-sink.c b/src/modules/module-protocol-pulse/modules/module-remap-sink.c index c23cb00cc..ac135a79f 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-sink.c @@ -26,29 +26,18 @@ * \ref page_module_loopback "libpipewire-module-loopback" */ -static const char *const pulse_module_options = - "sink_name= " - "sink_properties= " - "master= " - "master_channel_map= " - "format= " - "rate= " - "channels= " - "channel_map= " - "resample_method= " - "remix="; static const struct module_args valid_args[] = { - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "master", "name of sink to remap", }, - { "master_channel_map", "channel map", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "resample_method", "resampler", }, - { "remix", "remix channels?", }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "master", "name of sink to remap", 0, MODULE_TYPE_STRING, NULL }, + { "master_channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "resample_method", "resampler", 0, MODULE_TYPE_STRING, NULL }, + { "remix", "remix channels", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -141,7 +130,6 @@ static int module_remap_sink_unload(struct module *module) static const struct spa_dict_item module_remap_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Remap sink channels" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-remap-source.c b/src/modules/module-protocol-pulse/modules/module-remap-source.c index 5e08d180e..c4efbe86d 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-source.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-source.c @@ -26,29 +26,18 @@ * \ref page_module_loopback "libpipewire-module-loopback" */ -static const char *const pulse_module_options = - "source_name= " - "source_properties= " - "master= " - "master_channel_map= " - "format= " - "rate= " - "channels= " - "channel_map= " - "resample_method= " - "remix="; static const struct module_args valid_args[] = { - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "master", "name of source to filter", }, - { "master_channel_map", "channel map", }, - { "format", "sample format", }, - { "rate", "sample rate", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "resample_method", "resampler", }, - { "remix", "remix channels?", }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, NULL }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "master", "name of source to filter", 0, MODULE_TYPE_STRING, NULL }, + { "master_channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "resample_method", "resampler", 0, MODULE_TYPE_STRING, NULL }, + { "remix", "remix channels", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -141,7 +130,6 @@ static int module_remap_source_unload(struct module *module) static const struct spa_dict_item module_remap_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Remap source channels" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c b/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c index ff0bbe5a8..61649b32c 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c @@ -26,28 +26,20 @@ * \ref page_module_roc_source "libpipewire-module-roc-source" */ -static const char *const pulse_module_options = - "sink= " - "sink_input_properties= " - "resampler_profile=|high|medium|low " - "fec_code=|disable|rs8m|ldpc " - "sess_latency_msec= " - "local_ip= " - "local_source_port= " - "local_repair_port= " - "local_control_port= " - ; + +static const char *resampler_profile_vals[] = { "empty", "high", "medium", "low", NULL }; +static const char *fec_code_vals[] = { "empty", "disable", "rs8m", "ldpc", NULL }; static const struct module_args valid_args[] = { - { "sink", "name for the sink", }, - { "sink_input_properties", "properties for the sink_input", }, - { "resampler_profile", "empty|high|medium|low", }, - { "fec_code", "empty|disable|rs8m|ldpc", }, - { "sess_latency_msec", "target network latency in milliseconds", }, - { "local_ip", "local receiver ip", }, - { "local_source_port", "local receiver port for source packets", }, - { "local_repair_port", "local receiver port for repair packets", }, - { "local_control_port", "local receiver port for control packets", }, + { "sink", "name for the sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_input_properties", "properties for the sink_input", 0, MODULE_TYPE_PROPS, NULL }, + { "resampler_profile", "resampler profile", 0, MODULE_TYPE_STRINGE, NULL, resampler_profile_vals }, + { "fec_code", "forward error correction code", 0, MODULE_TYPE_STRINGE, NULL, fec_code_vals }, + { "sess_latency_msec", "target network latency", 0, MODULE_TYPE_MSEC, NULL }, + { "local_ip", "local receiver ip", 0, MODULE_TYPE_STRING, NULL }, + { "local_source_port", "local receiver port for source packets", 0, MODULE_TYPE_INT, NULL }, + { "local_repair_port", "local receiver port for repair packets", 0, MODULE_TYPE_INT, NULL }, + { "local_control_port", "local receiver port for control packets", 0, MODULE_TYPE_INT, NULL }, { NULL, }, }; @@ -135,7 +127,6 @@ static int module_roc_sink_input_unload(struct module *module) static const struct spa_dict_item module_roc_sink_input_info[] = { { PW_KEY_MODULE_AUTHOR, "Sanchayan Maity " }, { PW_KEY_MODULE_DESCRIPTION, "roc sink-input" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-roc-sink.c b/src/modules/module-protocol-pulse/modules/module-roc-sink.c index dbb18b1cc..5f2c02bc8 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-sink.c @@ -26,24 +26,17 @@ * \ref page_module_roc_sink "libpipewire-module-roc-sink" */ -static const char *const pulse_module_options = - "sink_name= " - "sink_properties= " - "fec_code=|disable|rs8m|ldpc " - "remote_ip= " - "remote_source_port= " - "remote_repair_port= " - "remote_control_port= " - ; + +static const char *fec_code_vals[] = { "empty", "disable", "rs8m", "ldpc", NULL }; static const struct module_args valid_args[] = { - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "fec_code", "empty|disable|rs8m|ldpc", }, - { "remote_ip", "remote receiver ip", }, - { "remote_source_port", "remote receiver port for source packets", }, - { "remote_repair_port", "remote receiver port for repair packets", }, - { "remote_control_port", "remote receiver port for control packets", }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "fec_code", "forward error correction code", 0, MODULE_TYPE_STRINGE, NULL, fec_code_vals }, + { "remote_ip", "remote receiver ip", 0, MODULE_TYPE_STRING, NULL }, + { "remote_source_port", "remote receiver port for source packets", 0, MODULE_TYPE_INT, NULL }, + { "remote_repair_port", "remote receiver port for repair packets", 0, MODULE_TYPE_INT, NULL }, + { "remote_control_port", "remote receiver port for control packets", 0, MODULE_TYPE_INT, NULL }, { NULL, }, }; @@ -131,7 +124,6 @@ static int module_roc_sink_unload(struct module *module) static const struct spa_dict_item module_roc_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Sanchayan Maity " }, { PW_KEY_MODULE_DESCRIPTION, "roc sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-roc-source.c b/src/modules/module-protocol-pulse/modules/module-roc-source.c index 1beab7843..f0f07b63a 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-source.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-source.c @@ -26,28 +26,20 @@ * \ref page_module_roc_source "libpipewire-module-roc-source" */ -static const char *const pulse_module_options = - "source_name= " - "source_properties= " - "resampler_profile=|high|medium|low " - "fec_code=|disable|rs8m|ldpc " - "sess_latency_msec= " - "local_ip= " - "local_source_port= " - "local_repair_port= " - "local_control_port= " - ; + +static const char *resampler_profile_vals[] = { "empty", "high", "medium", "low", NULL }; +static const char *fec_code_vals[] = { "empty", "disable", "rs8m", "ldpc", NULL }; static const struct module_args valid_args[] = { - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "resampler_profile", "empty|high|medium|low", }, - { "fec_code", "empty|disable|rs8m|ldpc", }, - { "sess_latency_msec", "target network latency in milliseconds", }, - { "local_ip", "local receiver ip", }, - { "local_source_port", "local receiver port for source packets", }, - { "local_repair_port", "local receiver port for repair packets", }, - { "local_control_port", "local receiver port for control packets", }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, NULL }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "resampler_profile", "resampler profile", 0, MODULE_TYPE_STRINGE, NULL, resampler_profile_vals }, + { "fec_code", "forward error correction code", 0, MODULE_TYPE_STRINGE, NULL, fec_code_vals }, + { "sess_latency_msec", "target network latency", 0, MODULE_TYPE_MSEC, NULL }, + { "local_ip", "local receiver ip", 0, MODULE_TYPE_STRING, NULL }, + { "local_source_port", "local receiver port for source packets", 0, MODULE_TYPE_INT, NULL }, + { "local_repair_port", "local receiver port for repair packets", 0, MODULE_TYPE_INT, NULL }, + { "local_control_port", "local receiver port for control packets", 0, MODULE_TYPE_INT, NULL }, { NULL, }, }; @@ -135,7 +127,6 @@ static int module_roc_source_unload(struct module *module) static const struct spa_dict_item module_roc_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Sanchayan Maity " }, { PW_KEY_MODULE_DESCRIPTION, "roc source" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-rtp-recv.c b/src/modules/module-protocol-pulse/modules/module-rtp-recv.c index 1668ee3c3..888b9467c 100644 --- a/src/modules/module-protocol-pulse/modules/module-rtp-recv.c +++ b/src/modules/module-protocol-pulse/modules/module-rtp-recv.c @@ -25,17 +25,12 @@ * \ref page_module_rtp_sap "libpipewire-module-rtp-sap" */ -static const char *const pulse_module_options = - "sink= " - "sap_address= " - "latency_msec= " - "stream_properties= "; static const struct module_args valid_args[] = { - { "sink", "name of the sink", }, - { "sap_address", "multicast address to listen on", }, - { "latency_msec", "latency in ms", }, - { "stream_properties", "properties for the stream", }, + { "sink", "name of the sink", 0, MODULE_TYPE_STRING, NULL }, + { "sap_address", "multicast address to listen on", 0, MODULE_TYPE_STRING, NULL }, + { "latency_msec", "latency", 0, MODULE_TYPE_MSEC, NULL }, + { "stream_properties", "properties for the stream", 0, MODULE_TYPE_PROPS, NULL }, { NULL, } }; @@ -134,7 +129,6 @@ static int module_rtp_recv_unload(struct module *module) static const struct spa_dict_item module_rtp_recv_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Receive data from a network via RTP/SAP/SDP" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-rtp-send.c b/src/modules/module-protocol-pulse/modules/module-rtp-send.c index acdfd019e..bc4940ff4 100644 --- a/src/modules/module-protocol-pulse/modules/module-rtp-send.c +++ b/src/modules/module-protocol-pulse/modules/module-rtp-send.c @@ -25,37 +25,24 @@ * \ref page_module_rtp_sink "libpipewire-module-rtp-sink" */ -static const char *const pulse_module_options = - "source= " - "format= " - "channels= " - "rate= " - "destination_ip= " - "source_ip= " - "port= " - "mtu= " - "loop= " - "ttl= " - "inhibit_auto_suspend= " - "stream_name= " - "stream_properties= " - "enable_opus="; + +static const char *inhibit_auto_suspend_vals[] = { "always", "never", "only_with_non_monitor_sources", NULL }; static const struct module_args valid_args[] = { - { "source", "name of the source", }, - { "format", "sample format", }, - { "channels", "number of channels", }, - { "rate", "sample rate", }, - { "destination_ip", "destination IP address", }, - { "source_ip", "source IP address", }, - { "port", "port number", }, - { "mtu", "maximum transfer unit", }, - { "loop", "loopback to local host", }, - { "ttl", "ttl value", }, - { "inhibit_auto_suspend", "always|never|only_with_non_monitor_sources", }, - { "stream_name", "name of the stream", }, - { "stream_properties", "properties for the stream", }, - { "enable_opus", "enable OPUS codec", }, + { "source", "name of the source", 0, MODULE_TYPE_STRING, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "destination_ip", "destination IP address", 0, MODULE_TYPE_STRING, NULL }, + { "source_ip", "source IP address", 0, MODULE_TYPE_STRING, NULL }, + { "port", "port number", 0, MODULE_TYPE_INT, NULL }, + { "mtu", "maximum transfer unit", 0, MODULE_TYPE_INT, NULL }, + { "loop", "loopback to local host", 0, MODULE_TYPE_BOOL, NULL }, + { "ttl", "ttl value", 0, MODULE_TYPE_INT, NULL }, + { "inhibit_auto_suspend", "inhibit auto suspend policy", 0, MODULE_TYPE_STRINGE, NULL, inhibit_auto_suspend_vals }, + { "stream_name", "name of the stream", 0, MODULE_TYPE_STRING, NULL }, + { "stream_properties", "properties for the stream", 0, MODULE_TYPE_PROPS, NULL }, + { "enable_opus", "enable OPUS codec", 0, MODULE_TYPE_BOOL, NULL }, { NULL, }, }; @@ -199,7 +186,6 @@ static int module_rtp_send_unload(struct module *module) static const struct spa_dict_item module_rtp_send_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Read data from source and send it to the network via RTP/SAP/SDP" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c b/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c index 7c342846a..283b20754 100644 --- a/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c +++ b/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c @@ -25,29 +25,18 @@ * \ref page_module_protocol_simple "libpipewire-module-protocol-simple" */ -static const char *const pulse_module_options = - "rate= " - "format= " - "channels= " - "channel_map= " - "sink= " - "source= " - "playback= " - "record= " - "port= " - "listen=
"; static const struct module_args valid_args[] = { - { "rate", "sample rate", }, - { "format", "sample format", }, - { "channels", "number of channels", }, - { "channel_map", "number of channels", }, - { "sink", "sink to connect to", }, - { "source", "source to connect to", }, - { "playback", "enable playback?", }, - { "record", "enable record?", }, - { "port", "TCP port number", }, - { "listen", "address to listen on", }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "number of channels", 0, MODULE_TYPE_CHMAP, NULL }, + { "sink", "sink to connect to", 0, MODULE_TYPE_STRING, NULL }, + { "source", "source to connect to", 0, MODULE_TYPE_STRING, NULL }, + { "playback", "enable playback", 0, MODULE_TYPE_BOOL, NULL }, + { "record", "enable record", 0, MODULE_TYPE_BOOL, NULL }, + { "port", "TCP port number", 0, MODULE_TYPE_INT, "4711" }, + { "listen", "address to listen on", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -128,7 +117,6 @@ static int module_simple_protocol_tcp_unload(struct module *module) static const struct spa_dict_item module_simple_protocol_tcp_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Simple protocol (TCP sockets)" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-stream-restore.c b/src/modules/module-protocol-pulse/modules/module-stream-restore.c index 24dda6568..c7e518ea7 100644 --- a/src/modules/module-protocol-pulse/modules/module-stream-restore.c +++ b/src/modules/module-protocol-pulse/modules/module-stream-restore.c @@ -18,21 +18,14 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "restore_device= " - "restore_volume= " - "restore_muted= " - "on_hotplug= " - "on_rescue= " - "fallback_table="; static const struct module_args valid_args[] = { - { "restore_device", "Save/restore sinks/sources?", }, - { "restore_volume", "Save/restore volumes?", }, - { "restore_muted", "Save/restore muted states?", }, - { "on_hotplug", "This argument is obsolete, please remove it from configuration", }, - { "on_rescue", "This argument is obsolete, please remove it from configuration", }, - { "fallback_table", "filename", }, + { "restore_device", "Save/restore sinks/sources", 0, MODULE_TYPE_BOOL, NULL }, + { "restore_volume", "Save/restore volumes", 0, MODULE_TYPE_BOOL, NULL }, + { "restore_muted", "Save/restore muted states", 0, MODULE_TYPE_BOOL, NULL }, + { "on_hotplug", "recheck streams on hotplug", MODULE_ARG_ENOTIMPL, MODULE_TYPE_BOOL, NULL }, + { "on_rescue", "recheck streams on rescue", MODULE_ARG_ENOTIMPL, MODULE_TYPE_BOOL, NULL }, + { "fallback_table", "filename", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -50,7 +43,6 @@ struct module_stream_restore_data { static const struct spa_dict_item module_stream_restore_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Automatically restore the volume/mute/device state of streams" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c b/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c index 03bfe9bb4..3d0bf8542 100644 --- a/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c +++ b/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c @@ -27,15 +27,11 @@ * @pulse_module_options@ */ -static const char *const pulse_module_options = - "only_from_unavailable= " - "ignore_virtual= " - "blocklist= "; static const struct module_args valid_args[] = { - { "only_from_unavailable", "boolean, only switch from unavailable ports (not implemented yet)", }, - { "ignore_virtual", "boolean, ignore new virtual sinks and sources, defaults to true", }, - { "blocklist", "regex, ignore matching devices, default=hdmi", }, + { "only_from_unavailable", "only switch from unavailable ports", MODULE_ARG_ENOTIMPL, MODULE_TYPE_BOOL, "false" }, + { "ignore_virtual", "boolean, ignore new virtual sinks and sources, defaults to true", 0, MODULE_TYPE_BOOL, "true" }, + { "blocklist", "regex, ignore matching devices, default=hdmi", 0, MODULE_TYPE_STRING, "hdmi" }, { NULL, } }; @@ -253,7 +249,6 @@ static const struct spa_dict_item module_switch_on_connect_info[] = { "This module exists for Pulseaudio compatibility, and is useful only when some applications " "try to manage the default sinks/sources themselves and interfere with PipeWire's builtin " "default device switching." }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c index 5ee9ccf65..2ab8328d7 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c @@ -28,31 +28,19 @@ * \ref page_module_pulse_tunnel "libpipewire-module-pulse-tunnel" */ -static const char *const pulse_module_options = - "server=
" - "sink= " - "sink_name= " - "sink_properties= " - "reconnect_interval_ms= " - "format= " - "channels= " - "rate= " - "channel_map= " - "latency_msec= " - "cookie="; static const struct module_args valid_args[] = { - { "server", "address", MODULE_ARG_MANDATORY }, - { "sink", "name of the remote sink", }, - { "sink_name", "name for the local sink", }, - { "sink_properties", "properties for the local sink", }, - { "reconnect_interval_ms", "interval to try reconnects, 0 or omitted if disabled", }, - { "format", "sample format", }, - { "channels", "number of channels", }, - { "rate", "sample rate", }, - { "channel_map", "channel map", }, - { "latency_msec", "fixed latency in ms", }, - { "cookie", "cookie file path", }, + { "server", "address", MODULE_ARG_MANDATORY, MODULE_TYPE_STRING, NULL }, + { "sink", "name of the remote sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_name", "name for the local sink", 0, MODULE_TYPE_STRING, NULL }, + { "sink_properties", "properties for the local sink", 0, MODULE_TYPE_PROPS, NULL }, + { "reconnect_interval_ms", "interval to try reconnects, 0 or omitted if disabled", 0, MODULE_TYPE_MSEC, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "latency_msec", "fixed latency", 0, MODULE_TYPE_MSEC, NULL }, + { "cookie", "cookie file path", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -138,7 +126,6 @@ static int module_tunnel_sink_unload(struct module *module) static const struct spa_dict_item module_tunnel_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Create a network sink which connects to a remote PulseAudio server" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c index 1bcef7293..9bfd868ba 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c @@ -28,31 +28,19 @@ * \ref page_module_pulse_tunnel "libpipewire-module-pulse-tunnel" */ -static const char *const pulse_module_options = - "server=
" - "source= " - "source_name= " - "source_properties= " - "reconnect_interval_ms= " - "format= " - "channels= " - "rate= " - "channel_map= " - "latency_msec= " - "cookie="; static const struct module_args valid_args[] = { - { "server", "address", MODULE_ARG_MANDATORY }, - { "source", "name of the remote source", }, - { "source_name", "name for the local source", }, - { "source_properties", "properties for the local source", }, - { "reconnect_interval_ms", "interval to try reconnects, 0 or omitted if disabled", }, - { "format", "sample format", }, - { "channels", "number of channels", }, - { "rate", "sample rate", }, - { "channel_map", "channel map", }, - { "latency_msec", "fixed latency in ms", }, - { "cookie", "cookie file path", }, + { "server", "address", MODULE_ARG_MANDATORY, MODULE_TYPE_STRING, NULL }, + { "source", "name of the remote source", 0, MODULE_TYPE_STRING, NULL }, + { "source_name", "name for the local source", 0, MODULE_TYPE_STRING, NULL }, + { "source_properties", "properties for the local source", 0, MODULE_TYPE_PROPS, NULL }, + { "reconnect_interval_ms", "interval to try reconnects, 0 or omitted if disabled", 0, MODULE_TYPE_MSEC, NULL }, + { "format", "sample format", 0, MODULE_TYPE_FORMAT, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "rate", "sample rate", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "latency_msec", "fixed latency", 0, MODULE_TYPE_MSEC, NULL }, + { "cookie", "cookie file path", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -138,7 +126,6 @@ static int module_tunnel_source_unload(struct module *module) static const struct spa_dict_item module_tunnel_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Create a network source which connects to a remote PulseAudio server" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-virtual-sink.c b/src/modules/module-protocol-pulse/modules/module-virtual-sink.c index 3dd14bbbf..932d6ed5a 100644 --- a/src/modules/module-protocol-pulse/modules/module-virtual-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-virtual-sink.c @@ -26,23 +26,15 @@ * \ref page_module_loopback "libpipewire-module-loopback" */ -static const char *const pulse_module_options = - "sink_name= " - "sink_properties= " - "master= " - "channels= " - "channel_map= " - "use_volume_sharing= " - "force_flat_volume= "; static const struct module_args valid_args[] = { - { "sink_name", "name for the sink", }, - { "sink_properties", "properties for the sink", }, - { "master", "name of sink to filter", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "use_volume_sharing", "yes or no", }, - { "force_flat_volume", "yes or no", }, + { "sink_name", "name for the sink", 0, MODULE_TYPE_STRING, "vsink" }, + { "sink_properties", "properties for the sink", 0, MODULE_TYPE_PROPS, NULL }, + { "master", "name of sink to filter", 0, MODULE_TYPE_STRING, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "use_volume_sharing", "share volume with master", 0, MODULE_TYPE_BOOL, NULL }, + { "force_flat_volume", "force flat volume", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -137,7 +129,6 @@ static int module_virtual_sink_unload(struct module *module) static const struct spa_dict_item module_virtual_sink_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "Virtual sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-virtual-source.c b/src/modules/module-protocol-pulse/modules/module-virtual-source.c index 250f283b8..f5750d2aa 100644 --- a/src/modules/module-protocol-pulse/modules/module-virtual-source.c +++ b/src/modules/module-protocol-pulse/modules/module-virtual-source.c @@ -27,25 +27,16 @@ * \ref page_module_loopback "libpipewire-module-loopback" */ -static const char *const pulse_module_options = - "source_name= " - "source_properties= " - "master= " - "uplink_sink= (optional)" - "channels= " - "channel_map= " - "use_volume_sharing= " - "force_flat_volume= "; static const struct module_args valid_args[] = { - { "source_name", "name for the source", }, - { "source_properties", "properties for the source", }, - { "master", "name of source to filter", }, - { "uplink_sink", "name", }, - { "channels", "number of channels", }, - { "channel_map", "channel map", }, - { "use_volume_sharing", "yes or no", }, - { "force_flat_volume", "yes or no", }, + { "source_name", "name for the source", 0, MODULE_TYPE_STRING, "vsource" }, + { "source_properties", "properties for the source", 0, MODULE_TYPE_PROPS, NULL }, + { "master", "name of source to filter", 0, MODULE_TYPE_STRING, NULL }, + { "uplink_sink", "name", 0, MODULE_TYPE_STRING, NULL }, + { "channels", "number of channels", 0, MODULE_TYPE_INT, NULL }, + { "channel_map", "channel map", 0, MODULE_TYPE_CHMAP, NULL }, + { "use_volume_sharing", "share volume with master", 0, MODULE_TYPE_BOOL, NULL }, + { "force_flat_volume", "force flat volume", 0, MODULE_TYPE_BOOL, NULL }, { NULL, } }; @@ -140,7 +131,6 @@ static int module_virtual_source_unload(struct module *module) static const struct spa_dict_item module_virtual_source_info[] = { { PW_KEY_MODULE_AUTHOR, "Arun Raghavan " }, { PW_KEY_MODULE_DESCRIPTION, "Loopback from source to sink" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-x11-bell.c b/src/modules/module-protocol-pulse/modules/module-x11-bell.c index 3ecefc31e..f77ac5fbe 100644 --- a/src/modules/module-protocol-pulse/modules/module-x11-bell.c +++ b/src/modules/module-protocol-pulse/modules/module-x11-bell.c @@ -23,17 +23,12 @@ * \ref page_module_x11_bell "libpipewire-module-x11-bell" */ -static const char *const pulse_module_options = - "sink= " - "sample= " - "display= " - "xauthority="; static const struct module_args valid_args[] = { - { "sink", "sink to connect to", }, - { "sample", "the sample to play", }, - { "display", "X11 display", }, - { "xauthority", "X11 Authority", }, + { "sink", "sink to connect to", 0, MODULE_TYPE_STRING, NULL }, + { "sample", "the sample to play", 0, MODULE_TYPE_STRING, NULL }, + { "display", "X11 display", 0, MODULE_TYPE_STRING, NULL }, + { "xauthority", "X11 Authority", 0, MODULE_TYPE_STRING, NULL }, { NULL, } }; @@ -125,7 +120,6 @@ static int module_x11_bell_prepare(struct module * const module) static const struct spa_dict_item module_x11_bell_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "X11 bell interceptor" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; diff --git a/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c b/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c index 5384382fb..dad036c54 100644 --- a/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c +++ b/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c @@ -25,11 +25,9 @@ * \ref page_module_zeroconf_discover "libpipewire-module-zeroconf-discover" */ -static const char *const pulse_module_options = - "latency_msec= "; static const struct module_args valid_args[] = { - { "latency_msec", "fixed latency in ms", }, + { "latency_msec", "fixed latency", 0, MODULE_TYPE_MSEC, NULL }, { NULL, } }; @@ -109,7 +107,6 @@ static int module_zeroconf_discover_unload(struct module *module) static const struct spa_dict_item module_zeroconf_discover_info[] = { { PW_KEY_MODULE_AUTHOR, "Wim Taymans " }, { PW_KEY_MODULE_DESCRIPTION, "mDNS/DNS-SD Service Discovery" }, - { PW_KEY_MODULE_USAGE, pulse_module_options }, { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, };