Commit graph

11952 commits

Author SHA1 Message Date
Barnabás Pőcze
d9fd1d4b28 spa: v4l2: use proper log topic in udev monitor
(cherry picked from commit 57a5417703)
2024-10-12 15:19:49 +02:00
Barnabás Pőcze
6aea34ff72 spa: alsa,v4l2: use proper enum for action
An enum provides better debugging experience
and makes the source code easier to grasp.

(cherry picked from commit 5fa34988fa)
2024-10-12 15:19:49 +02:00
Barnabás Pőcze
dd03036667 spa: alsa: handle IN_IGNORED instead of IN_DELETE_SELF
`IN_IGNORED` event is sent whenever the watch is removed,
which includes when the entity is deleted among other things,
so watch that instead of the more specific `IN_DELETE_SELF`.

(cherry picked from commit 04b8a0c215)
2024-10-12 15:19:49 +02:00
Barnabás Pőcze
98f2b18277 spa: alsa,v4l2: simplify inotify read loop exit condition
The removed condition is strictly a subset of the condition
that is checked one line below, so remove it.

(cherry picked from commit 18cfb808bd)
2024-10-12 15:19:49 +02:00
Barnabás Pőcze
2a02ef384d spa: v4l2: remove ignored flag
Nothing sets it.

(cherry picked from commit 66c7966b75)
2024-10-12 15:19:49 +02:00
Wim Taymans
5b6fae48d3 v4l2: include config.h to check for udev
(cherry picked from commit 1de71d96c6)
2024-10-12 15:19:49 +02:00
Wim Taymans
3a4374ec09 meson: fix build with missing libudev-devel
(cherry picked from commit b4c7973d49)
2024-10-12 15:19:49 +02:00
Wim Taymans
ee5a6f16f9 module-rt: first join and then free memory
First join the thread and then free the memory or else we might free the
memory while the thread is starting up and we crash.
2024-09-27 15:10:46 +02:00
Wim Taymans
cd201aca22 connection: fix fd leaks and confusion
When we receive a message with fds and we are at the end of the
buffer, we will call clear_buffer, which moves the next fds over the
fds of this message before we copy the fds into the message. This
results in the fd being leaked and the message using the fd of the next
message instead.

Avoid this by first copying the fds into the message and then move the
new ones over the old ones.

This fixes some wrong fds being used by clients.
2024-09-27 15:10:24 +02:00
Wim Taymans
121c9cd3ab jack: use the CPU max_alignment
Instead of aligning the buffers to 16 bytes, use the CPU max_align
value (32 on intel).

Move the mix function from a static global variable to a per client
member because this could change per client.
2024-09-27 15:09:41 +02:00
Wim Taymans
2e52930c16 spa: avoid C23 empty initializers in the headers
Patch by Petar Popovic to avoid using empty initializers in headers.

Fixes #4317
2024-09-27 15:06:56 +02:00
Alper Nebi Yasak
2767c65b06 acp: sync the mixer after selecting the port
Otherwise we might sync the wrong port and end up muted.

Fixes #4084
2024-09-27 15:06:41 +02:00
Wim Taymans
1bdb01d6fd impl-link: also handle unprepared active links
An ACTIVE link going to < PAUSED is unprepared.
2024-09-27 15:04:58 +02:00
Wim Taymans
dd7a2819fa 1.0.8 2024-09-19 09:58:55 +02:00
Wim Taymans
22bdd52db5 global: avoid recursive destroy calls
Fixes #4250
2024-09-19 09:49:58 +02:00
Wim Taymans
b2ce24e20e v4l2: queue dropped first buffer again
When we drop the first buffer to avoid timestamp problems, queue it
again in the driver or else we will not be able to dequeue is again
later and we will be running with a buffer less.
2024-09-19 09:49:53 +02:00
Barnabás Pőcze
cf3e52c25c impl-link: fix error message memory leak
`pw_link_info::error` was previously not cleared when a link was destroyed,
leading to a memory leak if an error message had been set. For example,
if format negotiation fails, and as a result the link is destroyed.
2024-09-17 11:36:28 +02:00
Severin von Wnuck-Lipinski
55dc9c3c27 bluez5: backend-native: Handle AT+CCWA command
Claim that call waiting notifications are supported.
Required for some devices (e.g. Soundcore Motion 300),
as they stop sending commands if the reply to CCWA is not OK.
2024-09-17 11:35:54 +02:00
Wim Taymans
ba7656fcfd impl-node: include config.h to define HAVE_MALLOC_TRIM
It was previously not used..
2024-09-17 11:34:16 +02:00
Wim Taymans
a8db21862c alsa: restart the node on hw_param change
When we emit a new EnumFormat, the adapter will renegotiate a new format
that will be applied when we restart.

Fixes #3858
2024-09-17 11:18:43 +02:00
Wim Taymans
bc435dc6f3 audioadapter: recheck formats when EnumFormat changes
When the follower has new EnumFormat, make sure we recheck the formats
the next time the node is started.
2024-09-17 11:18:43 +02:00
Wim Taymans
29595ca7bf audioadapter: clear buffers when format is reconfigured
Always clear the Buffers when the format is reconfigured because they
depend on the Format.
2024-09-17 11:18:43 +02:00
Wim Taymans
ae3d11147f impl-node: only let the server send RequestProcess commands
When we emit the RequestProcess event from an exported node, don't
send the RequestProcess command to ourselves but let the server
decide where to send it to.
2024-09-17 09:19:43 +02:00
Wim Taymans
6189bf1e73 stream: only call early process for output streams
Input driver streams don't need their process callback called before
starting the graph, they will get their process callback called at the
end of the graph cycle. We were doing this for the rt case fine but not
for the non-rt case.
2024-09-16 18:35:08 +02:00
Wim Taymans
0f08f54ef3 thread: make it possible to set a custom create function
Make a property to pass a custom function pointer to create threads
instead of pthread_create.

Use this in jack instead of bypassing the thread utils create function,
which gives the wrong thread rt priority with rtkit.

Fixes #4099
2024-08-07 10:46:52 +02:00
Wim Taymans
7114e9a31a v4l2: Improve format and control enumeration
Use dynamic pod builder so that we can also build complex formats.

Make sure we zero the format before we parse it or else we end up with
potentially uninitialized values.

When ENUM_FRAMESIZES or VIDIOC_ENUM_FRAMEINTERVALS return EINVAL for the
first index, make a dummy result and continue with that. This will
trigger an intersect withe filter so that we end up with something valid
instead of nothing.

Handle 0 framerates without crashing.

See #4063
2024-08-07 10:44:26 +02:00
Wim Taymans
bc9eb76a6e v4l2: use a dynamic pod builder to handle larger PropInfo
The labels from the vivid driver need more space so use a dynamic
builder to make sure we can handle them.

See #4063
2024-08-07 10:42:29 +02:00
Hans de Goede
b79f77b73d spa: libcamera: Increase devices_str[] buffer size
Some complex camera pipelines, like the IPU6 can involve many /dev/video#
nodes (32 in the IPU6 case) and the current size of 128 chars is not enough
to hold all /dev/video# nodes in this cases causing SPA_KEY_DEVICE_DEVIDS
to get truncated, which in turn breaks the filtering of V4L2 devices which
are used by a libcamera driven camera in wireplumber.

Fix this by increasing the size of devices_str[] to 256.

This fixes wireplumber adding a bunch of non-function V4L2 video sources,
e.g. before this "wpctl status" outputs the following video sources:

Video
 ├─ Devices:
...
 ├─ Sources:
 │      90. ov2740
 │  *  115. ipu6 (V4L2)
...
 │     135. ipu6 (V4L2)
 │
 ├─ Filters:

After this fix the output is:

Video
 ├─ Devices:
...
 ├─ Sources:
 │  *   92. ov2740
 │
 ├─ Filters:

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2024-08-07 10:40:55 +02:00
Wim Taymans
0cfd576517 module-ffado: implement freewheeling
When freewheeling starts, pause the streaming and resume when
freewheeling stops. Also make sure we don't try to do any IO or
timeouts.
2024-08-07 10:40:55 +02:00
Wim Taymans
6a64442b73 module-ffado: separate rt booleans from non-rt 2024-08-07 10:40:52 +02:00
Wim Taymans
3da8c324be conf: increase priority of dummy and freewheel driver
We have various modules that set the priority higher than the dummy and
freewheel driver (ffado, netjack,...). This makes it impossible to use
the freewheel driver on them.
2024-08-07 10:32:06 +02:00
Wim Taymans
fa771af329 modules: use the right module name in the docs
Fixes #4172
2024-08-07 10:30:54 +02:00
Dylan Aïssi
d05efe03dc meson: allow fallback to find_library for readline detection
Fixes: 050a51aa (" meson_options: Add readline option")

Signed-off-by: Dylan Aïssi <dylan.aissi@collabora.com>
2024-08-07 10:30:45 +02:00
Wim Taymans
0f5147a67b pw-cli: support arbitrary large params and commands
Use a memstream to collect the arguments so that it can dynamically
allocate as much memory as necessary.

Use a dynamic pod builder to construct the pods so that they can be of
arbitrary size.

Fixes #4166
2024-08-07 10:30:31 +02:00
Wim Taymans
4825040b10 module-ffado: add some docs 2024-08-07 10:30:27 +02:00
Wim Taymans
0de37c52d4 module-ffado: keep the configured rate in sync with params
When we reconfigure rate, make sure we update the EnumFormat and Format
params with the new value.
2024-08-07 10:30:23 +02:00
Wim Taymans
a7796837a6 module-ffado: Improve samplerate and periodsize handling
Only set use the graph rate and duration when the ffado.sample-rate
and ffado.period-size properties are set to 0. Othersize use the
configure values.

Without this patch, it would just ignore the settings and always use the
graph rate.
2024-08-07 10:30:15 +02:00
Wim Taymans
99dcf94ad3 meta: add explicit sync metadata and data type
Change the GenericFd data type to SyncObj. It's probably better to
explicitly state the data type than to make something generic. Otherwise
we would need to transfer the specific fd type somewhere else and there
is no room for that in the buffer and the the metadata is not a good idea
either because it can be modified and corrupted at runtime.

Add the SyncTimeline metadata. This contains 2 points on two timelines
(SyncObj datas in the buffer). The buffer can be accessed when the
acquire_point is signaled on the timeline and when the buffer
can be released, the release_point on the timeline should be signaled.
2024-08-07 10:05:02 +02:00
Wim Taymans
350416768e buffers: add support for mandatory metadata
Add a SPA_PARAM_BUFFERS_metaType in the Buffers object. This contains a
bitmask of the mandatory metadata items that should be included on a
buffer when using this Buffers param.

Make the buffer allocation logic skip over the Buffers params that
require unavailable metadata.

This can be used to, for example, enforce specific metadata to describe
extra buffer memory (such as the meaning of generic file descriptors).

One such use is the explicit sync, where an extra buffer data is needed
for the sync fd along with metadata that contains the sync_point.
2024-08-07 10:05:02 +02:00
Wim Taymans
67ef82f975 buffers: do some cleanups
Parse the metas right after we fixate the params and collec them in the
metas array. We don't have to loop twice and then we can simply pass the
prepared metas to alloc_buffers.

In case there are multiple Buffers params, take the first valid one and
ignore invalid ones.
2024-08-07 10:05:02 +02:00
Wim Taymans
dde45881d9 module-raop: remove unused deprecated header 2024-07-15 16:04:29 +02:00
Barnabás Pőcze
b8f296310f pw-dump: sync on metadata change so that changes are displayed soon
In order to show metadata changes when monitoring, a sync must be
triggered just like it is done for other objects, to make sure that
`dump_objects()` is called some time later and the changed metadata
objects are shown.

Otherwise metadata changes would never be displayed unless there
was a change to a different type of object, whose event handlers
do trigger a sync.

Fixes #4053
2024-06-18 12:45:28 +02:00
Wim Taymans
8d06e19100 jack: queue free of old mem in node_set_io as well
Avoid freeing the old io Position area before the data loop has managed
to get a pointer to it. Queue a free operation that will be executed
from the main loop after the data loop has the io area.

Fixes a crash when stressing jack clients to switch between drivers.
2024-06-18 12:45:09 +02:00
Wim Taymans
22d6065cda jack: don't call free_link from the data thread
We are not allowed to call free_link from the data thread because it
does free() and some pw_mem calls which should only be called from the
main thread.

To solve this, pause the core, queue a free_link operation on the data
thread, which will be scheduled after the previous remove_link operation
completes, free the link and then resume the core. Blocking and resuming
the core is necessary because we can't block for completion of the
invoke calls (the jack method is not allowed to block) and we must
ensure that nothing can happen with the memory (like reuse the mem_id)
before we have cleaned it up.

Fixes a crash in jack with create/destroy link stress.
2024-06-18 12:44:46 +02:00
Wim Taymans
b5cfbf058a jack: rename a function
Add/remove_link is more what this function does.
2024-06-18 12:39:11 +02:00
Wim Taymans
aa5625a470 jack: update the eventfd from the data loop
Also update the variables we use from the data loop.
2024-06-18 12:36:38 +02:00
Wim Taymans
458d2e7e02 module-ffado: keep track of transfered data
When for some reason we don't manage to transfer data from the source
or to the sink (timeout, scheduling problems..), try to do it when we
get a timeout to avoid xruns.
2024-06-18 12:36:07 +02:00
Jonas Holmberg
fed908694a profiler: Decrease memory usage
Make flush buffer initially smaller and increase it when needed.
2024-06-18 12:35:46 +02:00
Wim Taymans
5876eba0cf module-ffado: set next_nsec to something better
Add the duration of the period to the current nsec to get the next_nsec.
2024-06-18 12:34:28 +02:00
Wim Taymans
a3a2ac9d7c spa: fix compilation with -Werror=float-conversion 2024-06-18 12:29:10 +02:00