Commit graph

217 commits

Author SHA1 Message Date
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
Wim Taymans
be9c2f9757 pulse-server: account for underrun
Not quite sure, it needs more investigation but It seems the time
needs to increase when underrunning.

See #510
2021-01-17 21:07:31 +01:00
Wim Taymans
bf25fc1388 pulse-server: always use rate_match value when available
The minreq is just a fallback for when we don't know the exact
amount of required samples to consume from the ringbuffer.
2021-01-16 17:16:02 +01:00
Wim Taymans
4cba8fc7e9 pulse-server: implement set_sample_rate 2021-01-12 13:14:05 +01:00
Wim Taymans
7ae1ea1420 pulse-server: set default channel_map
Set a default channel map when not otherwise set. Makes pulseeffects
work.
2021-01-09 12:46:00 +01:00
Wim Taymans
f94d2e7da5 pulse-server: use rate match to read from ringbuffer
Use the rate match io are to read the exact amount of samples we
need for this cycle from the ringbuffer. We can then request lower
latency.

There will also be less buffering in the audioconverter, which makes
our timestamps more accurate.
2021-01-08 17:22:15 +01:00
Pauli Virtanen
b76bcdc70d pulse-server: NULL means default only if id==INVALID
The default values also only apply for sources/sinks which have
defaults.
2021-01-04 23:54:48 +02:00
Wim Taymans
518365e350 pulse-server: fix module arg parsing
Parse the module arguments according to the pulseaudio syntax,
not our own syntax (which requires "" around a , delimter). Fixes
audio.position=FL,FR argument.

See #527
2021-01-04 17:25:28 +01:00
Wim Taymans
0bf7b07d91 pulse-server: improve warning 2021-01-02 20:37:44 +01:00
Wim Taymans
f7a7feea4e pipewire-pulse: use defines for our keys 2020-12-18 17:19:24 +01:00
Wim Taymans
d2a5f5c1ae pulse-server: also cleanup sample when error
Remove the separate error event and merge with the done event with
error code. This then also marks the sample as done when in error
so that it gets cleaned up properly.

Fixes #486
2020-12-18 09:50:12 +01:00
Wim Taymans
1a690a0cbb pulse-server: limit writes to ringbuffer
We can't write more to the ringbuffer than its maxsize. Some clients
send more than the negotiated maxsize and cause a crash if we don't
clamp.

See #440
2020-12-17 19:39:12 +01:00
Wim Taymans
e0580fedc1 pulse-server: handle seek flags and offset
Fixes #485
2020-12-17 16:49:17 +01:00
Wim Taymans
00295b64b5 pulse-server: don't write too small buffers
Fixes #399
2020-12-11 18:09:21 +01:00
Wim Taymans
bcf6c0986e pulse-server: read in chunks of minreq from the ringbuffer
Don't read too large chunks from the ringbuffer but in minreq
increments. This is more what pulseaudio does.

Fixes #463
2020-12-11 12:45:01 +01:00
Wim Taymans
d3db703f77 pulse-server: improve some debug 2020-12-11 12:39:46 +01:00
Wim Taymans
4ef0ef464e pulse-server: warn for unsupported seek flags 2020-12-11 10:39:15 +01:00
Wim Taymans
5469ac19ab pulse-server: map node.description to device.description
Makes Teamspeak work

Fixes #462
2020-12-08 12:20:47 +01:00
Wim Taymans
5a94bfc6cd pulse-server: add some more supported channel_map values 2020-12-07 21:52:09 +01:00
Wim Taymans
157d6de607 pulse-server: convert channel_map channels
channel_map contains pulseaudio channel names, convert them to
pipewire channel ids and then into pipewire channel names for the
null sink.
2020-12-07 20:29:22 +01:00
Wim Taymans
203679f27e pulse-server: support lookup of monitor names
Support setting a monitor as default source.
2020-12-05 19:16:04 +01:00
Wim Taymans
cfe43cbea7 pulse-server: handle NULL as default sink/source
Fixes #444
2020-12-05 13:30:02 +01:00
Wim Taymans
8c4145291e pulse-server: name and id can't be both set in volume/mute 2020-12-05 13:27:42 +01:00
Wim Taymans
0fba936b06 pulse-server: use defines for default sink/source 2020-12-05 13:26:59 +01:00
Wim Taymans
c6663b6a18 pulse-server: fix set-port
Parse the name as a string
Pass the device id and port_id in the right properties
Return an error when unknown port was specified.

Fixes #443
2020-12-04 15:41:11 +01:00
Wim Taymans
745b7ee900 pulse-server: tweak some parameters to get lower latency 2020-12-04 15:11:35 +01:00
Wim Taymans
ecc975d089 pulse-server: make sure our buffers are large enough
Allocate the buffers a bit larger so that we can handle a client that
sends a bit more data and we don't underrun.
2020-12-04 12:16:07 +01:00
Wim Taymans
3c2ab98a2a Add support for virtual source
A virtual source is usually implemented with a null-sink, it looks
like a source to pulseaudio clients but just forwards what it gets
as input.

Make sure the port names make sense.

You can use the null sink now as:

pactl load-module module-null-sink sink_name=source object.linger=1
     media.class=Audio/Source/Virtual channel_map=FL,FR,RL,RR

     This creates a node with "input" and "capture" ports and looks
     like a virtual source for pulseaudio clients.

pactl load-module module-null-sink sink_name=source object.linger=1
     media.class=Audio/Sink channel_map=FL,FR,RL,RR

     This creates a node with "playback" and "monitor" ports and looks
     like a virtual sink for pulseaudio clients.

pactl load-module module-null-sink sink_name=source object.linger=1
     media.class=Audio/Duplex channel_map=FL,FR,RL,RR

     This creates a node with "playback" and "capture" ports and looks
     like a virtual source and sink for pulseaudio clients.
2020-12-02 15:42:56 +01:00
Wim Taymans
e2f0ab5710 pulse-server: handle channel_map null-sink option 2020-12-02 15:39:31 +01:00
Wim Taymans
d6127a4745 handle Duplex media class
Audio/Duplex is both a source and a sink. Name the ports as input/output
and make sure we list them in the source and sink lists in pulse-server.
2020-12-02 11:44:19 +01:00
Wim Taymans
b0a717c95e pulse-server: use right prefix for object check 2020-12-02 10:59:25 +01:00
Wim Taymans
4fb9e7eecc pulse-server: convert some more null-sink properties 2020-12-02 10:31:16 +01:00
Wim Taymans
8b048279f1 pulse-server: handle error during create
Use the create-tag in the error when the stream fails. This way the
client can know when something failed during create.

See #430
2020-12-01 09:37:40 +01:00
Wim Taymans
b8300c663b improve some errors
Silence some -ENOENT warnings, they can happen when the object we
are introspecting is destroyed
2020-11-29 16:22:50 +01:00
Wim Taymans
6e0fed37b4 pulse-server: also handle planar formats
Also handle streams with planar formats. Just pretend that they
are interleaved, it does not really matter.
2020-11-27 15:39:59 +01:00
Wim Taymans
350fa39aba pulse-server: try to convert name to id when selecting
Obsoletes !327
2020-11-27 15:04:06 +01:00
Wim Taymans
ea84177a2e pulse-server: make sure we have active_name/profile set 2020-11-26 12:05:32 +01:00
Wim Taymans
3b20e0f9e7 pulse-server: fix lookup of module 2020-11-26 09:49:16 +01:00
Wim Taymans
6235c8c0f2 pulse-server: don't set object.linger by default 2020-11-26 09:35:29 +01:00
Wim Taymans
1934df7307 pulse-server: implement OBJECT_LINGER
Use OBJECT_LINGER in module-load to make sure the module stays loaded
after the client disconnects.
Implement linger in adapter and node-factory
2020-11-26 09:28:22 +01:00
Wim Taymans
0fe77d39ce pulse-server: fallback to name if no description is set 2020-11-26 09:27:19 +01:00
Wim Taymans
765ce0564f pulse-server: don't crash with NULL arguments in module-load 2020-11-26 09:26:29 +01:00
Wim Taymans
64be5bb617 pulse-server: fix debug line 2020-11-25 21:05:49 +01:00
Wim Taymans
38fcc64e1f pulse-server: check if route param changed
Only mark the sink/source changed when the card route param
changed. Avoids triggering sink/source updates when nothing
changed.

See #298
2020-11-24 20:02:46 +01:00
Wim Taymans
3d6e87832d pulse-server: after new event, clear changes
Remove any pending changes after we emited the new event.
2020-11-24 19:29:49 +01:00
Wim Taymans
a65d4d04c3 pulse-server: collect updates and apply after sync
Collect all object updates in a separate list. When we collected
all updates in sync, apply them and then signal notifications.
This ensure we have a consistent object model.
2020-11-24 15:31:20 +01:00
Wim Taymans
6ab25c6904 pulse-server: fix parsing of format-info
Fixes totem playback
2020-11-24 15:11:05 +01:00