Make libudev dependency required if v4l2 feature option is set to enabled or
auto, or if alsa dependency is found or enabled through pipewire-alsa or alsa.
Add necessary apis to bluez transport.
Add A2DP(AVRCP) absolute volume support. Source volume can only update to adapter node but not from due to AG nodes don't have route.
Since A2DP/HSP/HFP volume is already percentage itself, it has been mapped to pulseaudio volume then converting to linear volume.
The channelmatrix was limited to the 19 known channels, leaving
only the first 19 channels usable.
Use the full 64x64 matrix instead and make sure to fill all 64
channels with the identity matrix in the case we need to copy or
distribute the matrix to unknown positions.
See #57
All files in spa/include are being installed anyway, so to avoid having to
list each file one-by-one let's use meson's install_subdir() to install all
of them in one go.
spa/plugins/alsa/acp/channelmap.h:466:9: warning: format not a string
literal and no format arguments [-Wformat-security]
466 | pa_snprintf(s, l, _("(invalid)"));
When the session becomes inactive (eg. user on active seat switched),
udev may make devices inaccessible. In this case, pipewire should give
up the devices and close their open file descriptors.
In case headset fails to reply with AT+BCS to the codec selection
following AT+CMER, try to retry the codec selection, and if it still
fails, assume the headset is configured for CVSD.
Previously, the return value of `strrchr()` was not checked
in `spa_log_impl_logv()` which could cause a segmentation fault
in `snprintf()` if the `file` string argument does not contain
any directory separators ('/').
For example,
./build/spa/tools/spa-inspect ./build/spa/plugins/alsa/libspa-alsa.so
could run into this problem:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7f1d505 in __strlen_avx2 () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff7f1d505 in __strlen_avx2 () from /usr/lib/libc.so.6
#1 0x00007ffff7e29408 in __vfprintf_internal () from /usr/lib/libc.so.6
#2 0x00007ffff7e3a19a in __vsnprintf_internal () from /usr/lib/libc.so.6
#3 0x00007ffff7e146f6 in snprintf () from /usr/lib/libc.so.6
#4 0x0000555555558818 in spa_log_impl_logv (object=<optimized out>, level=SPA_LOG_LEVEL_INFO,
file=0x7fffffffd4d0 "[I][", line=260, func=0x7ffff7ce8090 "error_node", fmt=<optimized out>,
args=0x7fffffffd920) at ../spa/include/spa/support/log-impl.h:49
#5 0x00007ffff7d8c69e in alsa_error_handler (file=<optimized out>, line=<optimized out>,
function=<optimized out>, err=<optimized out>, fmt=<optimized out>)
at ../spa/plugins/alsa/acp/alsa-util.c:866
#6 0x00007ffff7cd6a8f in ?? () from /usr/lib/libasound.so.2
#7 0x00007ffff7cdb55e in snd_use_case_mgr_open () from /usr/lib/libasound.so.2
#8 0x00007ffff7d8940f in pa_alsa_ucm_query_profiles (ucm=ucm@entry=0x55555556ba28, card_index=0)
at ../spa/plugins/alsa/acp/alsa-ucm.c:752
#9 0x00007ffff7d6e3c2 in acp_card_new (index=0, props=props@entry=0x7fffffffdc50)
at ../spa/plugins/alsa/acp/acp.c:1508
#10 0x00007ffff7d29b7a in impl_init (factory=<optimized out>, handle=0x55555556b540,
info=<optimized out>, support=<optimized out>, n_support=<optimized out>)
at ../spa/plugins/alsa/alsa-acp-device.c:963
#11 0x0000555555558429 in inspect_factory (factory=0x7ffff7daefa0 <spa_alsa_acp_device_factory>,
data=0x7fffffffdcf0) at ../spa/tools/spa-inspect.c:231
#12 main (argc=<optimized out>, argv=<optimized out>) at ../spa/tools/spa-inspect.c:309
as in that particular case, the filename was returned by libasound,
and it was just "parser.c".
Furthermore, separate the static variable from the rest, and apply
the `const` qualifier to the pointers in the `levels` array.
There won't be further battery level updates when RFCOMM connection is
down, so remove the battery then.
Fix minor things with canceling the provider registration.
Let codec decides when rtp packet need to be sent (terminated by MTU size in most case).
LDAC encoding loop can now be terminated by reading if frame_num is written, no 'frame_count' updating is needed.
RTP payload fragmentation can now be implemented more easily based on this.
When we set the volume on a port, make sure we also set the save flag
so that the flag is put into the volume changed event and the session
manager can save it.
Fixes#995
Allocate up to the first 16 ports, use the last 2 ports and free the
first 14 ports.
This ensure our ports are not among the first ports so that port 128
and following are for normal apps, what is usually expected when
PipeWire is not running.
Fixes#951
The start-delay adds extra silence to the buffer before starting the
playback. The idea is to have more time to adapt to the device
startup and set the timer more accurately.
See #983, #431