mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-10-01 13:44:40 +00:00
doc: add documentation for pipewire-pulse modules
Add (minimal) reference documentation for each pipewire-pulse module. Add some preprocessing to substitute @pulse_module_options@ in docs from PW_KEY_MODULE_USAGE so the module options don't need to be repeated. Produce Doxygen docs + generate manpages pipewire-pulse-modules.7, pipewire-pulse-module-*.7
This commit is contained in:
parent
0ae797ea28
commit
843e733479
52
doc/dox/pulse-modules.dox
Normal file
52
doc/dox/pulse-modules.dox
Normal file
|
@ -0,0 +1,52 @@
|
|||
/** \page page_pulse_modules Pulseaudio Modules
|
||||
|
||||
PipeWire's Pulseaudio emulation implements several Pulseaudio modules.
|
||||
It only supports its own built-in modules, and cannot load external
|
||||
modules written for Pulseaudio.
|
||||
|
||||
The built-in modules can be loaded using Pulseaudio client programs,
|
||||
for example `pactl load-module <module-name> <module-options>`. They
|
||||
can also added to `pipewire-pulse.conf`, typically by a drop-in file
|
||||
in `~/.config/pipewire/pipewire-pulse.conf.d/` containing the module
|
||||
name and its arguments
|
||||
```
|
||||
pulse.cmd = [
|
||||
{ cmd = "load-module" args = "module-null-sink sink_name=foo" flags = [ ] }
|
||||
]
|
||||
```
|
||||
|
||||
List of known built-in modules:
|
||||
|
||||
- \subpage page_pulse_module_alsa_sink
|
||||
- \subpage page_pulse_module_alsa_source
|
||||
- \subpage page_pulse_module_always_sink
|
||||
- \subpage page_pulse_module_combine_sink
|
||||
- \subpage page_pulse_module_echo_cancel
|
||||
- \subpage page_pulse_module_gsettings
|
||||
- \subpage page_pulse_module_jackdbus_detect
|
||||
- \subpage page_pulse_module_ladspa_sink
|
||||
- \subpage page_pulse_module_ladspa_source
|
||||
- \subpage page_pulse_module_loopback
|
||||
- \subpage page_pulse_module_native_protocol_tcp
|
||||
- \subpage page_pulse_module_null_sink
|
||||
- \subpage page_pulse_module_pipe_sink
|
||||
- \subpage page_pulse_module_pipe_source
|
||||
- \subpage page_pulse_module_raop_discover
|
||||
- \subpage page_pulse_module_remap_sink
|
||||
- \subpage page_pulse_module_remap_source
|
||||
- \subpage page_pulse_module_roc_sink
|
||||
- \subpage page_pulse_module_roc_sink_input
|
||||
- \subpage page_pulse_module_roc_source
|
||||
- \subpage page_pulse_module_rtp_recv
|
||||
- \subpage page_pulse_module_rtp_send
|
||||
- \subpage page_pulse_module_simple_protocol_tcp
|
||||
- \subpage page_pulse_module_switch_on_connect
|
||||
- \subpage page_pulse_module_tunnel_sink
|
||||
- \subpage page_pulse_module_tunnel_source
|
||||
- \subpage page_pulse_module_virtual_sink
|
||||
- \subpage page_pulse_module_virtual_source
|
||||
- \subpage page_pulse_module_x11_bell
|
||||
- \subpage page_pulse_module_zeroconf_discover
|
||||
- \subpage page_pulse_module_zeroconf_publish
|
||||
|
||||
*/
|
48
doc/input-filter.py
Executable file
48
doc/input-filter.py
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- mode: python; coding: utf-8; eval: (blacken-mode); -*-
|
||||
r"""
|
||||
Doxygen input filter that:
|
||||
|
||||
- adds \privatesection to all files
|
||||
- removes macros
|
||||
- parses pulse_module_options 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.
|
||||
|
||||
The Pulse module option parsing is used in documentation of Pulseaudio modules.
|
||||
"""
|
||||
import sys
|
||||
import re
|
||||
import os
|
||||
|
||||
|
||||
def main():
|
||||
with open(sys.argv[1], "r") as f:
|
||||
text = f.read()
|
||||
|
||||
text = re.sub("#define.*", "", text)
|
||||
|
||||
m = re.search(
|
||||
r"static const char[* ]*const pulse_module_options\s+=\s+(.*?\")\s*;\s*$",
|
||||
text,
|
||||
re.M | 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}")
|
||||
|
||||
res = "\n * ".join(res)
|
||||
text = text.replace("@pulse_module_options@", res)
|
||||
|
||||
print("/** \\privatesection */")
|
||||
print(text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Doxygen input filter that adds \privatesection to all files,
|
||||
# and removes macros.
|
||||
#
|
||||
# This is used for .c files, and causes Doxygen to not include
|
||||
# any symbols from them, unless they also appeared in a header file.
|
||||
#
|
||||
echo -n "/** \privatesection */ "
|
||||
sed -e 's/#define.*//' < "$1"
|
|
@ -20,6 +20,7 @@ extra_docs = [
|
|||
'dox/index.dox',
|
||||
'dox/overview.dox',
|
||||
'dox/modules.dox',
|
||||
'dox/pulse-modules.dox',
|
||||
'dox/internals/index.dox',
|
||||
'dox/internals/design.dox',
|
||||
'dox/internals/access.dox',
|
||||
|
@ -68,6 +69,9 @@ endforeach
|
|||
foreach h : module_sources
|
||||
inputs += meson.project_source_root() / 'src' / 'modules' / h
|
||||
endforeach
|
||||
foreach h : pipewire_module_protocol_pulse_sources
|
||||
inputs += meson.project_source_root() / 'src' / 'modules' / h
|
||||
endforeach
|
||||
input_dirs = [ meson.project_source_root() / 'spa' / 'include' / 'spa' ]
|
||||
|
||||
path_prefixes = [
|
||||
|
@ -141,7 +145,7 @@ pw_programs_dox = configure_file(input: 'programs.dox.in',
|
|||
input_dirs += [ 'doc/programs.dox' ]
|
||||
|
||||
doxygen_layout = meson.project_source_root() / 'doc' / 'DoxygenLayout.xml'
|
||||
doxygen_filter_c = meson.project_source_root() / 'doc' / 'input-filter.sh'
|
||||
doxygen_filter_c = meson.project_source_root() / 'doc' / 'input-filter.py'
|
||||
doxygen_filter_h = meson.project_source_root() / 'doc' / 'input-filter-h.sh'
|
||||
|
||||
doxyfile_conf.set('inputs', ' '.join(inputs + input_dirs))
|
||||
|
@ -177,9 +181,24 @@ if generate_module_manpages
|
|||
endif
|
||||
endforeach
|
||||
|
||||
module_manpage_names = []
|
||||
foreach m : module_sources
|
||||
name = m.split('.c').get(0)
|
||||
file = 'libpipewire-' + name + '.7'
|
||||
name = m.split('.c').get(0)
|
||||
file = f'libpipewire-@name@.7'
|
||||
module_manpage_names += [[name, file]]
|
||||
endforeach
|
||||
foreach m : pipewire_module_protocol_pulse_sources
|
||||
name = m.split('/').get(-1).split('.c').get(0)
|
||||
if m.contains('/modules/') and name.startswith('module-')
|
||||
name = f'pulse-@name@'
|
||||
file = f'pipewire-@name@.7'
|
||||
module_manpage_names += [[name, file]]
|
||||
endif
|
||||
endforeach
|
||||
|
||||
foreach item : module_manpage_names
|
||||
name = item.get(0)
|
||||
file = item.get(1)
|
||||
|
||||
rst = custom_target(file + '.rst',
|
||||
command : [python, module_man_rst_py, pandoc, name, '@INPUT@' ] + module_man_defines,
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#!/usr/bin/python3
|
||||
# -*- mode: python; coding: utf-8; eval: (blacken-mode); -*-
|
||||
"""
|
||||
Convert Doxygen HTML documentation for a PipeWire module to RST.
|
||||
"""
|
||||
|
@ -33,9 +34,7 @@ PipeWire is available from {PACKAGE_URL}
|
|||
SEE ALSO
|
||||
--------
|
||||
|
||||
``pipewire(1)``,
|
||||
``pipewire.conf(5)``,
|
||||
``libpipewire-modules(7)``
|
||||
{seealso}
|
||||
"""
|
||||
|
||||
|
||||
|
@ -68,11 +67,17 @@ def main():
|
|||
[args.pandoc, "-f", "html", "-t", "rst"], input=data, encoding="utf-8"
|
||||
)
|
||||
|
||||
if not content.strip():
|
||||
content = "Undocumented."
|
||||
if not content.strip() or content.lower().startswith("module name\n-----"):
|
||||
content = "Undocumented.\n\n" + content
|
||||
|
||||
name = f"libpipewire-{args.module}"
|
||||
subtitle = "PipeWire module"
|
||||
if args.module.startswith("pulse-"):
|
||||
name = re.sub(r"^pulse-module-", "module-", args.module)
|
||||
seealso = "``pipewire-pulse(1)``, ``pipewire-pulse-modules(7)``"
|
||||
subtitle = "PipeWire Pulseaudio module"
|
||||
else:
|
||||
name = f"libpipewire-{args.module}"
|
||||
seealso = "``pipewire(1)``, ``pipewire.conf(5)``, ``libpipewire-modules(7)``"
|
||||
subtitle = "PipeWire module"
|
||||
|
||||
env = dict(
|
||||
content=content,
|
||||
|
@ -80,6 +85,7 @@ def main():
|
|||
name_underline="#" * len(name),
|
||||
subtitle=subtitle,
|
||||
subtitle_underline="-" * len(subtitle),
|
||||
seealso=seealso,
|
||||
)
|
||||
|
||||
for k, v in args.define:
|
||||
|
|
|
@ -123,8 +123,9 @@ Support interfaces provided by host
|
|||
\}
|
||||
|
||||
\page page_overview
|
||||
\page page_modules
|
||||
\page page_programs
|
||||
\page page_modules
|
||||
\page page_pulse_modules
|
||||
\page page_internals
|
||||
\page page_api
|
||||
\page page_tutorial
|
||||
|
|
|
@ -9,11 +9,21 @@ manpage_conf.set('PIPEWIRE_CONFDATADIR', pipewire_confdatadir)
|
|||
module_manpage_list = []
|
||||
foreach m : module_sources
|
||||
name = m.split('.c').get(0)
|
||||
module_manpage_list += ['``libpipewire-' + name + '(7)``']
|
||||
module_manpage_list += f'``libpipewire-' + name + '(7)``'
|
||||
endforeach
|
||||
|
||||
manpage_conf.set('LIBPIPEWIRE_MODULES', '\n- '.join(module_manpage_list))
|
||||
|
||||
pulse_module_manpage_list = []
|
||||
foreach m : pipewire_module_protocol_pulse_sources
|
||||
name = m.split('/').get(-1).split('.c').get(0)
|
||||
if m.contains('/modules/') and name.startswith('module-')
|
||||
pulse_module_manpage_list += f'``pipewire-pulse-@name@(7)``'
|
||||
endif
|
||||
endforeach
|
||||
|
||||
manpage_conf.set('PIPEWIRE_PULSE_MODULES', '\n- '.join(pulse_module_manpage_list))
|
||||
|
||||
manpages = [
|
||||
'pipewire.1.rst.in',
|
||||
'pipewire-pulse.1.rst.in',
|
||||
|
@ -31,6 +41,7 @@ manpages = [
|
|||
'pw-profiler.1.rst.in',
|
||||
'pw-top.1.rst.in',
|
||||
'libpipewire-modules.7.rst.in',
|
||||
'pipewire-pulse-modules.7.rst.in',
|
||||
]
|
||||
|
||||
if get_option('pipewire-jack').allowed()
|
||||
|
|
43
man/pipewire-pulse-modules.7.rst.in
Normal file
43
man/pipewire-pulse-modules.7.rst.in
Normal file
|
@ -0,0 +1,43 @@
|
|||
pipewire-pulse-modules
|
||||
######################
|
||||
|
||||
---------------------------
|
||||
PipeWire Pulseaudio modules
|
||||
---------------------------
|
||||
|
||||
:Manual section: 7
|
||||
:Manual group: PipeWire
|
||||
|
||||
DESCRIPTION
|
||||
===========
|
||||
|
||||
PipeWire's Pulseaudio emulation implements several Pulseaudio modules.
|
||||
It only supports its own built-in modules, and cannot load external
|
||||
modules written for Pulseaudio.
|
||||
|
||||
The built-in modules can be loaded using Pulseaudio client programs,
|
||||
for example `pactl load-module <module-name> <module-options>`. They
|
||||
can also added to `pipewire-pulse.conf`, typically by a drop-in file
|
||||
in `~/.config/pipewire/pipewire-pulse.conf.d/` containing the module
|
||||
name and its arguments
|
||||
|
||||
::
|
||||
|
||||
pulse.cmd = [
|
||||
{ cmd = "load-module" args = "module-null-sink sink_name=foo" flags = [ ] }
|
||||
]
|
||||
|
||||
KNOWN MODULES
|
||||
=============
|
||||
|
||||
- @PIPEWIRE_PULSE_MODULES@
|
||||
|
||||
AUTHORS
|
||||
=======
|
||||
|
||||
The PipeWire Developers <@PACKAGE_BUGREPORT@>; PipeWire is available from @PACKAGE_URL@
|
||||
|
||||
SEE ALSO
|
||||
========
|
||||
|
||||
``pipewire-pulse(1)``,
|
|
@ -500,13 +500,13 @@ summary({'Manpage generation': generate_manpages}, bool_yn: true)
|
|||
subdir('man')
|
||||
|
||||
doxygen = find_program('doxygen', required : get_option('docs'))
|
||||
if doxygen.found()
|
||||
pymod = import('python')
|
||||
python = pymod.find_installation('python3', required: get_option('docs'))
|
||||
if doxygen.found() and python.found()
|
||||
generate_module_manpages = get_option('docs').enabled() and get_option('man').enabled()
|
||||
if generate_manpages
|
||||
pymod = import('python')
|
||||
python = pymod.find_installation('python3', required: generate_module_manpages)
|
||||
pandoc = find_program('pandoc', required: generate_module_manpages)
|
||||
generate_module_manpages = python.found() and pandoc.found()
|
||||
generate_module_manpages = pandoc.found()
|
||||
endif
|
||||
summary({'Module manpage generation': generate_module_manpages}, bool_yn: true)
|
||||
|
||||
|
|
|
@ -7,6 +7,43 @@
|
|||
#include "../manager.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_alsa_sink ALSA Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-alsa-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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?> ";
|
||||
|
||||
#define NAME "alsa-sink"
|
||||
|
||||
#define DEFAULT_DEVICE "default"
|
||||
|
@ -131,31 +168,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "An ALSA sink" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"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?>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -7,6 +7,43 @@
|
|||
#include "../manager.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_alsa_source ALSA Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-alsa-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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?>";
|
||||
|
||||
#define NAME "alsa-source"
|
||||
|
||||
#define DEFAULT_DEVICE "default"
|
||||
|
@ -131,31 +168,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "An ALSA source" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"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?>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -6,6 +6,19 @@
|
|||
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_always_sink Always Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-always-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options = "sink_name=<name of sink>";
|
||||
|
||||
#define NAME "always-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -77,7 +90,7 @@ 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 <pav@iki.fi>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Always keeps at least one sink loaded even if it's a null one" },
|
||||
{ PW_KEY_MODULE_USAGE, "sink_name=<name of sink>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -12,6 +12,32 @@
|
|||
#include "../manager.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_combine_sink Combine Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-combine-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_combine_stream "libpipewire-module-combine-stream"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"sink_name=<name of the sink> "
|
||||
"sink_properties=<properties for the sink> "
|
||||
/* not a great name, but for backwards compatibility... */
|
||||
"slaves=<sinks to combine> "
|
||||
"rate=<sample rate> "
|
||||
"channels=<number of channels> "
|
||||
"channel_map=<channel map> "
|
||||
"remix=<remix channels> "
|
||||
"latency_compensate=<bool> ";
|
||||
|
||||
#define NAME "combine-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -24,15 +50,7 @@ PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
|||
static const struct spa_dict_item module_combine_sink_info[] = {
|
||||
{ PW_KEY_MODULE_AUTHOR, "Arun Raghavan <arun@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Combine multiple sinks into a single sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "sink_name=<name of the sink> "
|
||||
"sink_properties=<properties for the sink> "
|
||||
/* not a great name, but for backwards compatibility... */
|
||||
"slaves=<sinks to combine> "
|
||||
"rate=<sample rate> "
|
||||
"channels=<number of channels> "
|
||||
"channel_map=<channel map> "
|
||||
"remix=<remix channels> "
|
||||
"latency_compensate=<bool> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,45 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_echo_cancel Echo Cancel
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-echo-cancel`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_echo_cancel "libpipewire-module-echo-cancel"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> ";
|
||||
#if 0
|
||||
/* These are not implemented because they don't
|
||||
* really make sense in the PipeWire context */
|
||||
"format=<sample format> "
|
||||
"adjust_time=<how often to readjust rates in s> "
|
||||
"adjust_threshold=<how much drift to readjust after in ms> "
|
||||
"autoloaded=<set if this module is being loaded automatically> "
|
||||
"save_aec=<save AEC data in /tmp> "
|
||||
"use_volume_sharing=<yes or no> "
|
||||
"use_master_format=<yes or no> "
|
||||
#endif
|
||||
|
||||
#define NAME "echo-cancel"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -114,29 +153,7 @@ 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 <arun@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Acoustic echo canceller" },
|
||||
{ PW_KEY_MODULE_USAGE, "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> "
|
||||
#if 0
|
||||
/* These are not implemented because they don't
|
||||
* really make sense in the PipeWire context */
|
||||
"format=<sample format> "
|
||||
"adjust_time=<how often to readjust rates in s> "
|
||||
"adjust_threshold=<how much drift to readjust after in ms> "
|
||||
"autoloaded=<set if this module is being loaded automatically> "
|
||||
"save_aec=<save AEC data in /tmp> "
|
||||
"use_volume_sharing=<yes or no> "
|
||||
"use_master_format=<yes or no> "
|
||||
#endif
|
||||
},
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,17 @@
|
|||
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_gsettings GSettings
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-gsettings`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* No options.
|
||||
*/
|
||||
|
||||
#define NAME "gsettings"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
|
|
@ -8,6 +8,35 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_jackdbus_detect JackDBus Detect
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-jackdbus-detect`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_jackdbus_detect "libpipewire-module-jackdbus-detect"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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?>";
|
||||
|
||||
#define NAME "jackdbus-detect"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -93,19 +122,7 @@ 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 <wim.taymans@gmail.con>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Creates a JACK client when jackdbus is started" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"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?>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,37 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_ladspa_sink LADSPA Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-ladspa-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_filter_chain "libpipewire-module-filter-chain"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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=<input channel map> "
|
||||
"plugin=<ladspa plugin name> "
|
||||
"label=<ladspa plugin label> "
|
||||
"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> ";
|
||||
|
||||
#define NAME "ladspa-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -126,21 +157,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Virtual LADSPA sink" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"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=<input channel map> "
|
||||
"plugin=<ladspa plugin name> "
|
||||
"label=<ladspa plugin label> "
|
||||
"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> "},
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,37 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_ladspa_source LADSPA Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-ladspa-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_filter_chain "libpipewire-module-filter-chain"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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=<input channel map> "
|
||||
"plugin=<ladspa plugin name> "
|
||||
"label=<ladspa plugin label> "
|
||||
"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> ";
|
||||
|
||||
#define NAME "ladspa-source"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -126,21 +157,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Virtual LADSPA source" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"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=<input channel map> "
|
||||
"plugin=<ladspa plugin name> "
|
||||
"label=<ladspa plugin label> "
|
||||
"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> "},
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,34 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_loopback Loopback
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-loopback`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_loopback "libpipewire-module-loopback"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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?> ";
|
||||
|
||||
#define NAME "loopback"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -99,17 +127,7 @@ static int module_loopback_unload(struct module *module)
|
|||
static const struct spa_dict_item module_loopback_info[] = {
|
||||
{ PW_KEY_MODULE_AUTHOR, "Arun Raghavan <arun@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Loopback from source to sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "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?> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,22 @@
|
|||
#include "../pulse-server.h"
|
||||
#include "../server.h"
|
||||
|
||||
/** \page page_pulse_module_native_protocol_tcp Pulseaudio TCP Protocol
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-native-protocol-tcp`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"port=<TCP port number> "
|
||||
"listen=<address to listen on> "
|
||||
"auth-anonymous=<don't check for cookies?>";
|
||||
|
||||
#define NAME "protocol-tcp"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -53,9 +69,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Native protocol (TCP sockets)" },
|
||||
{ PW_KEY_MODULE_USAGE, "port=<TCP port number> "
|
||||
"listen=<address to listen on> "
|
||||
"auth-anonymous=<don't check for cookies?>"},
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -7,6 +7,25 @@
|
|||
#include "../manager.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_null_sink Null Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-null-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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>";
|
||||
|
||||
#define NAME "null-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -129,12 +148,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "A NULL sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "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>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -14,6 +14,31 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_pipe_sink Pipe Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-pipe-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_pipe_tunnel "libpipewire-module-pipe-tunnel"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> ";
|
||||
|
||||
#define NAME "pipe-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -94,14 +119,7 @@ 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 <sanchayan@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Pipe sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -14,6 +14,30 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_pipe_source Pipe Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-pipe-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_pipe_tunnel "libpipewire-module-pipe-tunnel"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> ";
|
||||
|
||||
#define NAME "pipe-source"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -94,13 +118,7 @@ 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 <sanchayan@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Pipe source" },
|
||||
{ PW_KEY_MODULE_USAGE, "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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,21 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_raop_discover RAOP Discover
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-raop-discover`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* No options.
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_raop_discover "libpipewire-module-raop-discover"
|
||||
*/
|
||||
|
||||
#define NAME "raop-discover"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
|
|
@ -10,6 +10,33 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_remap_sink Remap Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-remap-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_loopback "libpipewire-module-loopback"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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?>";
|
||||
|
||||
#define NAME "remap-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -96,16 +123,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Remap sink channels" },
|
||||
{ PW_KEY_MODULE_USAGE, "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?>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -10,6 +10,33 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_remap_source Remap Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-remap-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_loopback "libpipewire-module-loopback"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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?>";
|
||||
|
||||
#define NAME "remap-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -96,16 +123,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Remap source channels" },
|
||||
{ PW_KEY_MODULE_USAGE, "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?>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -9,7 +9,32 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
#define NAME "roc-source"
|
||||
/** \page page_pulse_module_roc_sink_input ROC Sink Input
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-roc-sink-input`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_roc_source "libpipewire-module-roc-source"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"sink=<name for the sink> "
|
||||
"sink_input_properties=<properties for the sink_input> "
|
||||
"resampler_profile=<empty>|disable|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> ";
|
||||
|
||||
#define NAME "roc-sink-input"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
@ -92,14 +117,7 @@ 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 <sanchayan@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "roc sink-input" },
|
||||
{ PW_KEY_MODULE_USAGE, "sink=<name for the sink> "
|
||||
"sink_input_properties=<properties for the sink_input> "
|
||||
"resampler_profile=<empty>|disable|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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -9,6 +9,29 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_roc_sink ROC Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-roc-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_roc_sink "libpipewire-module-roc-sink"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> ";
|
||||
|
||||
#define NAME "roc-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -101,12 +124,7 @@ static const char* const valid_args[] = {
|
|||
static const struct spa_dict_item module_roc_sink_info[] = {
|
||||
{ PW_KEY_MODULE_AUTHOR, "Sanchayan Maity <sanchayan@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "roc sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -9,6 +9,31 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_roc_source ROC Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-roc-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_roc_source "libpipewire-module-roc-source"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"source_name=<name for the source> "
|
||||
"source_properties=<properties for the source> "
|
||||
"resampler_profile=<empty>|disable|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> ";
|
||||
|
||||
#define NAME "roc-source"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -104,14 +129,7 @@ static const char* const valid_args[] = {
|
|||
static const struct spa_dict_item module_roc_source_info[] = {
|
||||
{ PW_KEY_MODULE_AUTHOR, "Sanchayan Maity <sanchayan@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "roc source" },
|
||||
{ PW_KEY_MODULE_USAGE, "source_name=<name for the source> "
|
||||
"source_properties=<properties for the source> "
|
||||
"resampler_profile=<empty>|disable|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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,26 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_rtp_recv RTP Receiver
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-rtp-recv`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_rtp_sap "libpipewire-module-rtp-sap"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"sink=<name of the sink> "
|
||||
"sap_address=<multicast address to listen on> "
|
||||
"latency_msec=<latency in ms> ";
|
||||
|
||||
#define NAME "rtp-recv"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -94,9 +114,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Receive data from a network via RTP/SAP/SDP" },
|
||||
{ PW_KEY_MODULE_USAGE, "sink=<name of the sink> "
|
||||
"sap_address=<multicast address to listen on> "
|
||||
"latency_msec=<latency in ms> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,36 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_rtp_send RTP Sender
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-rtp-send`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_rtp_sink "libpipewire-module-rtp-sink"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> "
|
||||
"enable_opus=<enable OPUS codec>";
|
||||
|
||||
#define NAME "rtp-send"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -136,19 +166,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Read data from source and send it to the network via RTP/SAP/SDP" },
|
||||
{ PW_KEY_MODULE_USAGE, "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> "
|
||||
"enable_opus=<enable OPUS codec>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,33 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_simple_protocol_tcp Simple TCP Protocol
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-simple-protocol-tcp`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_protocol_simple "libpipewire-module-protocol-simple"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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>";
|
||||
|
||||
#define NAME "simple-protocol-tcp"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -84,16 +111,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Simple protocol (TCP sockets)" },
|
||||
{ PW_KEY_MODULE_USAGE, "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>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -15,6 +15,22 @@
|
|||
#include "../manager.h"
|
||||
#include "../collect.h"
|
||||
|
||||
/** \page page_pulse_module_switch_on_connect Switch on Connect
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-switch-on-connect`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> ";
|
||||
|
||||
#define NAME "switch-on-connect"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -215,9 +231,7 @@ 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, "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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -12,6 +12,33 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_tunnel_sink Tunnel Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-tunnel-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_pulse_tunnel "libpipewire-module-pulse-tunnel"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"server=<address> "
|
||||
"sink=<name of the remote sink> "
|
||||
"sink_name=<name for the local sink> "
|
||||
"sink_properties=<properties for the local sink> "
|
||||
"format=<sample format> "
|
||||
"channels=<number of channels> "
|
||||
"rate=<sample rate> "
|
||||
"channel_map=<channel map> "
|
||||
"latency_msec=<fixed latency in ms> "
|
||||
"cookie=<cookie file path>";
|
||||
|
||||
#define NAME "tunnel-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -92,17 +119,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Create a network sink which connects to a remote PulseAudio server" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"server=<address> "
|
||||
"sink=<name of the remote sink> "
|
||||
"sink_name=<name for the local sink> "
|
||||
"sink_properties=<properties for the local sink> "
|
||||
"format=<sample format> "
|
||||
"channels=<number of channels> "
|
||||
"rate=<sample rate> "
|
||||
"channel_map=<channel map> "
|
||||
"latency_msec=<fixed latency in ms> "
|
||||
"cookie=<cookie file path>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -12,6 +12,33 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_tunnel_source Tunnel Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-tunnel-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_pulse_tunnel "libpipewire-module-pulse-tunnel"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"server=<address> "
|
||||
"source=<name of the remote source> "
|
||||
"source_name=<name for the local source> "
|
||||
"source_properties=<properties for the local source> "
|
||||
"format=<sample format> "
|
||||
"channels=<number of channels> "
|
||||
"rate=<sample rate> "
|
||||
"channel_map=<channel map> "
|
||||
"latency_msec=<fixed latency in ms> "
|
||||
"cookie=<cookie file path>";
|
||||
|
||||
#define NAME "tunnel-source"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -92,17 +119,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Create a network source which connects to a remote PulseAudio server" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"server=<address> "
|
||||
"source=<name of the remote source> "
|
||||
"source_name=<name for the local source> "
|
||||
"source_properties=<properties for the local source> "
|
||||
"format=<sample format> "
|
||||
"channels=<number of channels> "
|
||||
"rate=<sample rate> "
|
||||
"channel_map=<channel map> "
|
||||
"latency_msec=<fixed latency in ms> "
|
||||
"cookie=<cookie file path>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -10,6 +10,30 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_virtual_sink Virtual Sink
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-virtual-sink`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_loopback "libpipewire-module-loopback"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"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> ";
|
||||
|
||||
#define NAME "virtual-sink"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -98,13 +122,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Virtual sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "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> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -11,6 +11,31 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_virtual_source Virtual Source
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-virtual-source`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_loopback "libpipewire-module-loopback"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"source_name=<name for the source> "
|
||||
"source_properties=<properties for the source> "
|
||||
"master=<name of source to filter> "
|
||||
"uplink_sink=<name> (optional)"
|
||||
"channels=<number of channels> "
|
||||
"channel_map=<channel map> "
|
||||
"use_volume_sharing=<yes or no> "
|
||||
"force_flat_volume=<yes or no> ";
|
||||
|
||||
#define NAME "virtual-source"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -99,14 +124,7 @@ 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 <arun@asymptotic.io>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "Loopback from source to sink" },
|
||||
{ PW_KEY_MODULE_USAGE, "source_name=<name for the source> "
|
||||
"source_properties=<properties for the source> "
|
||||
"master=<name of source to filter> "
|
||||
"uplink_sink=<name> (optional)"
|
||||
"channels=<number of channels> "
|
||||
"channel_map=<channel map> "
|
||||
"use_volume_sharing=<yes or no> "
|
||||
"force_flat_volume=<yes or no> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -6,6 +6,27 @@
|
|||
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_x11_bell X11 Bell
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-x11-bell`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_x11_bell "libpipewire-module-x11-bell"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"sink=<sink to connect to> "
|
||||
"sample=<the sample to play> "
|
||||
"display=<X11 display> "
|
||||
"xauthority=<X11 Authority>";
|
||||
|
||||
#define NAME "x11-bell"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -93,10 +114,7 @@ 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 <wim.taymans@gmail.com>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "X11 bell interceptor" },
|
||||
{ PW_KEY_MODULE_USAGE, "sink=<sink to connect to> "
|
||||
"sample=<the sample to play> "
|
||||
"display=<X11 display> "
|
||||
"xauthority=<X11 Authority>" },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,24 @@
|
|||
#include "../defs.h"
|
||||
#include "../module.h"
|
||||
|
||||
/** \page page_pulse_module_zeroconf_discover Zeroconf Discover
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-zeroconf-discover`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* @pulse_module_options@
|
||||
*
|
||||
* ## See Also
|
||||
*
|
||||
* \ref page_module_zeroconf_discover "libpipewire-module-zeroconf-discover"
|
||||
*/
|
||||
|
||||
static const char *const pulse_module_options =
|
||||
"latency_msec=<fixed latency in ms> ";
|
||||
|
||||
#define NAME "zeroconf-discover"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
@ -84,8 +102,7 @@ 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 <wim.taymans@gmail.con>" },
|
||||
{ PW_KEY_MODULE_DESCRIPTION, "mDNS/DNS-SD Service Discovery" },
|
||||
{ PW_KEY_MODULE_USAGE,
|
||||
"latency_msec=<fixed latency in ms> " },
|
||||
{ PW_KEY_MODULE_USAGE, pulse_module_options },
|
||||
{ PW_KEY_MODULE_VERSION, PACKAGE_VERSION },
|
||||
};
|
||||
|
||||
|
|
|
@ -24,6 +24,17 @@
|
|||
#include <avahi-common/domain.h>
|
||||
#include <avahi-common/malloc.h>
|
||||
|
||||
/** \page page_pulse_module_zeroconf_publish Zeroconf Publish
|
||||
*
|
||||
* ## Module Name
|
||||
*
|
||||
* `module-zeroconf-publish`
|
||||
*
|
||||
* ## Module Options
|
||||
*
|
||||
* No options.
|
||||
*/
|
||||
|
||||
#define NAME "zeroconf-publish"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME);
|
||||
|
|
Loading…
Reference in a new issue