Commit graph

12774 commits

Author SHA1 Message Date
Wim Taymans
cc7439187f 1.2.7 2024-11-26 10:07:54 +01:00
Pauli Virtanen
858f6f3210 pw-dump: don't emit remove events when not monitoring
When pw-dump is called without --monitor, it should output exactly one
JSON array, and no remove event indicators.
2024-11-26 10:01:52 +01:00
Arun Raghavan
ff63ca4d36 spa: alsa: Try to initialise card_index from path if needed
If the PCM is loaded directly using only api.alsa.path,
state->card_index may never be initialised, and then we end up opening
the wrong ctl device. Let's try a fallback for this case.
2024-11-26 10:01:11 +01:00
Wim Taymans
e7db5e9a00 doc: fix the SPA POD enum docs
The first argument should be the element count.
Fix the format for float, it should be with captial F.
2024-11-26 10:00:40 +01:00
Wim Taymans
4ba1d2cbe7 stream: fix EARLY_PROCESS again
It got removed with the async improvements. We shouñd simply ask more
buffers whenever we push one to be dequeued.

See #3480
2024-11-26 10:00:29 +01:00
Wim Taymans
8bfdd3c24a pass the right types to the methods
This currently works because we accept void* for these functions but it
will fail when we will use the real types.
2024-11-26 10:00:07 +01:00
Pauli Virtanen
48ad0861e4 pulse-server: ensure positive stream delay in GET_PLAYBACK/RECORD_LATENCY
Pulseaudio protocol requires stream latency is uint64. Clamp the
Pipewire signed latency to the range, better than wrapping around.
2024-11-26 09:59:53 +01:00
Wim Taymans
5a492c2265 module-eq: format floats as JSON floats
Don't use %f to serialize floats to JSON but use the json formatter
because in some locales, the decimal point becomes a , which does not
parse as a float anymore.

Also reformat some lines.

Fixes #4418
2024-11-26 09:40:03 +01:00
Wim Taymans
d2857c2129 module-rtp: allocate receive buffer based on MTU
Use the MTU to allocate the receive buffer instead of using a hardcoded
size.

Fixes #4394
2024-11-18 11:11:14 +01:00
Wim Taymans
ba7a8664a1 module-rtp: calculate payload_size based on MTU
The actual payload size depends on the MTU but should not include the
IP/UDP and RTP headers.

Fixes #4396
2024-11-18 11:10:18 +01:00
Wim Taymans
b409f5f5d1 v4l2: Add mmap fallback when USERPTR is not supported
When we don't support EXPBUF according to the probe, the host will
allocate memory for us. We will then try to use USERPTR to import the
memory into v4l2.

If this is not supported, try to fall back to MMAP support, mmap the
buffers and memcpy the MMAP buffer to the host allocated buffers.
2024-11-18 11:02:09 +01:00
Wim Taymans
7a0aea835a v4l2: improve debug a little 2024-11-18 11:01:39 +01:00
Wim Taymans
0056fdac83 v4l2: fix sign 2024-11-18 11:01:23 +01:00
Wim Taymans
4c487ea59d v4l2: use a separate flag to skip the first buffer
The buf.sequence value might stay to 0 (v4l2loopback)
2024-11-18 11:01:10 +01:00
Wim Taymans
cba2fad86b v4l2: probe number of buffers as well
Instead of just probing with 2 buffers, probe with the MAX_BUFFERS and
remember how many buffers we received.

Some drivers (v4l2loopback) work with less than MAX_BUFFERS (8) and we
need to set the max number of buffers in the Buffers param.
2024-11-18 11:00:58 +01:00
Wim Taymans
bfbf38d5f7 impl-node: save all previous timestamps on start
When the driver starts, save all previous node timestamps, not just the
previous signal time.

For async nodes, uses the previous timestamps in the profiler messages
so that we get stats with 1 cycle of delay instead of bogus values
because the node is still processing.

Fixes pw-top for async nodes.
2024-11-18 10:56:58 +01:00
Wim Taymans
02c332bb78 alsa: handle the case where the driver is destroyed
When the driver node is destroyed (like when unplugging the cable) it
will drop/pause all of the follower ALSA nodes. This is something that
happens internally because of how the ALSA nodes work together, on the
PipeWire level, the nodes are still running and they will just be moved to
another driver.

The problem is that nothing will then start the nodes again after moving
it to the new driver. Fix this by keeping track of the desired target
state of the ALSA node and restoring that state when we detect that we are
paused when moved to a new driver.

Fixes #4401
2024-11-18 10:54:30 +01:00
Wim Taymans
070374e7ee doc: fix spa_pod_parser_get_object example 2024-11-18 10:53:41 +01:00
Wim Taymans
0266b82e78 alsa: remove unused variable 2024-11-18 10:50:51 +01:00
Wim Taymans
ff984da67c examples: update the examples with new lazy scheduling flags
The src can listen to RequestProcess commands and so gets the
node.supports-request = 1 property.

The play-pull example can both be a driver that listens to
RequestProcess or a lazy driver so set this in properties as well.
We can now remove the priority.driver property because automatic
priority selection will make us a driver or not.

With this change, video-src to video-play-pull will use lazy scheduling
with play-pull as the driver. video-play-pull to v4l2src will use
normal scheduling and video-src to video-play will also use normal
scheduling.
2024-11-11 15:05:40 +01:00
Wim Taymans
61f15734e1 stream: expose the lazy flag with pw_stream_is_lazy()
Together with the is_driver() status, this can be used to check if the
stream is using lazy scheduling or not.
2024-11-11 15:05:17 +01:00
Wim Taymans
75e54ddc4f context: set lazy scheduling flags in clock
Collect the request scheduling flags and when there is a lazy driver,
set the lazy scheduling flag in its clock. This means that the driver
can expect RequestProcess commands to start the scheduling.

Pass the lazy scheduling clock flag to the node.

Make sure lazy scheduling driver have a higher priority than their
request drivers.
2024-11-11 15:04:00 +01:00
Wim Taymans
c57f2345f3 keys: add lazy scheduling flags and docs 2024-11-11 15:03:43 +01:00
Wim Taymans
d57e20b0e9 gst: take the thread lock before calling pw_stream functions 2024-11-08 13:10:40 +01:00
Wim Taymans
3a167d4be1 filter-chain: pass dict in plugin load function
So that we can pass some more properties around and remove the
quantum_limit hardcoded value.
2024-11-08 13:10:35 +01:00
George Kiagiadakis
270669be0d filter-chain: move dsp_ops pointers to dynamically allocated memory
Make a plugin structure that is dynamically allocated for each plugin
and pass it around to the descriptor instance structures, so that they
all have access to dsp_ops without sharing a static pointer.

The problem with the static pointer is that the dsp_ops structure is
actually allocated in module-filter-chain's instance structure,
so it always points to the instance of the last filter-chain that was
loaded in the process. When this is unloaded, the other filter-chains
crash.
2024-11-08 13:09:14 +01:00
Wim Taymans
5759a88f27 v4l2: first probe and then update port flags
The probe is to decide it we can use EXPBUF or not and this is used to
decide on the flags.

This got broken with 842ac9e110
2024-11-07 11:20:32 +01:00
Wim Taymans
af69f15dc2 modules: add ratelimit to xrun warnings in jack-tunnel
Take the current cycle times early and in all cases. We can use this to
get the current frame time for debugging purposes instead of the more
heavy jack_frame_time().

Rate limit the xrun warnings.
2024-11-06 12:26:40 +01:00
Wim Taymans
92c7c56e15 audioconvert: only output when there is something to output
Or else we get 0 sized output buffers.
2024-11-06 11:19:27 +01:00
George Kiagiadakis
b0de2a9b7a pw-dot: fix information on the link labels 2024-11-06 11:02:24 +01:00
Niklas Carlsson
cbbc9a718e filter-chain: fix unmap indexing for LV2 plugins
The index returned to the LV2 plugin starts from 1, but the array
index starts from 0.
2024-11-06 10:59:14 +01:00
Pauli Virtanen
926d567c4c pulse-server: more specific error message when too many connections
This appears to be encountered often enough so a clearer message is
maybe useful.
2024-11-06 10:58:47 +01:00
Wim Taymans
00057d211f audioconvert: interchange the resampler loops
Iterate the channels in the inner loop instead of the outer loop. This
makes it handle with 0 channels better but also does the more
complicated phase increment code only once for all channels. Also the
filters might stay in the cache for each channel now.
2024-11-06 10:58:31 +01:00
Pauli Virtanen
77f71f2b58 proxy: invalidate proxy id when removed from map
Client-side bugs calling methods on destroyed proxies like

    pw_proxy_ref(p);
    pw_proxy_destroy(p);
    ...
    wait for server to ack the remove
    ...
    pw_core_destroy(p->core, p); /* p already removed & destroyed */

should not send messages with the stale proxy id to server.

Set id to SPA_ID_INVALID when removing a proxy from the id map, so that
such client bugs only result to ENOENT.
2024-11-06 10:56:45 +01:00
Wim Taymans
9697b67802 filter-chain: first create instances and then link port
First make instances of all the plugins and then try to link them up.

Otherwise, depending on the order the plugins are defined in the config,
a link will try to create port data and set it on the instance, which is
still NULL and we crash.
2024-11-06 10:55:46 +01:00
Wim Taymans
cdb3c64753 json: improve infinite checks
Avoid compiler errors like this:

/usr/include/spa-0.2/spa/utils/json.h:417:25: error: comparing floating-point with '==' or '!=' is unsafe [-Werror=float-equal]
|   417 |                 if (val == INFINITY)
|       |                         ^~
2024-11-06 10:52:05 +01:00
Arun Raghavan
41b5c50c86 spa: audiotestsrc: Validate loop and system before using them
Makes sure we don't crash if those are not available (like with
DataSystem under spa-inspect).

Fixes: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4365
2024-11-06 10:49:51 +01:00
Ola Fornander
f40bfb587d gst: deviceprovider: fix memory leak in do_add_nodes
Use `g_autoptr()` to free the new_devices GList that is allocated in
do_add_nodes.
2024-11-06 10:49:15 +01:00
Wim Taymans
79eebcb724 1.2.6 2024-10-23 09:44:10 +02:00
Wim Taymans
b38ef63028 client-node: don't send mix_info to destroyed ports 2024-10-22 15:46:42 +02:00
Wim Taymans
96a73414d9 jack: improve error reporting
Report the function that failed.
2024-10-22 15:32:30 +02:00
Wim Taymans
2e9c1debdf jack: make stray debug warn to trace 2024-10-22 15:31:22 +02:00
Wim Taymans
9a5bbbee00 alsa: clean up followers and our driver link in _clear
When we are going to be freed, make sure we remove ourself from the
driver list and also remove all the followers that we might still have.

Fixes #4355
2024-10-22 10:17:30 +02:00
Pauli Virtanen
5e47838f24 bluez5: don't exit if system DBus goes down
Similarly as in spa_dbus, don't exit if bus goes down.  Neither the
audio or midi Bluetooth backend reconnects to DBus, but they shouldn't
exit the process.
2024-10-21 10:30:56 +02:00
Wim Taymans
868ac6f9df filter-chain: initialize NULL data for each node 2024-10-21 10:29:38 +02:00
Pauli Virtanen
fb54fb94cc bluez5: add quirk for Phonak hearing aids 2024-10-21 10:26:36 +02:00
Pauli Virtanen
abfec78c51 bluez5: fix crash with broadcast sinks 2024-10-21 10:26:25 +02:00
Pauli Virtanen
c63ae35034 doc: in user-facing config examples, indicate which file it goes into
Add suggestions for config fragments in config file examples, as
applicable.

(cherry picked from commit ec5684302c)
2024-10-12 11:36:04 +03:00
Pauli Virtanen
5e0899b29e doc: backport docs from master branch to 1.2
Pick commits

doc: drop the links to configuration wiki pages
doc: rename pipewire-devices.7 and move stream properties into it
doc: document some more device properties
doc: move configuration index to a separate page
doc: document node/device disabled property
doc: add some small docs updates
docs: document negotiation of explicit sync
doc: remove duplicated entries, link to wireplumber docs
2024-10-12 11:35:56 +03:00
Wim Taymans
9bf04c7c4c stream: improve the flush handling and docs
Flush with drain calls the drained callback for each cycle until paused
or resumed. Setting the stream to active again, clears the drained state
and makes things resume.

Flush without drain does not set the state to PAUSED but simply clears
the queued data. This is mostly useful when pausing or stopping.

At no point should the flush operation result in a PAUSED state change.
2024-10-07 18:36:11 +02:00