1469 Commits

Author SHA1 Message Date
Thibault Saunier
c604196306 gl: cocoa: Add navigation event support
Implement keyboard, mouse, and scroll wheel event handling for the
OpenGL Cocoa backend.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9276>
2025-07-02 01:31:16 +00:00
Nicolas Dufresne
b6b6bf9370 opengl: Rename to _private EGL and GLX context header
Both only contains private symbols, clarify this by using a very explicit
name.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9306>
2025-06-30 21:53:55 +00:00
Nicolas Dufresne
7f18dc5411 gl: upload: Fix direct dmabuf transform function
When doing direct dmabuf upload, we rely on the GL stack for doing the color
transformation. The caps we transform from GL to DMABuf are always with a format
of RGBA. Instead of listing all GstVideoFormat and translating them back into
DRM formats, simply list all supported DRM format for the context.

This enable rendering DRM formats that don't have an shader based emulation
implemented such as NV15.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9306>
2025-06-30 21:53:55 +00:00
Nicolas Dufresne
c475088501 gl: context_egl: Add a helper to list all supported fourcc/modifiers
This helper creates a GST_TYPE_LIST of all possible DRM formats that the context
can support. This will be needed to fix support for formats that aren't emulated
using GStreamer shaders.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9306>
2025-06-30 21:53:55 +00:00
Nicolas Dufresne
ef98722709 gl: context_egl: Show all possible translation to GstVideoFormat
The code would simply trace one random format using the DRM fourcc. Instead,
trace the result of translating the pair and skip if there is not match.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9306>
2025-06-30 21:53:55 +00:00
Nicolas Dufresne
475083200d gl: utils: Correct gst/dma caps transformation
The transformation was fuzzy, adding random modifiers to the list. Use the newly
introduce helpers from 1.26 to precisely convert GStreamer formats to a DRM
fourcc and modifier pair and vice-versa.

This fixes support for formats that have a GstVideoFormat value and requires a
modifier.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9306>
2025-06-30 21:53:55 +00:00
Doug Nazar
7bf94c4c46 videodecoder: Print correct frame variable
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9273>
2025-06-30 12:19:19 +00:00
Sebastian Dröge
46df60ed1d Revert "streamsynchronizer: Consider streams having received stream-start as waiting"
This reverts commit a1a189c07cb66af06d7047c74f6421bd36e3d66c.

It breaks the uriplaylistbin tests and needs further investigation.

See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4506

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9309>
2025-06-30 09:26:29 +03:00
Xavier Claessens
472d528ffe audioconvert: Fix setting mix-matrix when input caps changes
When the number of input channels changes, application might have to set
a new mix-matrix. Application must set the new matrix before
audioconvert receives updated caps, otherwise negotiation would fail.
That means it should be allowed to set an invalid mix-matrix until we
receive new caps or next buffer.

This fixes a regression in GStreamer >=1.24.9 caused by:
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7363

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9215>
2025-06-26 00:58:05 +00:00
Xavier Claessens
73d5b5b3db audioconvert: Replace g_warning with GST_WARNING_OBJECT
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9215>
2025-06-26 00:58:05 +00:00
Thibault Saunier
e799d79025 playsink: Fix race condition in stream synchronizer pad cleanup during state changes
Prevent race condition where gst_play_sink_do_reconfigure() could be called
from a pad probe while stream synchronizer pads are being released during
GST_STATE_CHANGE_PAUSED_TO_READY transition.

The race occurred when:
1. State change starts releasing stream synchronizer pads
2. Pads are unblocked earlier in the state change, allowing events to flow
3. A streaming thread triggers sinkpad_blocked_cb -> gst_play_sink_do_reconfigure
4. Reconfiguration tries to use already-released pad pointers
5. New pad creation fails with assertion in gst_pad_iterate_internal_links

The fix adds GST_PLAY_SINK_LOCK around the pad cleanup to ensure atomic
cleanup and prevent concurrent access during state transitions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9233>
2025-06-20 11:53:50 +00:00
Loïc Le Page
f47b0c0293 GstAudioAggregator: fix structure unref in peek_next_sample
The GstStructure attached to the audio sample in peek_next_sample() was
freed prematurely before usage as gst_sample_new() is taking full
ownership on it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9248>
2025-06-19 15:25:11 +00:00
F. Duncanh
5268156447 glwindow_cocoa: fix window not closing (w/o user window handle)
A user-supplied window handle (external_view) becomes the superView
of internal_view, which is closed with [view removeFromSuperview].
This fails silently if external_view = NULL (no handle supplied).
Call [win_internal_id close] in this case. Fixes #4432.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9049>
2025-06-19 03:34:09 +00:00
Théo Maillart
b13fd1db7b urisourcebin: never manually store stream-start
The copy of the exact same stream-start event prevents the multiqueue's sink
event function from being called because it is already stored on both pads at
link time
The text streams are no longer considered sparse by the multiqueue, so
interleave calculation is broken and makes us consume a lot of ram and we can
end up killed by the kernel because of this

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8412>
2025-06-18 12:43:18 +00:00
Philippe Normand
fb43941e92 sdp: Add media_add_media_from_structure API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9117>
2025-06-17 14:53:32 +00:00
Robert Mader
d2cd810b07 formats: Add DRM equivalents for 10/12/16 bit SW-decoders formats
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8965>
2025-06-17 13:54:57 +00:00
Robert Mader
c10aa337b2 video: Update drm_fourcc.h
To drm-misc-next at commit e252e3f3488a492, in order to include
new FOURCCs for SW-decoders.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8965>
2025-06-17 13:54:57 +00:00
Thibault Saunier
97fec43422 discoverer: Make gst_discoverer_info_from_variant nullable
There is no guarantee that the passed in data is valid and we should return
NULL in that case.

Also add API safeguards

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8953>
2025-06-11 10:18:23 -04:00
Víctor Manuel Jáquez Leal
82a71a7739 gstreamer-vaapi: remove subproject
It's almost superseded by va plugin in gst-plugins-bad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9200>
2025-06-10 17:32:46 +00:00
Xavier Claessens
06851d2e4c python: Fix pulling events from appsink
appsink.pull_object() is introspectable, but it needs a way to convert
the GstMiniObject to its GstEvent/GstSample subclass.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9148>
2025-06-04 20:49:53 +00:00
Philippe Normand
3b896cd4ea encodebasebin: GstPad and GstStructure leak fixes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9167>
2025-06-04 13:39:06 +00:00
Philippe Normand
1d20fd15b0 encodebasebin: Make profile ownership explicit in StreamGroup
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9167>
2025-06-04 13:39:06 +00:00
Philippe Normand
3719b5b616 encodebasebin: Encoding profile ownership fixes
The profile argument passed to gst_encode_base_bin_set_profile is now
transfer-full. This issue was noticed after commit
6beb709d43d2023e7e5dc8f1ee1323bc28c9d1d8 which fixed profile refcount handling
in transcodebin.

Driving-by, an encoding profile leak was also fixed in _set_profile, in case
it's called for an already active element.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9167>
2025-06-04 13:39:06 +00:00
Thibault Saunier
6d1027f4ce audioencoder: Throttle metadata copy warning to prevent log spam
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9122>
2025-06-04 10:42:54 +02:00
Thibault Saunier
450f2343cf doc: Add some explanation about the logic of when to post navigation message in code
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9130>
2025-06-03 15:59:12 +00:00
Thibault Saunier
41f7d94e8d tests: glvideomixer: Actually test glvideomixer and not compositor
And move it to the element/glmixer.c testsuite where it belongs.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9139>
2025-06-03 15:15:29 +00:00
Thibault Saunier
ad7c9ce478 glvideomixer, compositor: fix mouse event handling to properly return success
Fix mouse event handling in both glvideomixer and compositor to
check if upstream handled navigation events themselves.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9139>
2025-06-03 15:15:29 +00:00
Thibault Saunier
313435f6cb general: Stop checking G_HAVE_GNUC_VARARGS now that we depend on c99
Cleaning up a bit the code now that we can rely on C99 which specifies
varargs for macros.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8990>
2025-05-30 15:30:36 +00:00
Enrique Ocaña González
a1a189c07c streamsynchronizer: Consider streams having received stream-start as waiting
When using the custom WebKitMediaSrc element (used by WebKit and able to
perform an initial seek in playbin), a stall caused by streamsynchronizer
was detected during an initial seek. The flow of events revealed that the
intertwining of the initial configuration of the streams with the reset
caused by the flush events from the seek left streamsynchronizer in an
inconsistent state:

streamsynchronizer0:sink_0 (video) events, starting before the seek:
 stream-start --> Sets the stream to wait
 flush-stop --> Clears the stream wait flag
 caps
 tag
 segment
 stream-collection
 (buffers start to come and flow properly)

streamsynchronizer0:sink_1 (audio) events, happening after seek:
 (no flush events, because the stream hadn't been initialized when the seek happened)
 stream-start --> Sets the stream to wait
 caps
 segment
 (stalled because the stream is in wait mode!)

The code in streamsynchronizer expects that all the streams are in wait
state before releasing all of them at once. The flush on the video stream
broke that assumption and that's why the audio stream is never released in
that scenario.

Avoiding the clearing of the wait flag on flush-stop isn't an actual solution
to the problem, as it creates other side effects and at least makes the
gst-editing-services/seek_with_stop test to timeout. The alternate solution
implemented in this patch consists on analyzing if the other streams different
from the one newly added (after the flush) aren't waiting (which would mean
that they've all been unlocked after all of them were waiting before), and,
in that case, mark the new stream as also not waiting.

A new test_stream_start_wait test case has been added to demonstrate this
problem. The test case creates a video stream, pushes a buffer, then
simulates a seek by pushing flush-start, flush-stop, stream-start and segment
events. Note that the flush-stop clears the video stream waiting flag.
After that, a new audio stream is created and stream-start and new segment
events are sent. Note that stream-start will set the audio stream to wait.
Then a buffer is pushed on each stream. In the failing case, the test hangs.
In the working case (after this fix), the test runs properly because the
fact of having seen a stream-start also helps to clear the wait flag.

A second new test_stream_start_wait_sparse test has also been added to prove
that this mechanism can also work with sparse streams (a special case of the
current stream-start handling code). This test behaves like the previous one,
but there's no video buffer after the seek (it'll come in the future, as the
stream is sparse, but actually never comes). The buffer after the seek in the
audio stream starts at its due time. Streamsynchronizer is able to ignore
the wait for the video stream and produce audio buffers on time.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4544>
2025-05-30 09:37:45 +00:00
Sebastian Dröge
edca7f83d1 subparse: Make sure that subrip time string is not too long before zero-padding
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4419
Fixes CVE-2025-47806

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9132>
2025-05-29 15:14:19 +00:00
Sebastian Dröge
9e2238adc1 subparse: Check for valid UTF-8 before cleaning up lines and check for regex replace errors
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4418
Fixes CVE-2025-47807

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9132>
2025-05-29 15:14:19 +00:00
Sebastian Dröge
6b19f11751 tmplayer: Don't append NULL + 1 to the string buffer when parsing lines without text
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4417
Fixes CVE-2025-47808

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9132>
2025-05-29 15:14:19 +00:00
Vasiliy Doylov
008e795a41 glshader: recompile shader on pipeline restart
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9120>
2025-05-29 10:15:40 +00:00
Wim Taymans
4417183bae riff-media: fix MS and DVI ADPCM av_bps calculations
Align the calculations for the number of samples per block with the
calculations in adpcmdec.

For MS ADPCM we have in adpcmdec:

       samples = (blocksize - 7 * dec->channels) * 2 + 2 * dec->channels;
       outsize = 2 * samples;
       outbuf = gst_buffer_new_and_alloc (outsize);

This gives us the total output byte size in 16 bits samples. To get back
to the samples, dividing by the channels and 2, we get the right samples per
block as:

       int spb = ((strf->blockalign / strf->channels) - 7) * 2 + 2;

Which we can then use to calculate the bitrate in riff-media.

A similar calculation for DVI ADPCM is needed to get the right bitrate
in all cases.

Tested with the sample in https://bugzilla.gnome.org/show_bug.cgi?id=636245
and another (failing before this patch) sample.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9082>
2025-05-29 10:09:51 +02:00
Tim-Philipp Müller
d273b790e1 textoverlay: fix shading for RGBx/RGBA pixel format variants
... for cases where there's padding at the end of each row.

Fixes #4414.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9106>
2025-05-28 08:45:03 +00:00
Doug Nazar
3df63a079c glcontext/egl: Free dma_formats if someone else already initialized
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9044>
2025-05-27 10:44:37 +00:00
Doug Nazar
75cf21d834 gstreamer: A few small memory cleanups
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9044>
2025-05-27 10:44:37 +00:00
L. E. Segovia
7b8d4c0974 orc: Update pregenerated files
Fixes -Wtype-limits on gstbayer.orc when emulating convuuslw.

Regenerated Orc files use OrcOnce, which increases the minimum version to 0.4.34.

See https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/212 (ORC_MIN)

See https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/238 (AVX2 convussql)

See 8a86d51753 (OrcOnce)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9067>
2025-05-25 14:36:17 +00:00
L. E. Segovia
00dfff821a orc: Remove references to gst-indent-1.0
These are automatically handled by pre-commit now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9067>
2025-05-25 14:36:17 +00:00
Robert Mader
31660c3ad2 glupload: Promote fixate caps results print to info
And include the input caps. The idea is that this info is
often among the most relevant and having it on INFO level
thus allows to avoid the more noisy DEBUG one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8981>
2025-05-25 00:23:44 +00:00
Nirbheek Chauhan
e4d5cece28 meson: Add a monorepo-wide qt-method option and yield to it
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9046>
2025-05-23 09:43:17 +00:00
Nirbheek Chauhan
32eaa0ae35 meson: Rework build files for qt examples in -base
The build files had quite a few things wrong:

* Not using the method: kwarg, which can cause the wrong Qt to be
  used for building
* There was no way to enable the build for them
* Qt was being detected multiple times, differently
* Unnecessary check for libGL
* have_cxx was being used incorrectly
* Qt tool detection was outdated

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9046>
2025-05-23 09:43:17 +00:00
Thibault Saunier
feb3df61a7 debug: Use log contexts in some places
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6855>
2025-05-22 09:53:35 +00:00
Guillaume Desmottes
8f627b1f9c uridecodebin3: Don't hold play items lock while releasing pads
Releasing the pad can cause messages that call back into the message
handler of uridecodebin3 and take exactly the same lock again.

Fix #4443

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9032>
2025-05-21 14:43:08 +00:00
Sebastian Dröge
7ffbb1ce34 subtitleoverlay: Remove 0.10 hardware caps handling
This also reverts c02d41c2. videoconvert and videoscale are supposed to support
raw video with any caps features as long as no conversion is actually necessary,
and assuming they don't breaks usage of GstVideoOverlayCompositionMeta with e.g.
dmabuf or GL memory caps.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9020>
2025-05-21 13:07:51 +00:00
Sebastian Dröge
6072e54666 gl: Implement basetransform meta transform function
This makes sure we can pass through more metas correctly, e.g.
GstVideoOverlayComposition meta.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9004>
2025-05-21 12:13:56 +00:00
Sebastian Dröge
1c3bc57d00 videoconvertscale: Use new gst_meta_api_type_tags_contain_only() API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9004>
2025-05-21 12:13:56 +00:00
Matthew Waters
daae2c18a4 gl/window: add support for configuring whether a backing surface is needed
Fixes videotestsrc ! glimagesink videotestsrc ! glimagesink under Wayland (at
least).

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9007>
2025-05-21 08:30:47 +00:00
Adrian Perez de Castro
3968dd92a5 alsa: Support enumerating virtual PCM sinks
Add support to the ALSA device provider to enumerate PCM outputs that do
not correspond to a physical sound device i.e. they are "virtual" sinks,
like the plug, dmix, or softvol PCM outputs that can be setup in the ALSA
configuration files.

The main use-case for this is allowing usage of GstDeviceMonitor in setups
where there is no audio server and have custom ALSA audio configurations.
As those are likely to be uncommon, the feature is opt-in: a list of device
names and wildcard patterns separated by semicolons must be assigned to the
GST_ALSA_PCM_ALLOW environment variable before such PCM outputs will be
enumerated by the ALSA device provider. This allows either scanning all
PCM outputs, listing individual outputs, providing simple patterns with
'*' wildcards (which match only at the start or end of the name), or
a combination of them:

  GST_ALSA_PCM_ALLOW=1                         # Enable listing PCM outputs.
  GST_ALSA_PCM_ALLOW='*'                       # Same, using a wildcard.
  GST_ALSA_PCM_ALLOW='out_1;out_1'             # Exact listing.
  GST_ALSA_PCM_ALLOW='out_*'                   # Using a wildcard.
  GST_ALSA_PCM_ALLOW='out_*;other_*;line_out'  # Multiple items.

The main motivation for this patch is supporting enumeration of PCM outputs
in the WebKit GTK and WPE ports, which use GstDeviceMonitor to determine
which devices may be chosen for sound output. While on desktops typically
PulseAudio or PipeWire are used nowadays, on embedded devices it is often
desirable to avoid them and use custom configurations that perform audio
routing and processing using only ALSA.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8831>
2025-05-17 00:47:36 +03:00
Doug Nazar
19a330dba0 audiomixer: Change test to use native endian audio format
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8975>
2025-05-18 11:03:59 +00:00