705 Commits

Author SHA1 Message Date
wbartel
6f20cd69fe tracers: unlock leaks tracer if already tracking
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7954>
2024-11-25 17:58:47 +00:00
He Junyan
df7a0d0fec utils: Add gst_util_floor_log2 helper function
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5003>
2024-11-24 16:49:24 +00:00
L. E. Segovia
51c6aa9e2f cmake: Add Android libvulkan to the ignored system libraries
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7861>
2024-11-20 16:45:44 +00:00
Qian Hu (胡骞)
6335c5d005 meta: add aggregation function for allocation meta api params
since tee do allocation query for each downstream element, and
get allocation query params from them. this function will aggregate
all params, and propose it for upstream element of tee

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7201>
2024-11-19 15:27:38 +00:00
Albert Sjolund
f068b3bf5c gstpad: specialize gst_pad_chain_list_default
In the case where the bufferlist is writable, send the
buffers immediately without adding to the refcount. This
allows writable buffers to maintain their writability, even
without implementing a chain_list function on the element.

Adds a test to verify this property, where a writable list
maintains refcount 1, but a readonly list increases it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7894>
2024-11-18 10:59:34 +00:00
Robert Rosengren
6fff1ef971 gstdeviceprovider: fix leaking hidden providers
Free list of hidden providers upon stop and dispose.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7912>
2024-11-18 09:20:34 +01:00
Matthew Waters
8e758c715b value: silence a maybe-unitialized warning
gstvalue.c:376:8: error: ‘s_val’ may be used uninitialized [-Werror=maybe-uninitialized]

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7875>
2024-11-18 12:10:57 +11:00
Thibault Saunier
7010efc8ed meson: Bump minimum version to 1.3
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4025

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7899>
2024-11-16 03:02:27 +00:00
Stéphane Cerveau
a6f82ba590 utils: improve gst_util_ceil_log2
According to the following comparison of algorithms, the value
for 0 and 1 was giving an incorrect result.

https://gist.github.com/ceyusa/6061b33ac109a68bcd222f6919968c9a

More information here:
https://github.com/rofrol/codeforces/blob/master/ceil_log2.c

Use a different algorithm which offers better result and keep the
performance.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7429>
2024-11-15 16:52:29 +00:00
Sebastian Dröge
bc63d85f19 idstr: Fix docs of set_static_str_with_len()
The passed string must be NUL-terminated because otherwise a copy would be
necessary to make it NUL-terminated, which defeats the whole purpose of the
set_static() functions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7863>
2024-11-14 17:12:27 +00:00
Thibault Saunier
23ce0d2901 meson: gst: Make GST_FULL_STATIC_COMPILATION a static only arg
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7874>
2024-11-12 16:28:39 +00:00
Alicia Boya García
2080aff70c adapter: Improve documentation for gst_adapter_available()
When I first read the documentation of gst_adapter_available() and
gst_adapter_available_fast() I got quite confused as it seemed that
both performed the same purpose but one was slower than the other.

I shared it with other people and found they also arrived at the same
wrong conclusion.

Hopefully this patch will make the actual purpose clearer.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-docs/-/issues/12

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7859>
2024-11-11 17:25:18 +00:00
Tim-Philipp Müller
566e377272 gst-launch-1.0: update man page a little
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7859>
2024-11-11 17:25:17 +00:00
Taruntej Kanakamalla
36d8243397 ptp: use ip_mreq instead of ip_mreqn for macOS
To join a multicast the macOS still uses the interface address
from the ip_mreq instead of the ip_mreqn unlike other Linux systems.

So add a new conditional block for macOS to use ip_mreq for IP_ADD_MEMBERSHIP
and ip_mreqn for IP_MULTICAST_IF

This is similar to the fix in the glib for multicast join/leave
operation on macOS
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4333

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7851>
2024-11-11 10:26:43 +00:00
Tim-Philipp Müller
5debf58615 gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7819>
2024-11-03 17:45:28 +00:00
L. E. Segovia
410e77be6c cmake: Add Find Module to support Android and iOS consumers
This commit adds a Find Module implementing the necessary logic to link
against GStreamer, while implementing some extra bits to enhance the
compatibility.

The first addition is the `mobile` target, which implements the
monolithic `gstreamer_android` library, and which here gains
compatibility with Apple's operating systems.

The second addition is the handling of the basic GStreamer libraries as
`--whole-archive` when statically linked, which was ported from the
ndk-build project in Cerbero. This is not easy to do, as CMake suffers
from several issues that impede its proper usage of pkg-config:

- It cannot differentiate between system/compiler specific libraries
  e.g. `-lm`, `-ldl`, but especially `-framework Cocoa`.
- It does not support `--whole-archive` natively until 3.27
- It attempts to reorder flags blindly by separating them with spaces,
  thus requiring the use of `-Wl,` wrapping or (in the case of Apple
  frameworks) manual framework lookup

The third addition is the port of the Fontconfig and ca-certificates
bundling logic.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6881>
2024-11-01 10:44:43 +00:00
Thibault Saunier
cbf204e4ae multiqueue: Do not unref the query we get in pad->query
We do not own any ref to queries when running them.

If we end up processing the query from the streaming thread, it means that it was
a serialized query, and the query is being waited to be processed on the sinkpad
streaming thread, thread which owns the reference.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7767>
2024-10-31 11:04:00 +00:00
Mathieu Duponchelle
eb825574f4 aggregator: fix start time selection first with force-live
When force-live is true, we don't want to wait for a first buffer
to select a start time.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1783

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7752>
2024-10-29 08:52:40 +00:00
Thibault Saunier
ba94af0285 queue: Send the notify signals on queue level changes
This is documented as:

> you can query how many buffers are queued by reading the
> #gstqueue:current-level-buffers property. you can track changes
> by connecting to the notify::current-level-buffers signal (which
> like all signals will be emitted from the streaming thread). the same
> applies to the #gstqueue:current-level-time and
> #gstqueue:current-level-bytes properties.

... but was not implemented.

This also respects the `notify::silent` property for the notify signals
to be less intrusive.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7486>
2024-10-28 20:45:37 +00:00
Thibault Saunier
319439a1c0 queue: Cleanup properties are installed caching the pspecs in an array
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7486>
2024-10-28 20:45:36 +00:00
Sebastian Dröge
128dd3d82c buffer: Don't copy reference timestamp meta if the destination buffer already has the same
GstRtpBaseDepayload and other places already had such de-duplication code, so
it's probably better to solve this at the root.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7747>
2024-10-28 12:35:57 +00:00
Edward Hervey
f28a7e9611 gstreamer: Make dlopen leak suppression more generic
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7455>
2024-10-25 13:55:19 +00:00
Jordan Petridis
bf467d4987 gstreamer: add duktape suppression
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7455>
2024-10-25 13:55:19 +00:00
Edward Hervey
38c07a2d01 all: Fix closure annotations
This was misused almost everywhere.

See
https://gi.readthedocs.io/en/latest/annotations/giannotations.html#support-for-gobject-closures

and: https://www.bassi.io/articles/2023/02/20/bindable-api-2023/

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7725>
2024-10-25 08:58:29 +00:00
Mathieu Duponchelle
5e8359d407 aggregator: fix live query when force-live is TRUE
When force-live is TRUE, aggregator will correctly change its state with
NO_PREROLL, but unless something upstream is live did not previously set
live to TRUE on the latency query.

Fix this by or'ing force_live into the result.

Also improve debug

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7718>
2024-10-23 18:52:54 +00:00
Robert Rosengren
ff6ad49557 Revert "gstnetclockclient: signal lost sync if remote time resets"
This reverts commit 779e715b6cee4f7793c43a0e78c6106ab66f1032.

Since the introduced corrupt clock state for when discovering a time
server restart, this resulted in previous similar check as done in
this patch became ignored/jumped over (in case of the corrupt state
has been noticed).

Reference: df41d11a7d7f844e593a10f6a6a0858333fbf7ec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7664>
2024-10-23 16:13:44 +00:00
Robert Rosengren
3f6bde317e netclientclock: send clock sync signal upon corrupted
Clients that already gotten a signal for synced clock, may rely on
getting the same when marked as corrupted to take appropriate action. So
send clock signal indicating no sync at identified corrupted state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7664>
2024-10-23 16:13:44 +00:00
Sebastian Dröge
25184cf496 ptp-helper: Silence deprecation warning
The new API is only available since Rust 1.81.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7678>
2024-10-17 22:39:45 +00:00
François Laignel
7fc418e08c gst: add more GstIdStr functions to Caps & Structure
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7644>
2024-10-16 23:14:50 +00:00
François Laignel
375acaed51 gst: hamonise recent Caps function names with Structure counterparts
These functions were introduced as part of the GstIdStr MR:

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7644>
2024-10-16 23:14:50 +00:00
Jakub Adam
5d995382f8 aggregator: Fix handling NEED_DATA return from update_src_caps()
Since GST_AGGREGATOR_FLOW_NEED_DATA == GST_FLOW_CUSTOM_ERROR == -100,
in order to print the right debug message, we have to check that
condition first before comparing ret with GST_FLOW_OK.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7663>
2024-10-16 20:07:43 +00:00
Alicia Boya García
59b714edc3 pad: Never push sticky events in response to a FLUSH_STOP
FLUSH_STOP is meant to clear the flushing state of pads and elements
downstream, not to process data. Hence, a FLUSH_STOP should not
propagate sticky events. This is also consistent with how flushes are a
special case for probes.

Currently this is almost always the case, since a FLUSH_STOP is
__usually__ preceded by a FLUSH_START, and events (sticky or not) are
discarded while a pad has the FLUSHING flag active (set by FLUSH_START).

However, it is currently assumed that a FLUSH_STOP not preceded by a
FLUSH_START is correct behavior, and this will occur while autoplugging
pipelines are constructed. This leaves us with an unhandled edge case!

This patch explicitly disables sending sticky events when pushing a
FLUSH_STOP, instead of relying on the flushing flag of the pad, which
will break in the edge case of a FLUSH_STOP not preceded by a
FLUSH_START.

If sticky events are propagated in response to a FLUSH_STOP, the
flushing thread can end up deadlocked in blocking code of a downstream
pad, such as a blocking probe. Instead, those events should be
propagated from the streaming thread of the pad when handling a
non-flushing synchronized event or buffer.

This fixes a deadlock found in WebKit with playbin3 when seeks occur
before preroll, where the seeking thread ended up stuck in the blocking
probe of playsink:
https://github.com/WebPlatformForEmbedded/WPEWebKit/issues/1367

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7632>
2024-10-16 16:50:44 +00:00
Guillaume Desmottes
c81ee91edc inspect: display element flags
I wanted to check if an element had the SINK flag and realized it was
not displayed in gst-inspect.

The clock flags were already reported as part of the "clocking
capabilities" info but best to have them explicitly listed here as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7641>
2024-10-14 06:27:04 +00:00
L. E. Segovia
4dcc4b6235 meson: Undefine any WINVER and _WIN32_WINNT entries before redefining them
Fixes Cerbero build with MinGW GCC 14, where specifying -DWINVER=0x0601 -DWINVER=0x0A00 is a hard -Werror.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7658>
2024-10-12 19:10:46 -03:00
François Laignel
067fe7b9bc gst: structure: add more GstIdStr methods
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7613>
2024-10-04 11:19:46 +02:00
François Laignel
86776dc62e gst: structure: fix some GstIdStr documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7613>
2024-10-03 19:56:06 +02:00
Corentin Damman
16da96653a macos: Fix race conditions
This commit fixes two issues:
- The event must be posted *after* calling stop, otherwise a race condition can occur and the app never stops
- isFinishedLaunching and applicationDidFinishLaunching are not always synchronized, causing sometimes
  a deadlock on the g_cond_wait never catching the g_cond_signal

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7593>
2024-10-03 11:47:45 +02:00
Daniel Morin
50a27da3ad test: Add more nested caps-in-caps (and likes)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7572>
2024-10-01 22:17:51 +00:00
Daniel Morin
a40ed16a0e value: Fix nested caps intersection
Without this change intersection operand containing caps-in-caps need
to be equal for the intersection to work.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7572>
2024-10-01 22:17:51 +00:00
Seungha Yang
a8f8bbef99 structure,capsfeatures: Fix MSVC build warnings
Fixing warning "warning C4068: unknown pragma 'GCC'"

Use portable GLib macro instead

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7589>
2024-09-30 21:56:28 +00:00
Sebastian Dröge
21af7061eb gst: caps: Add API for creating caps / setting caps fields from static strings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:26:18 +03:00
Sebastian Dröge
ba552fb76f gst: Remove gstquark.c / gstquark.h
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:26:18 +03:00
Sebastian Dröge
b7b24573ce common: Use more efficient versions of GstCapsFeatures API where possible
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:26:18 +03:00
Sebastian Dröge
eed7c9c66a gst: capsfeatures: Use GstIdStr for caps features
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00
Sebastian Dröge
6233eb0ff3 common: Stop using GQuark-based GstStructure field name API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00
Sebastian Dröge
2df9c4739e gst: structure: Use GstIdStr for structure field names
And add corresponding API with GstIdStr parameters, static string parameters and
deprecate the old GQuark based API.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3567

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00
Sebastian Dröge
0c1611d31d common: Stop using GQuark-based GstStructure name API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00
Sebastian Dröge
8cbc76b180 gst: structure: Use GstIdStr for structure names
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00
Sebastian Dröge
0ee18781f9 gst: Add GstIdStr for holding structure names and field names
This is an efficient string storage for short strings without heap allocations,
and falling back to the heap for bigger allocations. Almost all structure fields
and structure names in use nowadays are short enough to not require a heap
allocation.

As structure names and fields are sometimes dynamically created, storing them in
a GQuark can create a memory leak and potentially a DoS attack by continously
triggering creating of new quarks.

Thanks to Tim for coming up with the name!

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00
Sebastian Dröge
0823c639cc gst: structure: Stop using private structure name quark field
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432>
2024-09-26 19:21:29 +03:00