Commit graph

3608 commits

Author SHA1 Message Date
Peter Hutterer
0cd0d6e826 meson.build: split the version data into a separate config
Use this for the version.h file so we enforce that being used everywhere
instead of accidentaly relying on whatever ends up in config.h.

The generated version.h file is identical.
2021-06-10 09:30:56 +02:00
Peter Hutterer
b5e98027b7 meson.build: drop VERSION, use PACKAGE_VERSION in the C sources
Slightly better namespaced since it's not usually used anywhere else, VERSION
is too generic.
2021-06-10 09:30:56 +02:00
Peter Hutterer
5cf3c28fa4 config.h is a local header, not a system one
Change the #include accordingly, that's what we use in the rest of the tree
too.
2021-06-10 09:04:16 +10:00
Peter Hutterer
da339c286f meson.build: drop HAVE_CONFIG_H
This is an autotools leftover, with meson we're always guaranteed to have
the config.h file.
2021-06-10 09:04:16 +10:00
Wim Taymans
1b5ffa7891 filter: init the Latency param correctly
See #911
2021-06-09 21:12:19 +02:00
Wim Taymans
d91cc99d92 properties: escape '/' as well 2021-06-09 18:08:26 +02:00
Wim Taymans
262e609b73 conf: use serialize_dict to write state files
Instead of our home-brew version.
2021-06-09 18:00:47 +02:00
Wim Taymans
54326abd54 properties: improve serialize method
Properly escape the keys because we're trying to generate
valid JSON.
Always place ',' after items.
Add a flag to add a '\n' before each item.
Don't try to string-encode the value when it's already a string.
2021-06-09 17:57:58 +02:00
Wim Taymans
85d34d8d94 conf: add comment about removing sections
Sections that don't need to be changed can be removed because they
are now taken from the main config file.
2021-06-09 15:25:58 +02:00
Wim Taymans
db44fe47ee conf: Load and stack all config files.
Load and parse config files in the following order:

$PIPEWIRE_CONFIG_DIR or /usr/share/pipewire
/etc/pipewire
$XDG_CONFIG_DIR or ~/.config/pipewire

This ensure we always load a working base config and reduce the
chances of failing because of a back user config file.

The user config file now only needs to contain the section that
needs the be changed.

See #207
2021-06-09 12:15:39 +02:00
Peter Hutterer
dcfd6745d0 test: move the context tests to here 2021-06-09 18:00:39 +10:00
Peter Hutterer
493f0724b5 test: move the array tests to pwtest
Add them to the existing pw_properties test binary and rename that to
pw-utils.

Same functionality as before for the pw_array tests.
2021-06-09 18:00:39 +10:00
Peter Hutterer
0054319d88 meson.build: add -D_GNU_SOURCE to the project arguments
This appends it to every compilation command so we can get rid of the c_args
for (almost all) executables.
2021-06-09 07:47:51 +00:00
Wim Taymans
750cafd7d1 context: use pw_context_destroy() in error cases
Make sure we free all the resources of a context when it can't be
created.
2021-06-09 09:41:50 +02:00
Wim Taymans
c12bdb8c6c pipewire: cleanup on error
To make leak checks more accurate.
2021-06-09 09:41:50 +02:00
Wim Taymans
db245fd0ce context: override the CORE_NAME in context
Override the CORE_NAME using the env variable in the context instead
of pipewire.c. This avoids needing the _add_string() property method.
Remove the properties_add_string() method, there are new improved
plans for property parsing and merging: See #207
2021-06-08 16:56:22 +02:00
Wim Taymans
1f85d06317 module-adapter: clear bound-resource when destroyed
So that we don't reference it anymore or try to remove the listener.
2021-06-07 12:57:09 +02:00
Barnabás Pőcze
b6c6a21747 pipewire: module-adapter: remove resource listener
Unregister the resource listener when the node is going
away to avoid use-after-free issues.

Fixes #1276
2021-06-07 10:54:19 +00:00
Peter Hutterer
b6e27822e5 pipewire: use RUNNING_ON_VALGRIND to determine if we're in valgrind
This removes the use of the VALGRIND environment variable
2021-06-07 10:44:27 +00:00
Wim Taymans
9a90030596 pw-cli: fix command parsing after pw_split changes
Don't assume anything about the way the split function maintain the
state.
2021-06-07 11:17:45 +02:00
Arun Raghavan
08daf3f4f4 pulse-server: Add a module-echo-cancel
Fairly straightforwad module to load libpipewire-module-echo-cancel
2021-06-05 17:54:02 +00:00
Wim Taymans
a2cb5f3394 properties: try to keep full doxygen docs out of headers
Try to keep the full docs out of the headers and into the .c file.
A small short blurb in the header is enough for quick lookups.
Also try to use a regular comment to not confuse the doc system.
2021-06-04 12:08:23 +02:00
Peter Hutterer
2e6621fae0 daemon: use getenv(PIPEWIRE_CORE) for the core.name if it exists
As documented in pipewire/keys.h, PIPEWIRE_CORE is supposed to overwrite the
default value.
2021-06-04 08:58:18 +00:00
Peter Hutterer
f775547528 pipewire: merge, not overwrite the context.properties from the config file
Any values already set in the properties list (e.g. from earlier getenv())
calls should not be overwritten by the value in the config file.
2021-06-04 08:58:18 +00:00
Peter Hutterer
b179e81070 pipewire: add pw_properties_add_string()
Equivalent to the existing pw_properties_update_string() but only adds new
properties from the given string, it doesn't overwrite existing ones.
2021-06-04 08:58:18 +00:00
Wim Taymans
2a8b7594bc pulse-server: avoid overflow
Make sure the requested bytes never go below 0.

See #1258
2021-06-04 09:13:43 +02:00
Barnabás Pőcze
e65afe8fa2 pulse-server: module-combine-sink: remove hooks
Remove hooks when the module is unloaded to avoid
use-after-free issues. Remove the cleanup source as well.

Fixes #1259.
2021-06-04 06:55:08 +00:00
Peter Hutterer
4cb87317a7 pipewire: assert a nonzero array allocation size
If pw_array_ensure_size() is called on an array that has not been initialized
with an extend, assert. Otherwise we get stuck in an infinite loop since
doubling our zero allocation size will never reach "need".
2021-06-04 09:00:34 +10:00
Wim Taymans
0ba9402d4b Revert "media-session: use direction to find the node by name"
This reverts commit b0068fd46b.

It breaks recording from monitor ports.
2021-06-03 20:33:59 +02:00
Wim Taymans
669fbf10c1 fix some leaks in error paths 2021-06-03 20:33:59 +02:00
Barnabás Pőcze
6affda9424 pipewire: utils: add more tests for pw_split_walk() 2021-06-03 17:23:42 +02:00
Barnabás Pőcze
3b681f2138 pipewire: utils: pw_split_walk(): skip leading runs of chars in delimiter
Previously, if the string started with any of the characters in
delimiter, the first returned string would've been an empty string.
This is in contrast with the fact that otherwise `pw_split_walk()`
skips empty fields.

E.g.

  "::field1::field2" with ":" as `delimiter`

would have resulted in
 *  ""
 *  "field1"
 *  "field2".

Adjust the function to skip leading runs of characters in `delimiter`
by calling `strspn()` first.
2021-06-03 17:06:16 +02:00
Barnabás Pőcze
576513583b pipewire: impl-module: limit module search depth
Limit the depth of the recursive search done by `find_module()`
to a sensible amount (at the moment: 8).
2021-06-03 17:06:16 +02:00
Barnabás Pőcze
a8428a57b1 pipewire: impl-module: simplify module dir handling logic
Since `pw_split_walk()` does not skip leading runs of
delimiters, if `module_dir` is an absolute path, then

  l = pw_split_strv(module_dir, "/", 0, &n_paths);

will return an array of one element, which is exactly the same
as `module_dir`, `strcmp(l[0], module_dir) == 0`.

If `module_dir` is a relative path, then the returned array
still contains a single element, which is, again, the same
as `module_dir`.

Therefore, omit the the call to `pw_split_strv()` and simply
use `module_dir` as is.
2021-06-03 17:06:16 +02:00
George Kiagiadakis
131832d441 pulse-server: suffix TAG_USEC constants with LL, as they must be 64-bit
Fixes protocol errors on arm
2021-06-03 17:36:19 +03:00
Wim Taymans
6971d11901 pw-cat: support u8 format as well 2021-06-03 10:10:18 +02:00
Peter Hutterer
8b98d111e1 context: print the correct strerror if the config load failed
"can't load config client.conf: Success" is a bit confusing otherwise.
2021-06-03 09:51:34 +02:00
Arun Raghavan
d2d0375c39 module-echo-cancel: Change extension .cc to .cpp for aec-webrtc
Makes this consistent with the rest of the code base.
2021-06-02 18:26:19 -04:00
Arun Raghavan
d95870d8d3 module-echo-cancel: Wire up the webrtc echo canceller
Mostly uses the existing infrastructure, but the webrtc canceller has a
fixed blocksize, so we:

  1. Use the canceller blocksize if configured
  2. Accumulate output data in a ringbuffer
  3. Push out the data in the required chunk size
2021-06-02 17:56:40 -04:00
Arun Raghavan
1349d5334d module-echo-cancel: Drop buffers on overruns
Without this, if we do overrun, we'll never catch this.
2021-06-02 12:50:16 -04:00
Arun Raghavan
bbae1adda0 module-echo-cancel: Separate input gathering and output processing
This aggregates buffers from the capture stream and the sink in the
corresponding process callbacks, and runs processing based on the
desired resampler rate if there is one.

We allow the ringbuffer in which we capture buffers to grow to some
extent, as that seems to be required for playback to occur smoothly.
Whether this is hiding some other underlying problem likely needs
investigation.
2021-06-02 12:46:12 -04:00
Arun Raghavan
42196a331d module-echo-cancel: Consolidate includes 2021-06-02 12:46:12 -04:00
Wim Taymans
58d0e44664 pipewire: Add option to disable config files
Add env variable PIPEWIRE_NO_CONFIG to disable parsing
custom config files.
Add a method to check extra options.
Expose valgrind, no-config and no-color as options.
2021-06-02 15:55:24 +02:00
Wim Taymans
dde03a7dd3 config: add some comments in the config file
About where to copy and change it.
2021-06-02 15:22:49 +02:00
Peter Hutterer
1d4b24d02b pipewire: allow NULL pointers in pw_memmap_free()
Just like the real free() we should just ignore a NULL pointer, makes the
caller code easier for those instances where properties are optional.
2021-06-02 10:56:46 +00:00
Peter Hutterer
71e0cfb5fa pipewire: allow NULL pointers in pw_free_strv()
Just like the real free() we should just ignore a NULL pointer, makes the
caller code easier for those instances where properties are optional.
2021-06-02 10:56:46 +00:00
Peter Hutterer
e0471c6757 pipewire: allow NULL pointers in pw_properties_free()
Just like the real free() we should just ignore a NULL pointer, makes the
caller code easier for those instances where properties are optional.

Patch generated with concinelle with a few manual fixes.
2021-06-02 10:56:46 +00:00
Peter Hutterer
a1e821c259 pw-dump: use the spa_ato* helpers for string to number conversions 2021-06-02 07:39:41 +00:00
Peter Hutterer
3796bc814e pipewire: use spa_ato*() to parse properties
For boolean properties:
- passing in NULL no longer crashes and instead returns false
- passing in a string starting with 1 (e.g. "1xyz") no longer resolves to true

For int-based properties:
- passing in NULL no longer crashes and instead returns 0
- passing in invalid numbers no longer resolves to whatever number prefix
  could be parsed (e.g. "123foo" was 123)
2021-06-02 07:39:41 +00:00
Peter Hutterer
1a5faa7b52 spa: add a header for ANSI color sequences
Makes the code more readable and guarantees we use the same sequences for the
same colors everywhere.
2021-06-02 14:17:29 +10:00