122089 Commits

Author SHA1 Message Date
Seungha Yang
c1835644f5 h265parser: Allow updating SPS/PPS without parent parameter set
h265parser defers linking parameter sets until slice header is parsed.
Thus valid SPS/PPS parsed by h265parser can have no linked
parent parameter set. Apply this behavior to
gst_h265_parser_update_{sps,pps} too

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8673>
2025-03-26 19:05:21 +00:00
Stéphane Cerveau
9183df0226 v4l2object: fix memory leak
The tmp caps should be unreffed as the template structure.

The leaks can be reproduced with
gst-launch-1.0 v4l2src num-buffers=1 ! autovideosink

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8669>
2025-03-26 15:43:56 +00:00
Jakub Adam
5aaa4c2c5a qml6glsrc: update buffer pool on renegotiation
When dynamic caps change in the pipeline leads to a new buffer pool
getting negotiated, the change is not propagated to Qt6GLWindow, which
keeps using the old, now defunct, pool.

Unset current pool on Qt6GLWindow in decide_allocation(). This will
trigger a switch to the new pool inside create().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8676>
2025-03-26 12:40:42 +00:00
Sebastian Dröge
c2be97d591 videotimecode: Add missing 119.88fps support to some functions
And while at it generalize the drop frame handling to all integer multiples
of 30000/1001 fps.

Also adjust tests accordingly and add some other missing test.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8649>
2025-03-26 09:32:36 +02:00
Sebastian Dröge
18798440e3 videotimecode: Fix conversion of timecode to datetime with drop-frame timecodes
gst_video_time_code_to_date_time() simply calculated the date time based on
adding the hours/minutes/seconds to the daily jam. This causes a gap every full
minute (except for every 10th minute) with drop-frame timecodes as the first 2
(29.97fps) or 4 (59.94fps) timecodes are skipped (not frames!), e.g. with
29.97fps:

timecode: 12:00:59;28  12:00:59;29  12:01:00;02  12:01:00;03
time    : 12:00:59.950 12:00:59.983 12:01:00.017 12:01:00.050

and not

time    : 12:00:59.934 12:00:59.968 12:01:00.067 12:01:00.100
                        |-- gap of 2 frames --|

The correct calculation would be to use gst_video_time_code_nsec_since_daily_jam()
and add that to the daily jam.

Also add a test for this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8649>
2025-03-26 09:32:36 +02:00
Sebastian Dröge
0623581850 examples: webrtc: rust: Move from async-std to tokio
async-std is deprecated now and tokio is what effectively everybody is using
by default nowadays.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8659>
2025-03-26 03:38:22 +00:00
Thibault Saunier
fa63afba84 ci: Build the dots_viewer only once
We do not need to build it for each and every test we run.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8520>
2025-03-26 01:11:12 +00:00
Dongyun Seo
bbc6535a6b vkformat: fix build error
fix build error when VK_KHR_format_feature_flags2 is not defined.

Co-authored-by: Victor Jaquez vjaquez@igalia.com
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8655>
2025-03-26 00:26:02 +00:00
Eric
4e4f8b7a79 webrtc: fix hangup when duplicate sctp association IDs chosen
Fixes an issue where the webrtcbin would hangup when finalizing due
to the sctpenc hanging up when finalizing. This occurred when the
webrtcbin chose to use a sctp association ID already in use.

The sctpenc would fail to reach the paused state, but startup a task
anyways that was never stopped.

This commit modifies the behavior to not choose sctp association IDs
randomly, and instead only choose one that is free. It also prevents the
sctpenc from starting up that task if it fails to reach the paused state.

Fixes: #4188
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8607>
2025-03-25 23:07:51 +00:00
David Smitmanis
f8f75503b7 pluginloader-win32: Correctly handle whitespace paths when executing gst-plugin-scanner
On Windows, if the path to gst-plugin-scanner.exe contained
whitespace, gstreamer would via CreateProcessW attempt to execute
several files "up" the path tree; e.g. if the scanner path was
"C:\Program Files\gstreamer app\gst-plugin-scanner.exe", it would try
to execute C:\Program, C:\Program.exe, C:\Program Files\gstreamer.exe"
and so on.

This is how CreateProcessW behaves with unquoted whitespace arguments
in lpCommandLine if lpApplicationName is NULL.

By passing the binary path as lpApplicationName instead, the problem
is avoided.

Also quote arguments to gst-plugin-scanner.exe as they are paths as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8614>
2025-03-25 21:58:00 +00:00
Matteo Bruni
69bba61e54 gst-python: fix compatibility with PyGObject>=3.52.0
PyGObject 3.52.0 moved OverridesProxyModule _introspection_module to __slots__,
causing Segmentation Faults when accessing the field.
Since _introspection_module is used to get Gst.Element but is never actually
used afterward, we fix the issue by removing this part.

Fixes #4314

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8653>
2025-03-25 19:43:52 +00:00
Sebastian Dröge
f795796f89 qtdemux: Fix stsc size check in qtdemux_merge_sample_table()
There are 3 32bit integers per entry and not one more for all but the last.

Fixes a regression introduced in 5a9e80c01b4b49c6c7630a6d08b600114f38c0db
when playing back files that have one sample table entry per audio sample.

Merging the sample tables would've always failed because of the too strict size
check and one audio sample per GStreamer buffer would've been output, which
doesn't perform very well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8657>
2025-03-25 18:38:45 +00:00
Tim-Philipp Müller
9a75d56cf8 ci: drop placeholder-job tag for image jobs
They're not privileged so won't work anymore.
Using kvm tag for now as per discussion on IRC,
until a better solution comes along in future.

Keep placeholder-job tag on trigger job and
pre-commit checks jobs.

Add kvm tag to fluster job.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8677>
2025-03-25 16:39:00 +00:00
Víctor Manuel Jáquez Leal
6cf03e31bc vulkan: fix memory leak at dynamic registering
Also it cleans up a bit the code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8639>
2025-03-14 17:13:29 +00:00
Sebastian Dröge
83ae21e8fe ci: Add libatomic to the system packages for the Fedora image
F40's gcc ships with a libatomic.so that points to libatomic.so.1.2.0 which is
not installed as a dependency. That breaks library checks / linking.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8637>
2025-03-14 15:12:33 +00:00
Marc Leeman
f2b5c0b602 meson.build: test for and link against libatomic if it exists
It's needed on some platforms for some subset (or all) atomic operations and
checking for the cases when it's actually needed is quite complex.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8637>
2025-03-14 15:12:33 +00:00
Thibault Saunier
e845b596a2 validate: baseclasses: Reset Test.extra_logfiles when copying to start an iteration
Otherwise we get a big mixup with all iteration pointing to all the extra_logfiles

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8640>
2025-03-14 12:50:34 +00:00
Branko Subasic
2f2b19be83 tracer: Make it compile when tracer hooks are disabled
The GST_TRACER_POOL_BUFFER_(DE)QUEUED macros used when tracer hooks are
disabled took only one argument, causing compile errors when building
with tracer hooks disabled.

Change-Id: I0958c0b018f1fc4a6d84ab0bdd9e42895ae1fe77
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8638>
2025-03-14 11:07:03 +00:00
Piotr Brzeziński
ad6c5b05e9 vtenc: Reset restart flag when creating session in set_format()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8597>
2025-03-14 10:12:38 +00:00
Piotr Brzeziński
f7fe817c87 vtenc: Avoid deadlocking when changing properties on the fly
VT supports changing properties on the fly, and old code attempted to
support that. Perhaps 10 years ago that worked, but these days
VTSessionSetProperty will always wait for the output callback to finish
before proceeding. This means that it's very prone to deadlocking, as
property setters will take the object lock, the callback thread will
take the stream lock, and the main (streaming) thread attempts to take
both, resulting in a deadlock.

New version uses something similar to other encoders (e.g. x264enc) -
changing a property when a session is already created will just flag it
to be reconfigured upon the next encode call. This is done in similar
fashion to how restarting the session upon an error works.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8597>
2025-03-14 10:12:38 +00:00
Edward Hervey
235b0acd63 decodebin3: Don't avoid parsebin even if we have a matching decoder
This is too brittle, there is no guarantee that the input stream has been
properly parsed.

There is another check above (is_input_parsed) that will skip that if the
content came from `urisourcebin` and had a parser applied

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8641>
2025-03-14 09:40:35 +01:00
Alyssa Ross
dd1fc2b793 v4l2object: fix type mismatch when ioctl takes int
v4l2object->ioctl can either be set to v4l2_ioctl() or ioctl().
v4l2_ioctl() always takes the request number as unsigned long int, but ioctl()
may take (at least) unsigned long int, int, or unsigned, depending on libc.
This means that there isn't one function pointer type that can be used for
v4l2object->ioctl that will always be able to accomodate being set to either of
v4l2_ioctl() and ioctl().  It's therefore necessary to wrap one of them so that
both options can have the same type.  This fixes an assignment from incompatible
pointer type error when building for musl.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8613>
2025-03-13 18:26:08 +00:00
Tim-Philipp Müller
b3dd34cfa0 ci: disable gtk4 build by default
It's not used by anything in the monorepo, only used when
rebuilding the gstreamer-rs image (used by gst-plugins-rs
where the gtk4 plugin lives).

Doesn't make sense to build all of gtk4 on every CI run that
touches the relevant files just to make sure it still works
for the image rebuild, and it's a problem for users with long
filenames (such as `gstreamer-backport-bot`) where the pipeline
will simply not pass because the gtk glib-mkenums command line
length exceeds 32767 characters.

Better to set up a scheduled pipeline for that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8636>
2025-03-13 15:06:00 +01:00
Tim-Philipp Müller
46674ac501 cairo: update to 1.18.4
Update to wrapdb version with fallback uri once that exists.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8627>
2025-03-13 11:37:35 +00:00
Tim-Philipp Müller
327926c013 ffmpeg: update wrap to 7.1.1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8627>
2025-03-13 11:37:35 +00:00
Víctor Manuel Jáquez Leal
2172b4ab9f va: remove unused headers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8626>
2025-03-13 10:02:05 +00:00
Sebastian Dröge
58c6b67dbd examples: webrtc: rust: Fix a couple of new clippy warnings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8625>
2025-03-13 08:32:49 +00:00
Sebastian Dröge
48cec32341 examples: webrtc: rust: Update dependencies
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8625>
2025-03-13 08:32:49 +00:00
Olivier Blin
9b47a2dde3 alsadeviceprovider: Fix leak of Alsa longname
Detected by ASan.

As a drive-by fix, use free() instead of g_free() in gstalsadeviceprovider.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8619>
2025-03-13 01:01:39 +00:00
Tim-Philipp Müller
bd3aabbc25 videorate: add support for JPEG-XS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8601>
2025-03-13 00:11:52 +00:00
Tim-Philipp Müller
7861a2e4fb imagefreeze: add support for JPEG-XS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8601>
2025-03-13 00:11:52 +00:00
Sebastian Dröge
5b1f7ef803 devtools: dots-viewer: Update dependencies and make windows dependencies conditional
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8624>
2025-03-12 21:48:33 +00:00
Jordan Petridis
1747b5fa73 Revert "ci: Add rules:changes:compare_to to the job rules"
This reverts commit dcd11f0a104964f7fc02c38104ed57fd0aa794a2.

In dcd11f0a104964f7fc02c38104ed57fd0aa794a2 we started making use
of gitlab's changes:compare_to in hopes of addressing #3780

However compare_to seems to have different behavior based on:

* The type of the branch
* If the repo is a fork or not
* If the pipeline is a branch or MR pipeline
* If the commit is force pushed or not
* If the pipeline is associated with a "push" event,
  * Manual and scheduled pipelines are not.

If we leave compare_to underfined and to its default value,
it causes issues with branch pipelines, as:

* If you push a new branch, it doesn't have anything to compare
against and changes: either will trigger or not, depending on the
gitlab version

* If you push to an existing branch, it only compares against the
previous commit.

* if you force push to a branch, it doesn't work at all it seems. [1]

Thankfully for merge request pipelines, it always seems to compare
against the Merge Request Target tree. But also if there is a Merge
Request open, and the value of compare_to isn't defined (say if it's a
force push or it's the first branch pipeline of the branch) it will
fallback to using the tree from the Merge Request Target, making it even
more confusing.

But if we try to overide it to fix the behavior for branches, we end up
breaking merge request. There seems to be a bug in gitlab (unclear if
its intended or not) where if you have access to the upstream
repository, gitlab will compaee_to against that in the MR pipeleine, but
otherwise it will try to compare against your fork's branch which will
certainly be outdated. Additionally it didn't seem to error out if the
branch specified doesn't exist only in one of the two places so its very
hard to reverse engineer the behavior.

[1] https://gitlab.com/gitlab-org/gitlab/-/issues/349694

Long story short, this is way more complicated than its worth, and has
caused a lot of issues since it was introduced. Revert the change and
try again another time.

Related https://gitlab.com/gitlab-org/gitlab/-/issues/389808

Close #3965

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8563>
2025-03-12 20:46:23 +00:00
Philippe Normand
1e2b103b20 alphacombine: De-couple flush-start/stop events handling
There is no guarantee that any FLUSH_STOP event is preceded by a FLUSH_START.
The element now stops flushing once it has received a FLUSH_STOP on all its sink
pads.

Fixes #4174

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8604>
2025-03-12 18:34:53 +00:00
Edward Hervey
6454698f82 urisourcebin: Make parsebin activation more reliable
`parsebin` is potentially added by a `typefind` callback.

That `typefind` was activated by a `READY_TO_PAUSED` state change on `urisourcebin`

We want to ensure that it is the "setup_parsebin_for_slot" method that activates
the underlying `parsebin`, and not the external state-change.

Otherwise we would risk a potential deadlock where elements activating in
`parsebin`, and which would cause the upstream `typefind` to switch scheduling
mode, would not be able to acquire the STREAM_LOCK of the `typefind` task.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8511>
2025-03-12 16:15:20 +00:00
Thibault Saunier
ed693c7435 video: Give better names to buffer pools
Making debugging simpler

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8617>
2025-03-12 14:49:22 +00:00
Thibault Saunier
9979936703 tracer: Add a hook to track when buffers are queued/dequeued in pools
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8617>
2025-03-12 14:49:22 +00:00
Tim-Philipp Müller
1a971d8e12 Back to development in main branch after 1.26.0
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8621>
2025-03-12 14:21:08 +01:00
Tim-Philipp Müller
d31ce8e5e1 Release 1.26.0 2025-03-11 20:20:16 +00:00
Alyssa Ross
bfd995f9df tcpclientsrc, tcpserversrc: fix building for musl
musl only exposes struct tcp_info when _GNU_SOURCE is defined.

Fixes: b4bef7fd35 ("tcpclientsrc, tcpserversrc: fix tcp stats gathering")
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8612>
2025-03-11 12:43:55 +01:00
Ruben Gonzalez
7b98c739c8 vacompositor: Add missing GST_VIDEO_CROP_META_API_TYPE
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8537>
2025-03-10 16:39:00 +00:00
Carlo Caione
69c1746139 uvcgadget: Properly implement GET_INFO control responses
According to the UVC 1.5 specification, section 4.1.2, the GET_INFO request
must return a bitmap indicating supported operations for the control.
Value 0x00 indicates that neither GET nor SET operations are supported.

This patch fixes control handling in the UVC gadget implementation to properly
respond to GET_INFO requests with the correct bitmap, allowing host systems
to properly detect supported control operations (none in this case).

The pipeline I'm using to test this is:

  gst-launch-1.0 videotestsrc ! uvcsink v4l2sink::device=/dev/video0

This is the equivalent of [0] but the difference is that we are now returning
0x00 instead of 0x03.

Without this change the host in my case is unable to probe the UVC gadget at
all, automatically disconnecting the device after a few seconds.

Following is the log when the gadget is not working (without this fix):

  usb 1-1.2: new high-speed USB device number 73 using xhci_hcd
  usb 1-1.2: New USB device found, idVendor=0525, idProduct=a4a2, bcdDevice= 5.15
  usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
  usb 1-1.2: Product: UVC Gadget
  usb 1-1.2: Manufacturer: localhost.localdomain
  usb 1-1.2: SerialNumber: 0123456789
  usb 1-1.2: Found UVC 1.10 device UVC Gadget (0525:a4a2)
  usb 1-1.2: Failed to query (GET_INFO) UVC control 2 on unit 1: -110 (exp. 1).
  usb 1-1.2: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
  uvcvideo 1-1.2:1.1: Failed to query (129) UVC probe control : -71 (exp. 34).
  uvcvideo 1-1.2:1.1: Failed to initialize the device (-71).
  cdc_subset 1-1.2:1.0: probe with driver cdc_subset failed with error -22
  cdc_subset 1-1.2:1.1: probe with driver cdc_subset failed with error -22
  usb 1-1.2: USB disconnect, device number 73

With the fix the USB device is correctly probed:

  usb 1-1.2: new high-speed USB device number 88 using xhci_hcd
  usb 1-1.2: New USB device found, idVendor=0525, idProduct=a4a2, bcdDevice= 5.15
  usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
  usb 1-1.2: Product: UVC Gadget
  usb 1-1.2: Manufacturer: localhost.localdomain
  usb 1-1.2: SerialNumber: 0123456789
  usb 1-1.2: Found UVC 1.10 device UVC Gadget (0525:a4a2)

[0] camera/uvc-gadget@0df9d3ad

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8572>
2025-03-07 10:12:25 +01:00
Benjamin Gaignard
cb681d8d28 v4l2codecs: Fix caps leak after sorting caps
gst_v4l2_format_sort_caps() create a new caps which need to be
release to avoid leak.

Co-authored-by: Robert Mader <robert.mader@posteo.de>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8583>
2025-03-06 21:28:33 +00:00
Benjamin Gaignard
95a3c0123f v4l2codecs: Release sink allocator when deciding allocation
All decoders have the same design pattern in decide allocation
and forgot to release sink allocator before allocating a new one.
Fixing the memory leak by clearing sink allocator before creating
the new one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8583>
2025-03-06 21:28:33 +00:00
Benjamin Gaignard
0d1cc08176 v4l2codecs: allocator: Fix buffers leak when using remove buffers
When removing buffers from v4l2 queue do not forget to release
the memory on gstreamer side.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8583>
2025-03-06 21:28:33 +00:00
Hou Qi
ba6c86fc4d v4l2: object: Not consider GRAY as RGB
This is to fix colorimetry mismatch between v4l2object and video-info
when format is GRAY.

Fixes #4270

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8590>
2025-03-06 20:40:03 +00:00
Seungha Yang
dba3bdd0cf h264ccextractor,h265ccextractor: Do not resend caps per output buffer
Send caps event only when it's required

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4281
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8596>
2025-03-06 16:24:44 +00:00
Devon Sookhoo
2f2a6e76bc qtdemux: InterleaveType enum
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8578>
2025-03-06 14:40:45 +00:00
dukesook
ee9c8724c3 qtdemux: component to format lookup table
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8578>
2025-03-06 14:40:45 +00:00
Pablo García
af148bb746 curl: replace #if with #ifdef (part 2)
Continuation of 47d1262402c81a9054e618052deeff7414b4f75d, that is not enough.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8595>
2025-03-06 13:44:33 +00:00