Commit graph

908 commits

Author SHA1 Message Date
Barnabás Pőcze
0f70256230 pulse-server: include "reply.h" in "reply.h"
So that definitions are checked against declarations.
2023-07-03 19:40:31 +02:00
Barnabás Pőcze
3b4a255dec pulse-server: format_info_from_spec(): remove redundant decl 2023-07-03 19:40:31 +02:00
Wim Taymans
c34a987076 pulse-server: add option to disable fix_ flags
Document the pulse.fix properties.
Add an option to disable handling of the FIX flags when the pulse.fix.
property is set to an invalid value/0.

See #3317
2023-07-03 16:39:32 +02:00
Wim Taymans
f612ffe8e4 pulse-server: use the fixed rate for graph rate
We need to use the format rate for calculating the buffer size and
latency but the fixated rate for the graph rate.

See #3317
2023-06-30 12:34:25 +02:00
Wim Taymans
91ac3acf3d pulse-server: debug the fixed format/rate/channel 2023-06-30 12:34:25 +02:00
Barnabás Pőcze
2abd3432b8 pulse-server: module-combine-sink: remove redundant member
`module_combine_sink_data::info` member has not been used
since 782e0dfb1f, so remove it.
2023-06-29 23:57:48 +02:00
Wim Taymans
f9efc63a04 pulse-server: make sure we have a card_name
Clients crash if the card name is NULL so make sure we generate
a backup name.
2023-06-28 16:18:44 +02:00
Wim Taymans
0156d63109 audioconvert: don't negottiate rate when resample is disabled
This will leave the negotiated rate 0 when parsed and instructs the
stream to follow the graph rate.
2023-06-26 11:23:29 +02:00
Wim Taymans
b464d2145d pulse-server: don't override initial volume/mute
When we are asked to apply the initial volume/mute, don't overwrite it
with the default volume.

Fixes #3306
2023-06-23 09:51:09 +02:00
Wim Taymans
989c61e8a1 pulse-server: add virtual-sink and virtual-source
Although those are example elements, they actually work and we can
implement them as well.
2023-06-16 12:18:36 +02:00
Wim Taymans
a0a32af386 pulse-server: add 2 quirks to block sink/source updates
See #1517
2023-06-15 11:45:43 +02:00
Wim Taymans
8eb6c0ec33 pulse-server: handle special device names in play/record
@DEFAULT_MONITOR@ finds the default sink but returns is_monitor true.

Always lookup the device based on the name and index. This transform
the special device names like @DEFAULT_XXX@ to the default device.

Always use the found device name as the target. Make sure to set the
CAPTURE_SINK property when dealing with a monitor.

Fixes #3284
2023-06-11 18:37:24 +02:00
Wim Taymans
004d3d900a pulse-server: improve debug 2023-05-24 18:01:19 +02:00
Pauli Virtanen
38860630a5 pulse-server: module-gsettings: check schemas exist before starting
Check the required GSettings schemas exist before trying to use them, as
g_settings_new aborts if they are missing.  Instead, make it just log
errors.
2023-05-21 10:18:56 +00:00
Wim Taymans
782d5af050 pulse-server: add server.dbus-name option
Add an option to set the name for the dbus service. Setting an
empty name will skip dbus registration.

See #2987
2023-05-17 12:16:16 +02:00
Wim Taymans
7b0c019a2b pulse-server: include rate/format for tunnel 2023-05-12 10:11:17 +02:00
Wim Taymans
7eeb9a63f8 pulse-server: remove / when no target object 2023-05-12 10:11:01 +02:00
Wim Taymans
150e7031ae pulse-server: improve channel formatting 2023-05-12 10:09:42 +02:00
Barnabás Pőcze
2ba9881b4d pulse-server: pending-sample: handle client disconnection correctly
Previously, a client disconnecting while a sample was playing could
lead to issues. For example, if a client disconnected before the
"ready" signal of the sample-play arrives, `operation_new_cb()`
would be called and that would try to use the client's pw_manager,
however, that has previously been destroyed in `client_disconnect()`.

If the client disconnected after the "ready" signal but before the reply
has been sent, then `sample_play_ready_reply()` would never be called
since operations are completed via the client's pw_manager which
would already be destroyed at that point.

Fix this by installing a listener on the client, and properly
cancelling the operation and making sure that the pending_sample
is correctly destroyed.
2023-05-10 18:57:20 +00:00
Barnabás Pőcze
bd510bf602 pulse-server: pending-sample: add on_ prefix to event handlers 2023-05-10 18:57:20 +00:00
Barnabás Pőcze
0395424461 pulse-server: add operation_free_by_tag() 2023-05-10 18:57:20 +00:00
Barnabás Pőcze
dd5f0e6bea pulse-server: pending-sample: only start operation if not replied already 2023-05-10 18:57:20 +00:00
Barnabás Pőcze
c25b6c973e pulse-server: pending-sample: factor out freeing logic 2023-05-10 18:57:20 +00:00
Barnabás Pőcze
cc702dac69 pulse-server: pending-sample: only send reply once 2023-05-10 18:57:20 +00:00
Barnabás Pőcze
edad053911 pulse-server: pending-sample: set replied flag on error
Set the `pending_sample::replied` flag when an error reply
is sent to the client.
2023-05-10 18:57:20 +00:00
Barnabás Pőcze
dd7c47bb3d pulse-server: pending-sample: rename ready to replied
Rename `pending_sample::ready` to `pending_sample::replied` because
it is set when a reply is sent, not when the ready signal comes.
2023-05-10 18:57:20 +00:00
Barnabás Pőcze
e37da42632 pulse-server: move sample playing into pending-sample.c 2023-05-10 18:57:20 +00:00
Wim Taymans
7da4eb13f7 pulse-server: add some module docs 2023-05-05 15:41:44 +02:00
Wim Taymans
2be49838d0 pulse-server: remove some warnings 2023-05-04 19:11:21 +02:00
Wim Taymans
b13e9f7a8d pipewire-pulse: add module-jackdbus-detect 2023-05-04 18:46:36 +02:00
Wim Taymans
37210794d8 pulse-server: rework audioinfo argument parsing
Make a new method to parse parts of the audioinfo based on custom
keys, leaving unparsed values to defaults. Implement the generic audio
parsing with this.

We can then remove some duplicate code where the audio keys didn't match
or where only parts of the info needed to be parsed.

Also make a method to serialize the audioinfo to properties and use that
when making arguments to load the modules.

Avoid doing some custom property serialization, move all key/values into
properties and serialize those with the generic functions.
2023-05-04 18:43:08 +02:00
Pauli Virtanen
10352dbaa5 pulse-server: combine-sink: add latency_compensate option
Add option to turn on latency compensation in module-combine-stream.
2023-05-03 11:22:01 +00:00
Wim Taymans
b84083a1bb pulse-server: improve echo-cancel aec_args parsing
Actually convert the aec_args argument to something that the
echo-canceler will understand. Add the beamforming and mic-geometry
and target_direction properties.
2023-04-13 17:38:26 +02:00
Wim Taymans
148569279b pulse-server: add enable_opus support in rtp-send 2023-04-06 12:10:46 +02:00
Wim Taymans
7bddb80c93 pulse-server: improve Buffer param
We need to be able to fill up one quantum of data when the stream
requests it so suggest a quantum_limit buffer size. Normally, the
converter will further improve the buffer size parameters when
resampling is involved but this is a good default for when working in
passthrough mode.

We don't actually use the stream buffering features so we're happy with
just 1 or 2 buffers.
2023-03-30 10:13:43 +02:00
Volker Rümelin
92a41ba21f pipewire-pulse: generate silence on underflow correctly
Filling a buffer with zeros to produce silence is wrong for
unsigned sample formats and compressed sample formats. This is
silence with an offset. A silent stream with unsigned or
compressed samples mixed with another stream produces a clipped
stream. To hear the problem start QEMU with

qemu-system-x86_64 -accel kvm -smp 4 -m 4096 \
 -audiodev pa,id=audio0,out.mixing-engine=off \
 -machine pc,pcspk-audiodev=audio0 \
 -device ich9-intel-hda -device hda-duplex,audiodev=audio0 \
 -boot d -cdrom Fedora-Workstation-Live-x86_64-37-1.7.iso

on a host configured to use PipeWire and start audio playback on
the guest HDA device.

PA_SAMPLE_U8 is the only unsigned PulseAudio sample format.
There is no need to care about unsigned multi-byte formats.

Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
2023-03-24 19:53:26 +01:00
Wim Taymans
fb8709716c core: add bound_props event
this event extends the bound_id event and sends the global properties as
well.

This can be used to get the object.serial, for example.

It can also be used in the future to let the server generate unique
property values, like the node.name, and let the client know about the
new property value.
2023-03-21 17:22:27 +01:00
Wim Taymans
2ce722e740 pulse-server: handle NULL args in load-module 2023-03-16 11:53:59 +01:00
Gleb Popov
1217dee35d Fix module-zeroconf-publish.c build on FreeBSD. 2023-03-15 16:53:41 +00:00
Wim Taymans
bc6c19ccdf pulse-tunnel: translate pulse error to spa error
Pulseaudio has its own error enumeration, convert them to spa errors so
that we report the right errors.
2023-03-13 12:26:20 +01:00
Wim Taymans
3208677ec3 pipewire-pulse: port module-rtp-send
In addition to loading the rtp-sink module, we now also need to load the
SAP module to announce this stream with SAP.
2023-03-09 13:14:22 +01:00
Wim Taymans
77b7c3d180 pipewire-pulse: port module-rtp-recv
Use the new module-rtp-sap to listen and create RTP streams from
SAP.
2023-03-09 13:14:22 +01:00
Wim Taymans
ddbb54fd6f pulse-server: reduce min quantum to 128/48000
some games want 5ms latency and the 256/48000 previous min value was
5.3ms and just a little too high, reduce this because we probably can.
2023-03-08 11:10:39 +01:00
Wim Taymans
dd80b76cb0 pulse-server: escape module values
We need to unescape the module argument values, just like pulseaudio
does.  We might end up with invalid escape sequences for the JSON
parser.

Fixes #3071
2023-03-07 13:15:49 +01:00
Wim Taymans
ab94a71e3c pulse-server: improve channel_map parsing
Add some more common channel name shortcuts supported by pulseaudio.
Make sure we match the full channel-name, not just the prefix.
Generate an invalid channel map when an invalid channel name was
given instead of a partial channel map.
2023-03-01 13:44:24 +01:00
Wim Taymans
8a24f58cd1 pulse-server: improve format parsing
The pulseaudio format should be parsed case insensitive.
Add some more pulseaudio supported formats.
2023-03-01 13:44:24 +01:00
Wim Taymans
03abce72e5 pulse-server: error on invalid format
When an invalid format is given as a module argument, generate an error.
2023-03-01 13:44:24 +01:00
Wim Taymans
eb797cac48 pulse-server: improve FIX_ flag handling
When a stream uses the FIX_ flags it should negotiate to the format of
the sink or source it connects to. To do this, look up the sink or
source and look at the format, use this as the allowed format for the
stream when the FIX flags are set.

Make it still possible to override with with properties. Use
audio.position to make it possible to set a channelmap override.
2023-02-23 12:53:58 +01:00
Wim Taymans
ad6ab7e0b7 pulse-server: refactor channel position parsing 2023-02-23 12:39:36 +01:00
Wim Taymans
c74efea51e pulse-server: pass format to the null-sink
The effect is that the null-sink will report the given format in the
Sample Specification, which is what some applications might expect when
they pass a format parameter.
2023-02-23 10:34:07 +01:00