Commit graph

1180 commits

Author SHA1 Message Date
Wim Taymans
20008b4846 pulse-server: actually fill in the maxlenght and fragsize.. 2021-02-04 14:53:28 +01:00
Wim Taymans
5aa7746c95 rework param updates
Make it possible to add a NULL param to the pending list. The NULL
param removes all previous updates.
When applying the updates, the NULL param removes the params from
the target list.

This has two advantages: it actually removes params that become
unreadable or that got removed and it allows us to update the target
list more efficiently in one single loop.
2021-02-04 13:26:35 +01:00
Wim Taymans
d85862af71 module-access: fall back to client requested access mode
When nothing else was decided, use the client requested access
method. The idea is that pipewire-pulse will detect a flatpak client
an performs the pipewire connection on behalf of the client,
requesting flatpak access restrictions.
2021-02-04 11:48:45 +01:00
Wim Taymans
8befe9e238 pulse-server: allow objects with priority 0 to be default
Also use the object with priority 0 as a best option when there
is not yet anything else.
2021-02-03 10:02:22 +01:00
Wim Taymans
b8ef0fc5bb module-access: make access.allowed an array
Reformat the config file a little
2021-02-02 17:48:25 +01:00
Wim Taymans
7c0081eb6f pulse-server: move memblock back to debug 2021-02-02 15:24:05 +01:00
Wim Taymans
0d2b9104d1 pulse-server: fix seek modes
Adjust missing when seeking and update the filled level correctly.

Fixes #653
2021-02-02 15:13:49 +01:00
Wim Taymans
2b44f42845 pass the complete buffer size to snprintf
There is no reason to pass size-1, snprintf will always put a \0
at the end.
2021-02-02 12:09:29 +01:00
Wim Taymans
748e205453 pulse-server: hand out silence when corked
In the corked state we simply hand out silence and don't try to
consume data from our ringbuffer.
Also set the corked state before syncing this with the data thread.

Fixes #662
2021-02-02 10:42:34 +01:00
Wim Taymans
80368ab8ae pulse-server: remove unused macro 2021-02-01 15:16:39 +01:00
Wim Taymans
60aef11072 pulse-server: if prebuf == 0, keep increasing playing_for
Or else the client pauses and time stops. Makes GStreamer
pipelines complete.
2021-01-30 21:04:07 +01:00
Wim Taymans
d1c0244512 pulser-server: keep updating missing bytes if prebuf == 0 2021-01-30 20:38:47 +01:00
Wim Taymans
d37742b410 pulse-server: handle prebuf better
prebuf == 0 should keep the read pointer updating
prebuf > 0 should pause
2021-01-30 19:48:01 +01:00
Wim Taymans
98dab7903a pulse-server: add buffer attributes as properties 2021-01-30 19:32:13 +01:00
Wim Taymans
7cc5026c02 pulse-server: remove useless _pop() 2021-01-29 16:58:17 +01:00
Wim Taymans
1ea8282a24 pulse-server: don't update ringbuffer in underrun 2021-01-29 10:45:26 +01:00
Wim Taymans
f8d57d03ca pulse-server: keep separate counter for missing bytes
And only increment when consumed from ringbuffer. In underrun we
play silence and don't ask for the missing bytes.

Fixes #616
2021-01-28 20:00:48 +01:00
Wim Taymans
09f423922d pulse-server: don't crash when alloc fails 2021-01-28 19:30:32 +01:00
Wim Taymans
8636c509f5 pulser-server: revert attempt to flush more
size is later used as the buffer size and might be too large.
2021-01-28 19:17:50 +01:00
Wim Taymans
b65b291bb2 pulse-server: make sure to count played samples
On underrun we need to keep on counting playing_for so fill this
in underrun and don't add this to missing to avoid double counting.

See #639
2021-01-28 18:59:03 +01:00
Wim Taymans
ac3555d6fc pulse-server: skip underrun more aggressively
Skip all of the underrun bytes immediately.

See #638
2021-01-28 17:56:32 +01:00
Wim Taymans
e172effe71 pulse-server: log the amount of underrun bytes 2021-01-28 17:56:07 +01:00
Nicolai Syvertsen
ebcdfe8f5d pipewire-pulse: better default null sink description
This includes the sink_name and media class.
2021-01-27 19:09:21 +01:00
Nicolai Syvertsen
c092f0c1c4 pipewire-pulse: null sink must have a description
Certain pulseaudio clients crash if this is unset
2021-01-27 15:31:54 +00:00
Wim Taymans
0be851739f improve config parsing
Use get_string to get object keys in a more generic way.
2021-01-27 15:36:32 +01:00
Wim Taymans
fc68e901e5 pulse-server: don't count playing in underrun 2021-01-27 15:33:01 +01:00
Wim Taymans
47d59ac4d9 pulse-server: improve debug 2021-01-27 13:48:10 +01:00
Wim Taymans
c913abffef pulse-server: Fix underrun check
We're underrun when we can't produce the required number of samples.

See #617
2021-01-24 20:33:30 +01:00
Wim Taymans
96d98c7955 pulse-server: express latency in samples in all cases 2021-01-24 20:33:30 +01:00
Pauli Virtanen
59452a0904 pulse-server: send server change events when default nodes change
Send server change events to subscribers, when default nodes change due
to some nodes being added/removed/changed, also if there is no metadata
change.  Make sure the event is consistent with the result from
find_device at the time.

Previously, these were not necessarily sent, or information from
find_device immediately after the event might not reflect the change
yet.
2021-01-23 07:17:19 +01:00
Wim Taymans
14dcfb8a28 pulse-server: find the target device in play_sample
Use the regular logic to find the target device for play sample so
that it supports @DEFAULT_SINK@ etc.

See #612
2021-01-22 19:53:46 +01:00
Wim Taymans
652a4ae26d pulse-server: use stream flags to tune latency
Use the early_requests and adjust_latency flags to choose the right
latency values, just like what pulseaudio does.
2021-01-22 11:39:47 +01:00
Wim Taymans
486d797735 pulse-server: use rate match to feed samples
Fixes #595
2021-01-21 13:39:54 +01:00
Wim Taymans
d9af97899c pulse-server: don't destroy clients playing a sample
When a sample is playing a cached sample and it disconnects we should
wait until all the pending samples are finished otherwise we stop
their playback and get a chopped or broken sample.

See #595
2021-01-21 11:53:06 +01:00
Wim Taymans
dcc5779cd6 pulse-server: put valid volume in sample info 2021-01-21 09:42:04 +01:00
Wim Taymans
44cad2d533 pulse-server: implement suspend 2021-01-20 20:33:16 +01:00
Wim Taymans
4084db8641 module-access: Relax access check errors
Assume -EACCES is a normal thing when checking /proc/<pid>/root and
continue with just an info message. Log a warning and assume
flatpak for all other errors.

Fixes #432
2021-01-20 12:12:56 +01:00
Wim Taymans
384b8a4593 pulse-server: Only allow one memblock in the queue
Allow only one memblock in the output queue. Otherwise, if the
client is for some reason not reading from the socket, we would queue
an unlimited amount of messages until we get killed by OOM.

Change some warn to debug in the process function for things we
handle from the non-rt thread.

Fixes #488
2021-01-20 10:41:34 +01:00
Wim Taymans
96a2a2b4e2 pulse-server: Use the spa json implementation 2021-01-19 16:57:33 +01:00
Wim Taymans
0e5ad1c0a4 module-rtkit: log the dbus error as a warning 2021-01-19 15:02:37 +01:00
Wim Taymans
abfc67a3ca Revert "remove mlock and use MAP_LOCKED"
This reverts commit ab91e94b59.

When no memory can be locked, the mmap fails with -EAGAIN.

Fixes #592
2021-01-19 14:47:52 +01:00
Wim Taymans
ab91e94b59 remove mlock and use MAP_LOCKED
The warnings are confusing and a properly tuned system would have
the limits set correctly.
2021-01-19 11:59:21 +01:00
Wim Taymans
89641785c3 pulse-server: keep global free message pool 2021-01-19 11:06:00 +01:00
Wim Taymans
7e5441fbb3 pulse-server: implement stats 2021-01-19 10:52:29 +01:00
Pauli Virtanen
d46c58e958 pulse-server: behave like PA when moving streams to default
Pulseaudio unsets the preferred sink/source when stream is moved to a
default target. Emulate this behavior by setting + unsetting
target.node, which informs policy-node to move it accordingly.
2021-01-18 22:40:27 +02:00
Wim Taymans
02931df835 pulse-server: start with underrun_for = -1
PulseAudio starts with underrun_for equal to -1, sets it to 0 when
something was played and increments it from then on with the number
of bytes played.
2021-01-18 17:16:37 +01:00
Wim Taymans
55915f420e pulse-server: on underrun, pretend we read from the ringbuffer
Also update the ringbuffer read pointer on underrun.
2021-01-18 16:24:46 +01:00
Wim Taymans
6b2ec6d619 pulse-server: require at least 32 samples per buffer 2021-01-18 16:24:00 +01:00
Wim Taymans
235d25316c pulse-server: make sure we never try to ask more than tlength 2021-01-18 16:23:24 +01:00
Wim Taymans
76aff7640f pulse-server: improve variable name 2021-01-18 16:22:30 +01:00