Commit Graph

12535 Commits

Author SHA1 Message Date
Wim Taymans
f73d3e4af9 stream: copy position before going to STREAMING
So that get_time_n will return values as soon as we go to STREAMING.

Fixes #3995
2024-05-03 11:53:15 +02:00
Wim Taymans
88e9f7683c conf: an empty condition should evaluate to true
An empty match rule matches nothing and evaluates to false but an empty
condition should evaluate to true.
2024-05-03 10:57:02 +02:00
Barnabás Pőcze
0b3a27b208 pw-mon: fix type confusion in core event handler
All pw_core event handlers (`on_core_*()`) currently receive a pointer
to `struct data`, not `struct proxy_data`; as can be seen from the
`pw_core_add_listener()` call in `main()`.

Fixes: cacdcc1b62 ("pw-mon: add filter param to hide props and/or params")
Fixes #3997
2024-05-03 07:18:43 +00:00
Barnabás Pőcze
da1dbc1120 treewide: fix C++20 compilation error wrt. designated initializers
C++20 introduced designated initializers similar to the ones found
in C99, however, in C++ designated initializers cannot be mixed
with non-designated initializers. GCC rejects mixed initializers
with an error.
2024-05-03 07:16:57 +00:00
Barnabás Pőcze
2bc5d0914d gst: fix stream params memory leak
Both the GPtrArray and its contents are leaked in case of success.
`pw_stream_connect()` copies the params as needed, so use `g_autoptr()`
to free the array and with it, its contents.
2024-05-03 07:15:19 +00:00
Wim Taymans
c8efa0fae2 context: use first data-loop class when unset
When a node does not specify a data-loop class, use the class of the
first data loop. This makes the nodes spread out over the first
(default) data-loop class.
2024-05-02 09:33:38 +02:00
Wim Taymans
3e760ea7d7 gst: handle some more errors
The threadloop might fail to create because of missing plugins, so
handle that.

The context might fail to create because of some fatal config error or
missing plugin, handle that too instead of crashing.

See #3994
2024-05-01 20:31:39 +02:00
Pauli Virtanen
44d958d397 pulse-server: show warning about snap kernel features only once
Don't spam the warning about kernel missing features required for snap
on every pulseaudio connection, but instead show it only once, as the
situation is not going to improve.
2024-05-01 13:17:31 +03:00
Barnabás Pőcze
d80989ab56 treewide: fix errno assignments
Do not set `errno` to a negative value.
2024-05-01 09:28:17 +00:00
Wim Taymans
7e26fa57e5 impl-node: ensure same data loop inside the node
Make sure the loop used to load the spa plugin matches the loop of the
impl-node and the port mixer loops.
2024-04-30 18:02:59 +02:00
Wim Taymans
8dabf3486e impl-node: optimize invoke usage
When the driver and the node have the same data-loop we can group the
invoke calls together and avoid context switches for the sync
operations.
2024-04-30 16:17:03 +02:00
Wim Taymans
bd14e212c7 remove from driver in driver data-loop 2024-04-30 15:51:00 +02:00
Wim Taymans
afd9960dc3 jack: pass client to get_mix_buffer instead of port
The port can be null when we try to get a buffer from a port that is not
ours. Just use the client to get to the current cycle.
2024-04-30 15:48:10 +02:00
Wim Taymans
ff1f793a63 stream: only overwite node.loop.class when unset 2024-04-30 13:27:42 +02:00
Wim Taymans
44f2ed7579 alsa: add sync.id in acp properties 2024-04-30 10:14:30 +02:00
Lukas Rusak
9e88aafa30 alsa-pcm: don't force quantum for iec958 formats
This fixes an issue introduced in 771f71f622
where the quantum is forced and may break applications the specify their
own quantum.

Signed-off-by: Lukas Rusak <lorusak@gmail.com>
2024-04-30 09:34:19 +02:00
Wim Taymans
8ff40e6252 loop: improve in_thread handling of invoke queue
Because we now have a dedicated queue per thread, we can simply add our
invoke item to the queue and then flush all the queues when we are
running in the thread of the loop.

This simplifies some things and removes potential out-of-order messages
that got queued while flushing.
2024-04-29 15:56:00 +02:00
Wim Taymans
de0db48f17 loop: create a per-thread queue
Keep a thread local queue. This makes it possible for multiple threads
to write to the ringbuffer.

There is a lock to protect the list of queues. It can only be contended
when new queues are created in the threads but this can be done at
thread startup.

Fixes #3983
2024-04-29 15:17:45 +02:00
Wim Taymans
c76424da36 loop: move invoke queue to separate object
Make an internal queue object that implements the invoke queue.

Because we can not do invokes concurrently from different threads, this
is required to make per-thread invoke queues later.
2024-04-29 12:10:48 +02:00
Pauli Virtanen
ac35ecf329 journal: prepend code location to messages at debug log levels
Debug and trace log messages are often written based on the stderr
logging, where code location is always visible.

journalctl does not show the code location without extra tricks,
which makes user-submitted debug logs from journal more cryptic.

Make journal log more similar to stderr logs by prepending the code
location and log level in the log message when the log topic
level is >= DEBUG.
2024-04-28 16:02:28 +03:00
Wim Taymans
3ae2ad59d2 module-rt: fix compiler warning
Fix warning about min/max potentially not being initialized.
2024-04-28 09:59:25 +02:00
Wim Taymans
972ac850b1 filter-chain: fix arguments of calloc 2024-04-28 09:53:08 +02:00
lunks
4706fc8a9b combine-stream tag forward 2024-04-28 07:51:02 +00:00
Pedro Nascimento
f1d1162a85 Add album to tag metadata 2024-04-28 07:49:32 +00:00
Barnabás Pőcze
d8da15c4ad test: add two minimal tests for pw_strv_parse() 2024-04-27 15:21:05 +02:00
Barnabás Pőcze
fa97a5b77c pipewire: utils: pw_strv_parse(): fix freeing in case of error
When iterating a pw_array of `T`, the iterator must be of type `T*`.
Otherwise the wrong pointer will be freed.

Fixes: 4a19a76dc1 ("utils: improve pw_strv_parse")
Reported-by: Coverity Scan <scan-admin@coverity.com>
2024-04-27 15:20:33 +02:00
Wim Taymans
7f4a0ba8cb conf: handle array of arguments in context.exec
We handeled "arg1 arg2 ... " before and used to split between spaces to
get the arguments for execvp but that doesn't work so well when there
are arguments with spaces.

Instead use JSON parsing to get the array of arguments. This make it
possible to use [ arg1 arg2 .. ] and quote each arg separately. You
can still use the old method and even double escape:

"\"arg1\" \"arg2 with spaces\"" or
 [ "arg1" "arg2 with spaces" ]
2024-04-26 17:11:21 +02:00
Wim Taymans
4a19a76dc1 utils: improve pw_strv_parse
Handle arbitrary string lengths in the array.
Handle allocation errors.
Handle and report JSON parsing errors.
2024-04-26 16:58:34 +02:00
Arun Raghavan
be97d1f766 doc: Some clarifications in Overview
Correct `context.spa-libs` as being pointing to the right SPA libs
(rather than loading them), and some other minor fixups.
2024-04-25 17:26:22 -04:00
Arun Raghavan
1b6a94db36 doc: Add more details in the Overview section
Cover basic concepts that might be useful while going to subsequent
sections. We might want to split this off into a subpage if it gets any
longer.
2024-04-25 13:04:54 -04:00
Wim Taymans
9844aed31b impl-node: avoid bitfield races
Move the bits that are used in the realtime thread away from the bits
from the main thread to avoid bitfield races. Move some fields in rt
structs to make it explicit that they are only to be modified from the
realtime threads.
2024-04-25 16:18:03 +02:00
Wim Taymans
6fdf09e83e impl-node: remove redundant variable 2024-04-25 15:58:34 +02:00
Wim Taymans
9bb5780cc2 meta: add explicit sync metadata and data type
Change the GenericFd data type to SyncObj. It's probably better to
explicitly state the data type than to make something generic. Otherwise
we would need to transfer the specific fd type somewhere else and there
is no room for that in the buffer and the the metadata is not a good idea
either because it can be modified and corrupted at runtime.

Add the SyncTimeline metadata. This contains 2 points on two timelines
(SyncObj datas in the buffer). The buffer can be accessed when the
acquire_point is signaled on the timeline and when the buffer
can be released, the release_point on the timeline should be signaled.
2024-04-25 09:55:19 +02:00
Wim Taymans
31de44f679 client-node: simplify some things
We don't need to get the supprt just to get the logger.
2024-04-25 09:25:51 +02:00
Wim Taymans
14badae669 context: delay starting the loop until acquired
This should be fine because it's not possible to get to the data-loop
without doing acquire.

The main purpose is to make it possible first for modules to be loaded
before the first thread is started.
2024-04-25 09:24:58 +02:00
Wim Taymans
ce47967be7 context: use acquire logic to fill data-loop in support
Each time someone asks for the support, acquire a new data loop and fill
it in the support.

Tweaks things a little so that acquire can be called with NULL dict, in
which case it will always use the first data loop. To be moved and
spread around loops one needs to explicitly pass a node.loop.name or
node.loop.class around.

This ensures that loading a plugin from the adapters and spa plugin
loaders always get the same loop when nothing or a node.loop.name is
given.

It doesn't quite work when a node.loop.class is given because then the loop
could be different between spa node and pipewire node. To fix this, we
need to improve the node loader code to make sure the same loop is used
everywhere.
2024-04-25 09:24:58 +02:00
Wim Taymans
1255d88969 context: handle NULL data loops
It's possible that the data loop failed to initialize and we should try
to avoid segfaulting on that.
2024-04-25 09:24:58 +02:00
Barnabás Pőcze
6a26e6dd3f treewide: fix some format string issues
Use the proper specifier, and cast to a known type where the type
is not guaranteed by any standard.

See #3975
2024-04-25 07:24:10 +00:00
Wim Taymans
bdca7cb1a0 conf: warn when match actions are missing 2024-04-24 12:32:40 +02:00
Barnabás Pőcze
8b35b00d82 meson.build: add -Werror=incompatible-pointer-types 2024-04-23 14:49:34 +02:00
Stefan Ursella
65e8bec8dd module-protocol-simple: handle 'node.name' property 2024-04-23 11:11:30 +00:00
Pauli Virtanen
29614a2c46 doc: fix workaround for old doxygen versions
Fix workaround for old doxygen versions, and put a version requirement
for Doxygen.
2024-04-23 10:59:24 +00:00
Wim Taymans
8633729a15 context: only use FNM_EXTMATCH when defined
alpine does not seen to have this.
2024-04-23 12:57:00 +02:00
Wim Taymans
2eb9a7543a thread: use pthread_setaffinity_np
The attribute version does not seem to be supported on alpine.
2024-04-23 12:12:33 +02:00
Wim Taymans
20b52d2082 keys: add and use some loop keys 2024-04-23 11:49:12 +02:00
Wim Taymans
0e13d088e7 module-ffado: only start after ports are configured
Don't start yet when the ports are pending configuration.

See #3968
2024-04-22 17:43:04 +02:00
Wim Taymans
64695a8611 stream: add functions to get the assigned data loop 2024-04-22 16:32:03 +02:00
Wim Taymans
c3d4abd7f1 modules: use acquire/release loop
Expose the acquire_loop/release_loop functions and use them in the
modules.

Make sure the nodes created from the module use the same data loop as
the module. We need to ensure this because otherwise, the nodes might
be scheduled on different data loops and the invoke or timer logic will
fail.
2024-04-22 16:19:02 +02:00
Wim Taymans
c12cf748b6 loop: move the loop name to pw_loop
That way, all loops have a name and we can move nodes to specific loops
even if they are not a data loop.
2024-04-22 15:18:26 +02:00
Wim Taymans
fbafaff31b context: reuse logic for pw_context_get_data_loop
Use the same logic for _get_data_loop() as _acquire_loop().
2024-04-22 11:16:53 +02:00