Commit graph

2921 commits

Author SHA1 Message Date
Wim Taymans
2410660299 modules: add vban midi support 2023-08-01 12:54:19 +02:00
Wim Taymans
8a72310f0b modules: make sure we increment the n_frames correctly 2023-08-01 12:53:35 +02:00
Wim Taymans
c9b7367f8f pulse-server: keep track of sink/monitor changes
For sink nodes, keep a separate device_info around for the sink and
the monitor source part of the node. Only emit changes for the sink
and monitor source part when it changed.

See #3388
2023-07-31 11:23:47 +02:00
Wim Taymans
3a8894d2a4 pulse-server: improve device lookup
Make sure don't handle names ending in .monitor as a valid sink (because
it's a monitor on the sink).

Make sure we don't return a sink (monitor) as a source accidentally but
only when explicitly requested by name with the .monitor extension.

Makes

pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -5%
pactl set-source-volume alsa_output.pci-0000_00_1b.0.analog-stereo -5%

fail as expected.
2023-07-28 18:26:41 +02:00
Wim Taymans
3f77c4e25f pulse-server: move the changed counter internally
We don't actually use this counter anywhere.

Change the counter to a mask that will contain object specific changes
to the params. This should make it possible to track what kind of
changes where done to the object and make it easier to emit the right
events later.
2023-07-28 13:31:02 +02:00
Wim Taymans
212fe59530 perm: add permission mask to global
Add a mask of possible permissions for a global.
Make sure the permissions of an object are limited to the global
mask.
2023-07-28 10:22:12 +02:00
Wim Taymans
39a1887a0b pulse-server: improve network and virtual node checks
Tag the sink/source as HARDWARE when it's not virtual, the presence
of a DEVICE_API property is not a good check.

Make a method to check if a node is a NETWORK sink/source to make it
use the same logic everywhere.
2023-07-26 11:51:48 +02:00
Wim Taymans
ce8f2c5d10 modules-vban: add vban sender and receiver
Fixes #3380
2023-07-25 18:36:48 +02:00
Wim Taymans
938bbc3039 protocol-pulse: document 2 other quirks 2023-07-25 12:47:58 +02:00
Wim Taymans
920bb7160e thread-loop: only signal when option is set
Add a thead-loop.start-signal option that will do a signal before
entering the thread loop. Doing the signal in all cases can confuse
apps that don't expect the signal.

Make module-rt use the thread-loop.start-signal.

Fixes #3374
2023-07-23 18:16:00 +02:00
Joan Bruguera Micó
55812195ce module-rt: error out on load if no bus is available
Since the recent changes to the RT module in Pipewire 0.3.75, some
applications such as those using OpenAL-Soft crash on startup if
neither the session nor the system bus is available. For example:

    bwrap --dev-bind / / \
          --bind /dev/null /run/dbus/system_bus_socket \
          --bind /dev/null $XDG_RUNTIME_DIR/bus \
          openal-info

Will result in a crash with the following error message:

    dbus[1626147]: arguments to dbus_message_new_method_call() were
    incorrect, assertion "path != NULL" failed in file dbus-message.c
    line 1373.
    This is normally a bug in some application using the D-Bus library.

The RT module previously failed to load if no bus was available, but
after the recent changes, the init. logic runs in a thread, and failing
to obtain the bus no longer causes the module to fail to load.

Then, functions called later such as `pw_rtkit_make_realtime` assume
the bus is available and try to use it, causing the error above.

Put the logic for obtaining and checking the bus back to `module_init`,
so the module fails to load again if no bus is available.
2023-07-22 02:22:18 +00:00
Wim Taymans
8d1b3f6f48 module-rt: first destroy the loop and then rtkit
Or else we might still try to use the rtkit in the thread.

See #3357
2023-07-20 16:17:14 +02:00
Wim Taymans
163fde0a69 module-rt: fall back to some defaults in case of error 2023-07-20 15:57:31 +02:00
Wim Taymans
7b24b3b687 module-rt: use lock for thread lookup and invoke
We should only call invoke from one thread at a time so fuse the
gettid of the thread and invoke into the lock.

See #3357
2023-07-20 15:43:41 +02:00
Wim Taymans
47f7802c2e module-rt: wait for thread start
So that we always invoke in the thread.

See #3357
2023-07-20 15:30:01 +02:00
Wim Taymans
86a52ea7b5 client-node: don't set io on our internal mix
We use the -1 mixer to keep track of the buffers and format after the
port mixer so we don't want to clear the io when we remove it.
2023-07-20 13:22:45 +02:00
Wim Taymans
66c09682c4 module-rt: make sure we change nice of main_pid 2023-07-20 12:16:13 +02:00
Wim Taymans
09277cbfa4 module-rt: do rtkit from a thread-loop
First check if we can adjust priorities with rlimits, if we can't and we
need to use rtkit, spawn a thread-loop to handle the rtkit stuff.

First do a pw_loop_invoke() to do the rtkit setup, including getting
some properties and then setting the nice level and rlimits.

Use pw_loop_invoke to queue rtkit realtime requests, this ensures we
always perform the requests after the setup and when the properties
are fetched.

See #3357
2023-07-20 12:03:29 +02:00
Wim Taymans
d74153a231 module-profiler: use an event to send out data
Don't use a timer but use an event to trigger a flush of the collected
data. We are now using a per-driver buffer and we don't want to make
this too large so make sure we flush the data quickly.
2023-07-20 12:01:38 +02:00
Wim Taymans
2211016516 module-rt: don't block on method calls
Don't block on the method calls to make realtime or high priority.
Those calls don't return anything and other errors (invalid method,
invalid arguments, no service,...) can be caught differently async.

Fixes #3357
2023-07-19 13:41:18 +02:00
Wim Taymans
fba6083aaa module-profiler: use per-driver ringbuffer
Make a ringbuffer per driver because each driver might run in a
different threads and because a shared ringbuffer can not be written to
from multiple threads. Assemble all the driver stats into one buffer
before sending out the profile info.
2023-07-19 11:35:03 +02:00
Wim Taymans
7ae59ff399 profiler: use rt_events
Track the driver nodes and listen for rt events to collect stats.
2023-07-19 11:35:03 +02:00
Wim Taymans
cfd3bcd6b2 impl-node: add rt_events
Remove the context_driver events and replace them with realtime node
events. The problem is that the realtime node events are emitted from
the node data thread, which can be different for each node and
aggregating them into context_driver events is not a good idea.

It's also nice for the stream drained event, which no longer needs to go
through the context_driver events.
2023-07-19 11:32:13 +02:00
Wim Taymans
5942c282a2 module-raop-sink: bump latency to 1.5sec
Make it work on the Audio pro link 1
2023-07-13 17:56:34 +02:00
Christian Glombek
d8dc89ad1a module-raop/rtsp-client: Pass content to reply function 2023-07-13 15:42:56 +00:00
Christian Glombek
6368b8cb87 module-raop-sink: Always log reply status 2023-07-13 15:42:56 +00:00
Christian Glombek
a4c6f9a27f Revert "module-raop: zero uppet timestamp bits"
This reverts commit 21d16b1ad5.

The change causes the sound of videos to be way out of sync when streaming from Fedora to Sonos.

It seems the issue is a device-specific quirk, and the change cannot be applied universally to all devices,
thus reverting until a better solution is found that does not affect other devices.
2023-07-13 15:42:56 +00:00
Christian Glombek
f54938d24a module-raop-discover: Two small fixes
- Fixes comment listing the RAOP encryption types.
  Option 2 is not available, and 4 is /auth-setup

- Fixes value for AAC-ELD codec
2023-07-13 15:42:56 +00:00
Wim Taymans
d225a192a1 Revert "modules: enforce equal library and compiler versions"
This reverts commit 697daeedf7.

This is too much, we should do better and only disallow incompatible
versions.
2023-07-12 11:16:56 +02:00
Wim Taymans
f1b0ab431e client-node: create global mix for initial ports
Don't only create the global mix for new ports but also for existing
ports. Tis fixes some buffer errors when using video ports.
2023-07-12 11:12:55 +02:00
Wim Taymans
697daeedf7 modules: enforce equal library and compiler versions
For all the modules that include the private header we require that the
library and compiler versions match.

Otherwise we might end up poking into new or old fields that got moved or
changed in the private struct and crash.

See #3243
2023-07-11 19:50:36 +02:00
Wim Taymans
ad71dd89a2 protocol-pulse: remove private.h include
See #3243
2023-07-11 19:37:49 +02:00
Wim Taymans
0dcbbcad01 client-node: do check for data_loop
so that we don't crash on older pipewire.

See #3243
2023-07-11 19:34:21 +02:00
Wim Taymans
5e2a7dbc4e modules: remove include of private.h
Remove some includes of private.h
Add some methods to get the mempool of client and context so that we can
remove direct access.
Move some things around.
Use methods to get pw_loop variables.

See #3243
2023-07-11 19:31:27 +02:00
Wim Taymans
dc07c2321b spa: add spa_ratelimit 2023-07-11 19:25:35 +02:00
Wim Taymans
17bc9d520e protocol-native: move compat_v2 to protocol 2023-07-11 16:13:38 +02:00
Barnabás Pőcze
7d6fc0f544 pulse-server: fix remove proplist command
`command` is never equal to `COMMAND_UPDATE_CLIENT_PROPLIST`,
instead, the check should be against `COMMAND_REMOVE_CLIENT_PROPLIST`.
2023-07-11 16:04:53 +02:00
Barnabás Pőcze
fe45786a5d treewide: add some examples for the spa_auto* macros 2023-07-11 14:23:53 +02:00
Wim Taymans
098ac51272 remote-node: don't init/release our special mix
We have SPA_ID_INVALID mix id for all ports to handle the formats and
buffers, we don't need to init/release the mix for this or else our
n_mix accounting is wrong and we might not clear the format right.
2023-07-10 16:56:58 +02:00
Wim Taymans
3e0050d1cd client-node: clear resource after freeing mem
Some of the mem unref might send a message to the client.

This is not actually the case right now but just to be safe for the
future.
2023-07-10 16:55:05 +02:00
Wim Taymans
a966d4806b improve debug 2023-07-10 16:52:39 +02:00
Wim Taymans
21d16b1ad5 module-raop: zero uppet timestamp bits
The Audiopro link1 seems to want to upper bits of the timestamp in
sync messages as 0. It still seems to work with Sonos.

See #3247
2023-07-06 17:01:09 +02:00
Wim Taymans
fdc860c71b protocol-native: give an error when loading twice
Instead of silently ignoring the problem. It's possible that it is
loaded with different settings, which would then silently be ignored.
2023-07-06 13:51:37 +02:00
Wim Taymans
48a892aeec module-rtp: support sess.ignore-ssrc globally 2023-07-06 13:08:21 +02:00
Wim Taymans
126e03ec73 rtp: add option to ignore SSRC
This is useful when there is a fixed receiver and the sender can be
restarted.
2023-07-06 12:55:28 +02:00
Wim Taymans
a9a9c72a0a client-node: create mix explicitly 2023-07-06 12:18:27 +02:00
Wim Taymans
fd1fd7a00f module-rtp-source: improve docs a little 2023-07-05 15:29:56 +02:00
Wim Taymans
895e516a75 pulse-server: support latency_msec in module-raop-discover
See #3247
2023-07-04 14:09:15 +02:00
Wim Taymans
4137ff656a module-rt: add option to disable rlimits/portal/rtkit 2023-07-04 11:11:48 +02:00
Wim Taymans
a373d7fde4 module-rt: add comment 2023-07-04 10:36:15 +02:00