Commit graph

155 commits

Author SHA1 Message Date
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
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
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
3b20e0f9e7 pulse-server: fix lookup of module 2020-11-26 09:49:16 +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
cc7f91db19 pulse-server: actually wait for sync to complete
Wait for sync to complete before we start emiting new objects.
Add some more debug
2020-11-24 11:28:29 +01:00
Wim Taymans
2cd59fdf8b pulse-server: don't send invalid format and channels 2020-11-24 10:18:17 +01:00
Wim Taymans
0c66b5677b pulse-server: init volume/channelmap correctly in stream-restore 2020-11-24 09:54:42 +01:00
Wim Taymans
2d71d02f40 pulse-server: only debug packets, not data messages
See #405
2020-11-24 09:10:32 +01:00
Haochen Tong
648dfc0250
pulse-server: end the statement with semicolon 2020-11-23 23:27:53 +01:00
Wim Taymans
d56e759166 pulse-server: don't send NULL profile name in port info 2020-11-23 17:11:43 +01:00
Elliott Sales de Andrade
6224068586 Fix some possible leaks. 2020-11-23 15:36:08 +00:00
Wim Taymans
f95f278067 pulse-server: use channelmap
Convert to an from pulse enum to id in the message layer so that we
can always just deal with native spa types.
Use the channelmap in stream-restore
Parse the channelmap from properties.
2020-11-23 15:37:18 +01:00
Wim Taymans
2b8cc5b587 pulse-server: implement stream restore extension
Makes the system sounds volume settings work

See #377
2020-11-23 10:46:02 +01:00
Wim Taymans
4f0f5fccc9 pulse-server: keep metadata for the routes
Pass all metadata objects to the pulse-server and keep track of
some. Keep route restore info in properties.
2020-11-23 10:44:12 +01:00
Wim Taymans
d5680a119f pulse-server: Fix REQUEST missing bytes
Also count the amount of underrun bytes as missing so that we request
them from the client.

Provide one fragment of minreq when we underrun instead of the full
buffer size.

Fixes #395
2020-11-20 14:57:18 +01:00
Wim Taymans
12d831fc39 pulse-server: request dbus name
Request the org.pulseaudio.Server dbus name. This makes gnome-shell
reconnect automatically.
2020-11-20 11:52:57 +01:00
Wim Taymans
4d085816ef pulse-server: improve debug 2020-11-19 17:45:19 +01:00
Wim Taymans
505ae98b0f pulse-server: fix sink-input mute 2020-11-19 11:56:51 +01:00
Wim Taymans
908dc6b10f pulse-server: don't add queued samples
It makes things worse
2020-11-18 20:21:14 +01:00
Wim Taymans
3eca7557f8 pulse-server: fix timestamp in latency query
We are supposed to place the current timeofday as the timestamp
in the reply.
2020-11-18 20:15:20 +01:00
Wim Taymans
4cc466ad64 pulse-server: filter out redundant subscribe messages 2020-11-18 15:00:38 +01:00
Wim Taymans
c50b5bb072 pulse-server: implement flush for record stream 2020-11-17 17:39:30 +01:00
Wim Taymans
cd25a1e5e7 pulse-server: PLAY_SAMPLE does not need a valid sink id or name 2020-11-17 17:14:28 +01:00
Wim Taymans
813af52072 pulse-server: play the sample on the right sink 2020-11-17 12:59:09 +01:00
Wim Taymans
ff1b49eb81 pulse-server: add skeleton extension for stream-restore
Makes the system-volume slider show up again in pavucontrol
and gnome-control-setting. Does not work yet, though.
2020-11-17 12:33:09 +01:00
Wim Taymans
11a57c9302 pulse-server: add debug level to message_dump 2020-11-17 12:33:09 +01:00
Wim Taymans
f818da96fc pulse-server: use define for monitor flags 2020-11-17 12:33:09 +01:00
Wim Taymans
242cddd371 pulse-server: add support for proplist value conversion 2020-11-17 12:33:09 +01:00
Wim Taymans
5849bd7c60 pulse-server: try to flush immediately
When we queued new data and were not flushing already, try to flush
the data immediately.
2020-11-16 17:05:11 +01:00
Wim Taymans
0fada77433 pulse-server: delay flushing messages
Delay flush of messages to better match pulseaudio. We can later
also filter duplicates and redundant events.
2020-11-16 16:59:55 +01:00
Wim Taymans
55bd34c9e7 pulse-server: always ask for tlength samples after flush 2020-11-16 15:47:13 +01:00
Wim Taymans
dcda6c259f pulse-server: send drain only once 2020-11-16 15:42:04 +01:00
Wim Taymans
af41e3423d pulse-server: handle recv of 0 bytes
0 bytes from recv means EOS and we can disconnect the client instead
of looping forever.
2020-11-16 15:36:51 +01:00
Wim Taymans
9f9be7d7f2 pulse-server: clean up killed and errored streams
Make a stream in error or unconnected as done and run the cleanup
loop to destroy them. Fixes leaks caused by pavucontrol.
2020-11-16 13:31:15 +01:00
Wim Taymans
78ab2c3cad pulse-server: pass right object to TAG_PROPLIST 2020-11-16 11:10:41 +01:00
Wim Taymans
0ff7321a65 pulse-server: send right id in PLAY_SAMPLE reply
Also handle errors.
2020-11-15 21:02:49 +01:00
Wim Taymans
80e063c6bc pulse-server: add duration to sample 2020-11-14 13:36:26 +01:00
Wim Taymans
8f1eed6ab1 pulse-server: implement sample introspection 2020-11-14 13:31:07 +01:00
Wim Taymans
827d3ff271 pulse-server: set refcount on sample 2020-11-14 13:30:35 +01:00
Wim Taymans
13a1049abf pulse-server: also handle @DEFAULT_*@ in GET_*_INFO 2020-11-13 20:20:33 +01:00
Wim Taymans
b7b7c3817e pulse-server: use cleanup event
Signal event to trigger cleanup from places where we are not allowed
to destroy objects, like from their signals.
2020-11-13 19:33:12 +01:00
Wim Taymans
b447167339 pulse-server: actually play the sample from the cache 2020-11-13 18:19:56 +01:00