Commit graph

6161 commits

Author SHA1 Message Date
Barnabás Pőcze
cc88712ea6 pw-dump: destroy all objects not just those matching the pattern
`registry_event_global()` creates an `object` object for every object,
not just those matching `data::pattern`. However, previously
`registry_event_global_remove()` only destroyed those objects
that matched the given pattern. Fix that by destroying
every object.

Fixes #4001
Fixes 47e1f38f03 ("pw-dump: also dump object removal")
2024-05-06 09:53:42 +02:00
Barnabás Pőcze
3a912cbbb3 pw-dump: fix string memory leak on error
`object::type` was not cleared in the error path. Fix that
by calling `object_destroy()`, which takes care of it.
2024-05-06 09:53:35 +02:00
Wim Taymans
7002fe8ac3 core: handle import errors better
Check for NULL when importing a buffer and log a message instead of
trying to deref the NULL pointer and crash.

Add some more logging to mem when importing a bad fd.

See #3998
2024-05-03 16:24:41 +02:00
Robert Rosengren
3c450008d5 gst/src: fix crash when current_caps is NULL
gst_pad_get_current_caps may return NULL and passing that into
gst_caps_is_equal may result in fatal critical log due to the
"g_return_val_if_fail (GST_IS_CAPS (caps1)" check. Fix by checking for
NULL to avoid this.

(cherry picked from commit 95127d8a18)
2024-05-03 13:35:24 +00:00
Robert Mader
6ce298ffde gst/src: Avoid unnecessary renegotiations during streaming
Some clients like many camera apps, including Cheese or Snapshot,
trigger a lot of unnessecary renegotiations. While arguably that should
be solved on a Gstreamer level, we can help out by checking if the
preferred new caps are the same that are already in use and skip the
renegotiation in this case.

This allows several apps to e.g. take pictures without a slow and heavy
stream restart.

(cherry picked from commit e2e8cf7944)
2024-05-03 13:35:24 +00:00
Robert Mader
b53c93000c gst/src: Cleanups for src_negotiate()
Using `g_autoptr` and related modern helpers more often makes
the code smaller, easier to follow and maintain.
No behavior changes intended.

(cherry picked from commit 594e3fa09f)
2024-05-03 13:35:24 +00:00
Barnabás Pőcze
3cc0a405b2 pw-mon: fix type confusion in core event handler
All pw_core event handlers (`on_core_*()`) currently receive a pointer
to `struct data`, not `struct proxy_data`; as can be seen from the
`pw_core_add_listener()` call in `main()`.

Fixes: cacdcc1b62 ("pw-mon: add filter param to hide props and/or params")
Fixes #3997
2024-05-03 12:13:15 +02:00
Barnabás Pőcze
6c7dabb1e7 gst: fix stream params memory leak
Both the GPtrArray and its contents are leaked in case of success.
`pw_stream_connect()` copies the params as needed, so use `g_autoptr()`
to free the array and with it, its contents.
2024-05-03 12:12:59 +02:00
Wim Taymans
2d379bf908 gst: handle some more errors
The threadloop might fail to create because of missing plugins, so
handle that.

The context might fail to create because of some fatal config error or
missing plugin, handle that too instead of crashing.

See #3994
2024-05-03 12:12:35 +02:00
Barnabás Pőcze
f524271b81 treewide: fix errno assignments
Do not set `errno` to a negative value.
2024-05-03 12:12:05 +02:00
Wim Taymans
d810057310 module-rt: fix compiler warning
Fix warning about min/max potentially not being initialized.
2024-04-29 16:30:06 +02:00
Wim Taymans
3958eb5962 filter-chain: fix arguments of calloc 2024-04-29 16:30:06 +02:00
lunks
e757868cf9 combine-stream tag forward 2024-04-29 16:30:06 +02:00
Pedro Nascimento
99d342bd23 Add album to tag metadata 2024-04-29 16:30:06 +02:00
Wim Taymans
694409443f impl-node: avoid bitfield races
Move the bits that are used in the realtime thread away from the bits
from the main thread to avoid bitfield races. Move some fields in rt
structs to make it explicit that they are only to be modified from the
realtime threads.
2024-04-29 16:25:35 +02:00
Barnabás Pőcze
8a4ff447d9 treewide: fix some format string issues
Use the proper specifier, and cast to a known type where the type
is not guaranteed by any standard.

See #3975
2024-04-29 16:19:15 +02:00
Wim Taymans
a7a0e2072e conf: warn when match actions are missing 2024-04-29 16:17:34 +02:00
Stefan Ursella
0f0c9e8995 module-protocol-simple: handle 'node.name' property 2024-04-29 16:17:16 +02:00
Wim Taymans
976764514f module-ffado: only start after ports are configured
Don't start yet when the ports are pending configuration.

See #3968
2024-04-23 11:16:40 +02:00
Wim Taymans
594d255c5e context: fill basic properties early
So that we can use them in match rules, such as the application.name
etc.
2024-04-23 11:16:40 +02:00
Pauli Virtanen
cf646fb4dd combine-stream: fix latency-compensate with resample.disabled=true
When resample.disabled=true, which is now the default, Format has zero
rate, so latency buffers get zero size. The rate in this case is the
graph rate.

Fix by just using the delay in samples, as all streams must in any case
run at same rate for the combining to work.

Fixes: bff252ce60 ("combine-stream: actually make use of resample.disable")
2024-04-23 11:16:40 +02:00
Wim Taymans
a5727432c9 profiler: remove unused data-loop 2024-04-23 11:16:40 +02:00
Wim Taymans
aefe407d79 impl-port: avoid doing work when the port is destroyed 2024-04-23 11:16:40 +02:00
Wim Taymans
f65dd4e515 impl-port: use 0 size when clearing IO 2024-04-23 11:16:40 +02:00
Wim Taymans
edc4c856b7 stream: log a warning when media.class and direction mismatch
Fixes #2493
2024-04-23 11:16:40 +02:00
Wim Taymans
e9f0638a70 module-loopback: only enable delay with valid rate and channels
Or else we can't calculate the required delay buffer size and we might
even end up with a double free.

Fixes #3748
2024-04-23 11:16:36 +02:00
Pauli Virtanen
bf148d59cd combine-stream: actually make use of resample.disable
resample.disable was made to default to true, but copying it to stream
properties was forgotten so it didn't have any effect. Make sure to copy
it.

This will also prevent different input/output streams from negotiating
to different rates, which would result to broken audio since we are just
passing sample data through.
2024-04-16 09:55:38 +02:00
Wim Taymans
b72ead1dea spa: handle empty values better
Make sure the properties are not empty before trying to access them.
2024-04-10 13:19:23 +02:00
Wim Taymans
28ab18ddd4 client-node: pass the right object to functions
These functions are not really used so not currently a problem.
2024-04-10 11:10:10 +02:00
Wim Taymans
822b8114b5 stream: only unmap data that was mapped and mappable. 2024-04-02 13:30:36 +02:00
Wim Taymans
ecb35b976f stream: handle node.name fallback better
If we don't have extra properties, set the node.name to the stream
name if it was not otherwise present.
2024-04-02 13:30:20 +02:00
Pauli Virtanen
88db0a9103 client-node: free port io memmap also if port gone
clear_port() clears all struct mix and removes the port, and can occur
before port io is set to NULL.  In this case the port memmaps are not
freed, and are leaked until client pool closes.

Fix by freeing the old io memmap when setting io to NULL, also when the
port was already cleared, so that the memmap lifecycle is the same as
that of the IO.
2024-03-31 12:50:54 +02:00
Wim Taymans
6279d79339 context: add context.modules.allow-empty property
false by default, when true, no warning will be logged when the
context.modules in the config is empty. This can be useful when the
application wants to load all the modules itself.
2024-03-31 12:48:31 +02:00
Wim Taymans
8d0f738882 conf: only count modules, objects and exec when added
We don't actually do anything when the name, factory or path is NULL so
don't count this as an action.

Commenting out these keys is a usual way for commenting out complete
sections.
2024-03-31 12:48:22 +02:00
Wim Taymans
5cb7d4c019 conf: add more error checks
Fail when something goes wrong when adding spa-libs instead of silently
ignoring it.
2024-03-31 12:48:15 +02:00
Jonas Holmberg
64cc53cc38 module-echo-cancel: Don't call _run() when inactive
Call _activate() in the aec spa plugin before both capture and sink
streams are started and call _deactivate() after both capture and sink
streams are stopped, to make sure _run() is not called while the spa
plugin is inactive.
2024-03-31 12:38:48 +02:00
Wim Taymans
3bab51ca73 conf: add some warnings when keys are invalid and ignored 2024-03-31 12:38:10 +02:00
Wim Taymans
cee9f740e4 filter-chain: improve json parsing error reporting
Warn when an invalid key is parsed instead of silently ignoring it.
2024-03-31 12:37:51 +02:00
Wim Taymans
dcc32c3be1 client-node: small cleanups 2024-03-30 18:27:23 +01:00
Wim Taymans
201aaeef5d tools: print ??? when the quantum is unknown 2024-03-30 18:25:57 +01:00
Wim Taymans
31c437b9d6 module-ffado: add some more debug
Add some code to dyanmically switch period_size but it seems to keep
crashing ffado no matter what I try.
2024-03-30 18:25:28 +01:00
Wim Taymans
85dd429858 module-ffado: make sure we close and open when suspend
Rework some things so that we can actually completely close and reopen
the driver when suspending. Leaving the device opened but not streaming
causes trouble when ffado-mixer changes the settings in between.

Do this by first doing a probe to get the ports and streams and then
link those to the actual buffers when we start streaming.

Follow the graph rate and quantum so that we open with the right
settings, this makes pw-metadata work on the quantum and rate. It
requires a driver reopen so it might be slower.

Try to handle some errors better.

See #3558
2024-03-30 18:25:22 +01:00
Charlie Li
99795cb8c1 module-raop-sink: explicitly include <openssl/evp.h>
As part of LibreSSL's cleanup of removed ENGINE support, <openssl/x509.h> is no longer included in <openssl/engine.h>. <openssl/evp.h> was transiently included in <openssl/x509.h>, compared to <openssl/rand.h> for OpenSSL.
2024-03-30 18:24:09 +01:00
Wim Taymans
03b76b6755 gst: fall back to buffer time when no header
This at least sets some form of timestamp on the buffers.
2024-03-30 18:19:16 +01:00
Wim Taymans
e52a56bf68 tests: update unit test for added field 2024-03-30 18:19:16 +01:00
Wim Taymans
cb7ca883df stream: add time field to pw_buffer
For capture streams, place the time of the cycle when we received this
buffer in the new buffer time field.

Without this (and without timestamps in an optional header metadata)
it's impossible to determine when a buffer was created. With this field
and the pw_stream_get_time_n() and pw_stream_get_nsec() we can derive
the mapping to ticks and delay in the graph.
2024-03-30 18:19:16 +01:00
Wim Taymans
945a4e9336 stream: improve the timing info
Always copy the timing info when capturing, not only when there is a
buffer to dequeue.

We can update the rate_queued and rate_size with defaults when we don't
have rate matching. We can then also directly use the rate_size field
to update the buffer requested size.
2024-03-30 18:19:16 +01:00
Wim Taymans
1d365592c3 stream: update some docs 2024-03-30 18:19:16 +01:00
Wim Taymans
d0aca52681 stream: rename requested to size in pw_time
Now that both the expected input and output of the resampler is placed
in the rate_match, rename the 'requested' field in pw_time to 'size'
and update the docs.

See #3750
2024-03-30 18:19:16 +01:00
Wim Taymans
0ede521384 stream: add resample size to pw_time
Now that the resampler input size is set in the io_rate field when we
start we can add it to the pw_time struct as well.

This way we can know the required resampler input without having
to dequeue a buffer. This can be handy when the stream is a driver
and needs to know how much data to accumulate before starting the graph.

See #3750
2024-03-30 18:19:16 +01:00