Commit graph

2284 commits

Author SHA1 Message Date
Wim Taymans
4660e16d5b meson: enable some more warnings
Fix some warnings
2022-01-27 11:07:17 +01:00
Gleb Popov
44b18b86cd Fix build on FreeBSD by defining bswap_64. 2022-01-26 14:37:19 +03:00
Wim Taymans
8d37451fb8 alsa: ensure period_size is not 0 2022-01-24 12:44:16 +01:00
Pauli Virtanen
a67f38f790 spa/v4l2: better device product names on current kernels
udev/kernel sometimes give "Video Capture N" as ID_V4L_PRODUCT, which is
bogus as a device product name.  The ID_MODEL* field seem to always have
a sensible product name.

Get device.product.name always from ID_MODEL*, and use ID_V4L_PRODUCT
only as the last fallback.
2022-01-23 12:57:11 +00:00
Pauli Virtanen
e1bc1c4569 alsa-udev: postpone emitting if pcm devices are busy, retry later
There is a race condition on udev permission changes (e.g. switching
VTs), when pipewire from one user closes devices, and the other process
from second user tries to open them.  The close/open are not ordered, so
opening a device may fail in alsa-acp-device.c resulting to missing
devices/profiles.

Address this by trying to open devices already in alsa-udev.c. If some
devices are busy, do not emit the device info yet, but retry after a
timeout.  If it still fails, go ahead emitting the device, even if some
profiles may be missing.  The retry with delay should be enough to solve
the race almost always.
2022-01-23 12:33:57 +00:00
Pauli Virtanen
0a55085b14 bluez5: allow setting initial profile to off
This is useful if the session manager wants to set the profile itself,
and has special handling for the off profile.
2022-01-22 20:01:00 +00:00
Wim Taymans
5b3bc4e80e alsa: first start monitor then enumerate devices
So that we can catch the SOUND_INITIALIZED update between enumerating
devices and starting the monitor.This fixes a races in detecting devices.

Thanks to Matthias Fend for finding this.

Fixes #2046
2022-01-21 10:50:13 +01:00
Pauli Virtanen
ee257b148b bluez5: deal with adapters appearing after devices
Devices may appear before or after their adapter does on BlueZ DBus
interface.

When an adapter appears, search the device list, and associated its
devices with it.
2022-01-21 00:01:28 +02:00
Wim Taymans
6a892c27b0 audioconvert: block volume updates when disabled 2022-01-20 20:07:05 +01:00
Pauli Virtanen
a4b1e4c42a bluez5: don't crash in battery_remove
If device has no adapter, then there's no battery provider.
2022-01-20 18:18:09 +00:00
Pauli Virtanen
dda65b95af bluez5: maintain transport->device_list properly
If device != NULL, the transport must be in its transport_list.
2022-01-20 18:18:09 +00:00
Pauli Virtanen
f2630ed6fc bluez5: require adapter before profile connect & after
All exposed bluez devices should have an adapter specified at all times.
Adapter-less devices appear in some race conditions in BlueZ interface.

Require device has non-null adapter, in all cases before adding any
profiles (which exposes the device), and reject BlueZ profile connection
attempts in that state.

If an adapter gets removed by BlueZ, remove also all its devices, so
that device->adapter pointers stay valid.
2022-01-20 18:18:09 +00:00
Wim Taymans
ba7e5d619d audioconvert: add option to disable channelmix 2022-01-20 18:08:30 +01:00
Wim Taymans
cb077975bc alsa: remove TI 2902 rule, it seems to break things 2022-01-19 20:31:09 +01:00
Barnabás Pőcze
d2114c3f2e spa: audioconvert: fix allocation size calculation
Currently, the code allocates

  sizeof(header) * sizeof(item) * n_items

bytes instead of the more appropriate

  sizeof(header) + sizeof(item) * n_items

Fix that by simply changing the first multiplication to addition, and
furthermore, use a flexible array member instead of a zero-sized array.

Found by clang-tidy.
2022-01-19 02:01:07 +01:00
Wim Taymans
6ece5d810c loop: invoke immediately when loop is not running
Or else we might never get our callback called or worse, block forever,
waiting for the response.
2022-01-18 20:03:01 +01:00
Wim Taymans
18607ee5e3 resample: implement resample disable
Implement the option to completely disable the resampler.
2022-01-18 18:05:36 +01:00
Wim Taymans
3e73f05af4 audioconvert: expose resampler properties
Expose the resampler PropInfo and Props and params as well. Mostly
useful for updating the resample quality at runtime.
2022-01-18 17:43:44 +01:00
Wim Taymans
5010125452 alsa: make internal latency configurable with params 2022-01-18 11:46:08 +01:00
Pauli Virtanen
67dcc0d291 bluez5: don't create device if adapter is missing
BlueZ may be missing adapter information for devices in some cases.
Ignore devices without specified adapter.
2022-01-17 18:54:10 +00:00
Wim Taymans
dec7f7a608 merger: also reconfigure when monitor changes
So that monitor ports are added/removed.
2022-01-17 16:28:06 +01:00
Wim Taymans
d8c867b515 alsa: improve rate selection
Make sure we don't select an invalid rate when the default is set or
when the card is already opened in some unsupported rate.

See #1975
2022-01-17 14:56:45 +01:00
Barnabás Pőcze
ec465966bc treewide: meson.build: simplify get_variable() calls
Since 01c6fd0a88 the
minimum required meson version is 0.59.0, and since
meson 0.58.0, `get_variable()` on a dependency object
accepts a positional argument. The "type" of variable
(internal, pkgconfig, etc.) in that case does not need
to be specified explicitly.
2022-01-17 08:28:53 +00:00
Wim Taymans
c8d4cef2d2 alsa: remove unused properties and hardcoded values 2022-01-12 17:51:49 +01:00
Wim Taymans
776b52749f Use configured quantum_limit instead of hardcoded value
Parse the quantum_limit parameters and use this to scale the buffers so
that they can contain the maximum allowed samples instead of the
hardcoded 8192 value.

See #1931
2022-01-12 17:50:12 +01:00
Wim Taymans
1637013401 audioconvert: allocate empty space dynamically
Based on the max buffer size so that we don't need to preallocate and
can addapt to larger buffer sizes.
2022-01-12 17:25:59 +01:00
Wim Taymans
50ce9a794f alsa: relax the max latency requiremen
Our max latency is based on the buffer_size / 2, one part is playing and
another part is filling.
2022-01-12 17:20:42 +01:00
Wim Taymans
c40f2ac245 splitter: small cleanups 2022-01-12 12:48:46 +01:00
Wim Taymans
3739b634ec resample: remove empty buffer
We don't need the empty preallocated buffer, just zero the input buffer
and use that one.
2022-01-12 12:33:12 +01:00
Wim Taymans
8844c15d4d audiomixer: remove the empty buffer
We don't need the preallocated empty buffer. When we need to produce
samples, simply write to the output buffer.
2022-01-12 11:59:36 +01:00
Wim Taymans
140c8d0cd9 bluez5: handle missing device and adapter in quirks
When the device or adapter is NULL, skip the quirk checks instead of
crashing.

Fixes https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/155
2022-01-11 21:33:35 +01:00
Wim Taymans
3666c4810e audioconvert: ignore latency param on monitor ports
Ignore latency params on the monitor ports of merger. They interfere
with the latency reporting set by the adapter.
The adapter will set the latency param from the follower on port 0 in
the converter, so pass this on to the merger as the latency and ignore
all other updates.

Fixes a case where the latency of a sink would become 0 when a monitor
port was recorded from.
2022-01-11 17:52:41 +01:00
Wim Taymans
b7279a1728 channelmix: dont make FC from synthesized FC
When we have stereo and need to make FC, don't try to upmix the
stereo into FC again.
Fix unit test now that we create FC channels.
2022-01-11 17:25:38 +01:00
Wim Taymans
39716cdd44 alsa: limit batch period size to default
We take half of the current quantum as the period size for batch
devices. Limit this to the default quantum to ensure we don't end up
with too much headroom.
2022-01-11 16:33:19 +01:00
Wim Taymans
59042251ee channelmix: also keep FC channel
When the target has FC, make it from FL and FR in all cases.
2022-01-11 14:47:17 +01:00
Wim Taymans
c9efae4334 channelmix: do LFE upmix when lfe_cutoff is set
Require only the lfe_cutoff be set when generating LFE.
This way you can only generate LFE without having to enable upmix
for all other channels.
2022-01-11 12:44:36 +01:00
Wim Taymans
0ad318f61c channelmix: enable normalization by default
It is probably a better default to avoid clipping when downmixing.
2022-01-11 10:40:42 +01:00
Wim Taymans
7b1c5cd6dd audioconvert: add f64 support
Fixes #1990
2022-01-10 13:14:23 +01:00
Wim Taymans
9f5caa6358 audioconvert: add f64 conversion
See #1990
2022-01-10 13:04:31 +01:00
Pauli Virtanen
f92b0eee56 bluez5: implement basic CIND/CIEV support in backend-native
Set HFP call indicator based on whether transport is acquired or not.
2022-01-09 19:41:17 +02:00
Wim Taymans
113ab31613 resample: limit input and output offsets
Clamp the offsets to the max input and output sizes or we might
end up with invalid len and crash.

See #1994
2022-01-09 16:56:42 +01:00
Nazar Mokrynskyi
dc4cf163ef Remove separate profile set for Behringer UMC22 that is covered by Texas Instruments PCM2902 profile set 2022-01-09 15:37:44 +00:00
Pauli Virtanen
e4f7b2285b bluez5: bump device profile timeout
Double device profile timeout to 6sec.

In some cases, BlueZ can take more than the previous 3sec to connect all
profiles. It's better to wait for a bit longer, so that devices have all
profiles visible already when they first appear.

This works around issues in Wireplumber profile selection logic.
2022-01-09 11:05:42 +00:00
Pauli Virtanen
b92a378a29 bluez5: mark connected when all source/sink profiles connected
Don't require all device profiles to be connected before marking the
device as connected before profile timeout. Show device already when all
A2DP/HSP/HFP profiles for sink/source direction have connected.

There are devices that in principle can have both sink/source profiles
present, but cannot operate both directions at the same time.  In case
profiles come online later, the only effect is that the device profiles
will get an update after the device is published.
2022-01-09 11:05:42 +00:00
Pauli Virtanen
d33779cd11 alsa/acp: make pa_ato* functions behave as PA ones
The pulseaudio pa_ato* functions set errno and return -1, when the
number cannot be parsed.

Some parts of parsing the profile files (e.g. parse_eld_device) rely on
these functions returning errors when the input is not a number.
2022-01-08 16:26:07 +02:00
Wim Taymans
126d380e85 spa-resample: don't add simd_cargs, they are not needed 2022-01-07 13:28:43 +01:00
Wim Taymans
63f6cbc27a spa-resample: add option to set CPU flags
To force SIMD implementations
2022-01-07 13:25:19 +01:00
Pauli Virtanen
38c8a19d9e bluez5: use save flag in profile
Add SPA_PARAM_PROFILE_save to current profile information, and handle it
properly in set_param and when setting profile.
2022-01-06 16:45:57 +02:00
Wim Taymans
af11fb4804 audioconvert: avoid infinite loop
When the follower has no param to enumerate we would keep on enumerating
the params of the converter forever. Fix this by setting the next value
to something that would then stop the iteration.

Also increase the amount of bits for the follower because it might need
them.
2022-01-05 17:05:17 +01:00
Pauli Virtanen
9b43388cee bluez5: retry codec switch with timeout on BlueZ failure
Try to call SetConfiguration after timeout when BlueZ reports a failure
for it.
2022-01-04 22:14:10 +02:00