Commit graph

2661 commits

Author SHA1 Message Date
Wim Taymans
ccfe439786 Cache node, port and device params
So that we don't need to keep asking when it didn't change.

Fixes #455
2020-12-09 17:07:34 +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
316a96d501 improve debug 2020-12-06 09:32:12 +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
3005d33113 module-device-factory: clean up properties in all cases 2020-12-03 10:24:38 +01:00
Wim Taymans
e98931023f device-factory: save factory_name for debug later
Make a copy of the factory_name, the properties it is inside are
destroyed when the device can't be created and we still need the
name for the debug message.
2020-12-03 10:16:38 +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
53adabea19 adapter: name Duplex port names capture/playback 2020-12-02 13:00:21 +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
f8059be328 adapter: small cleanup 2020-12-02 10:33:30 +01:00
Wim Taymans
4fb9e7eecc pulse-server: convert some more null-sink properties 2020-12-02 10:31:16 +01:00
Wim Taymans
1e9b152bb5 spa: make an extra level for arrays
Make a level with type info for the array elements.
2020-12-01 13:30:14 +01:00
Wim Taymans
73e0bb255a props: add container property to PROP_INFO
So we can mark a property should be inside a container.
Use this info in pw_stream to construct properties.
2020-12-01 12:58:18 +01:00
Wim Taymans
e995d3a832 media-session: store config data as json objects
So that we can use the json string escaping functions for keys
and use multiline config files.
2020-12-01 12:05:08 +01:00
Wim Taymans
19dc150643 media-session: don't emit metadata remove in shutdown
When in shutdown we destroy all objects but don't remove all
the metadata associated with them, like route settings.
2020-12-01 12:03:28 +01:00
Wim Taymans
19a67a2da5 media-session: add option to disable hardware volume
See #426
2020-12-01 10:45:24 +01:00
Wim Taymans
97ec1ce209 pw-cat: handle stream error
Exit when the stream is in error

See #430
2020-12-01 09:39: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
23bcc21240 media-session: remove metadata when default node is removed 2020-12-01 09:24:16 +01:00
Wim Taymans
f8e501169b media-session: count property changes correctly 2020-11-30 15:05:53 +01:00
Wim Taymans
95718792c4 pw-cli: implement set_param
You can do something like this to set some params:

pw-cli set-param 46 13 '{ "index": 5,
                          "props": { "mute": false,
			             "channelMap": [ "FL", "LFE" ]
				   },
	                  "direction": "Output"
			}'
2020-11-30 13:31:46 +01:00
Wim Taymans
3d93b2492c portal: improve error message 2020-11-29 16:51:33 +01:00
Wim Taymans
068be74f73 core: silence the errors
Just log a debug message, applications should decide if this is
fatal and log an error message
2020-11-29 16:25:41 +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
6e4c138238 properties: support properties from json object sting
Make pw_properties_new_string() work with a json object string.
This makes it possible to specify property strings as more complex
objects and escape characters.
2020-11-28 20:25:39 +01:00
Wim Taymans
62cdec8448 spa: move json parser to utils
Add unit test
Add escape function
2020-11-28 15:34:01 +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
9bf7be7984 client-node: increase some limits
See #416
2020-11-25 17:41:05 +01:00
Wim Taymans
261144c27f media-session: add /etc/pipewire/media-session.d/ dir
Placing files in it will activate options in the session manager.
2020-11-25 16:13:20 +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