Skip to content

Sync upstream GStreamer into ignis-main - #11

Open
github-actions[bot] wants to merge 374 commits into
ignis-mainfrom
automation/sync-upstream-main
Open

Sync upstream GStreamer into ignis-main#11
github-actions[bot] wants to merge 374 commits into
ignis-mainfrom
automation/sync-upstream-main

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown

This PR merges the latest upstream GStreamer main branch into ignis-main while preserving Ignis changes.


Note

High Risk
Very large upstream merge touching core GStreamer APIs, demuxers in fuzz builds, and CI behavior; regression risk is broad even though most changes are upstream maintenance.

Overview
This sync brings in a large upstream snapshot on ignis-main, centered on 1.29.2-era API/docs and CI/fuzzing work rather than a single feature.

OSS-Fuzz gains several new libfuzzer targets (caps/value parsing, audio/video converters, audio caps) with seeds and an updated discoverer corpus; the OSS-Fuzz Meson build now enables selected good and bad demux/parser plugins so fuzzing can exercise real container paths.

CI adds rules so the gstreamer-security project skips Windows/macOS (and some Cerbero) jobs, and ci/scripts/test.sh omits --check-bugs for that project. VISL MV-HEVC reference hashes are refreshed.

Public API (via GIR bumps) includes structured tracing (GST_TRACE_*, span formats), static plugin registry helpers (gst_plugin_set_static_features_flag, gst_plugin_get_registry), AHardwareBuffer allocator/caps support, CUDA aggregator/converter helpers, gst_base_parse_set_allow_duplicated_pts, optional notify::last-sample on BaseSink, gst_egl_image_create, and gst_cpuid_supports_riscv_v. GstTracerRecord is deprecated in favor of the new trace APIs.

Reviewed by Cursor Bugbot for commit c1cf807. Bugbot is set up for automated code reviews on this repo. Configure here.

gst_validate_printf (NULL,
"%*s ... and %u more (set GST_VALIDATE_REPORTING_DETAILS=all to list them)\n",
12, "", n_suppressed);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validate synthesis omits first details

Medium Severity

In _do_report_synthesis, the first report in each issue group still gets level and “Detected on”, but gst_validate_report_print_details no longer runs for that entry. Critical and full-detail issues that only appear once (or sit at the list head) lose their Details block in synthesized output.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 048051e. Configure here.

g_free (ts_name);
g_free (full_dir);
} else {
GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline), details, dotname);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dot-dir uses wrong timestamp

Low Severity

The new dot-dir branch builds dot filenames from raw gst_util_get_timestamp(), while the default path uses GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS, which stamps elapsed time since GStreamer start. Mixed runs produce incomparable or misleading dot names for the same scenario action.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 048051e. Configure here.

Comment thread subprojects/gst-editing-services/plugins/nle/nlecomposition.c
@github-actions
github-actions Bot force-pushed the automation/sync-upstream-main branch from 048051e to a4fa6a2 Compare June 29, 2026 07:37
ystreet and others added 28 commits June 30, 2026 00:32
- subgroup shader stage flags
- conformance version
- device/driver UUIDs
- src/dst copy image laytous
- depth/stencel resolve modes
- subgroup features
- etc

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11965>
GCC from Yocto for Beaglebone Black doesn't enable it, so it causes a
build time error since !5075. All other versions that I know of
(Godbolt, Alpine, Ubuntu) have Thumb mode enabled by default.

Fixes #5164

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11879>
When no instance is discovered, no elements should be registered as
when using the elements, it will fail again to initialize the instance.

To avoid a blocklisted plugin, it will return TRUE but do not register
any elements on no instance case.

Updating VK_ICD_FILENAMES will respawn the registration.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11789>
When gbm setup fails, it closes drm_fd and terminates,
but a double closing issue was discovered.
gst_object_unref(display) calls finalize, closing
display->drm_fd (which has the same value as drm_fd),
and then calls close(drm_fd) one more time.
In a multithreaded environment, if another thread is
reassigned the same file descriptor (fd) in the meantime,
it results in a serious bug where the wrong fd is closed.

Remove the duplicate close(drm_fd).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11977>
…rame

There is no need to keep the LCEVC data from an old frame as the data is only
useful for the frame it is associated with. This also fixes a memleak when
running gst-discoverer-1.0.

Fixes #5192

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11984>
To ease ranking and also help adding codec-specific behaviour, vtdec is now
split in vtav1dec, vtav1dec_hw, vth264dec, vth264dec_hw, etc. The original
monolithic vtdec and vtdec_hw have been kept (but are registered with rank
none to avoid interference with autoplug).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11631>
Check registration, rank, and sink caps. With the amount of shared
code in the element, it's worth verifying that we're not breaking
individual elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11631>
This new memory feature is the first step to make it possible for Android
video decoders to send AHardwareBuffers to upload elements for import into
Vulkan or GL without forcing download to system memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11731>
amcviddec will use this memory to keep AImage lifetime tied to
buffers exposed as memory:AHardwareBuffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11731>
Use the new AImageReader codec API and associated AHardwareBuffer memory
allocator. This mode supports direct control of internal AImage buffering
through the ahardware-buffer-max-images property.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11731>
Add full-screen quad sampler utils for both mutable and immutable samplers,
factor out the YCbCr-conversion handle free, and add a new
GstVulkanImageMemory wrapped constructor allowing a custom VkImageCreateInfo.

Also fix gstvkfullscreenquad.c's input image barrier. Inputs are bound as
combined image samplers, so the destination access mask should be
VK_ACCESS_SHADER_READ_BIT rather than VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,
which is for render-pass input attachments.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11731>
The AHardwareBuffer import consists of two paths: one for VkFormats we
currently accept (only RGBA for now) and one for external formats. External
formats are not interpretable directly and must instead be converted to RGBA
using a YCbCr sampler.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11731>
AHARDWARE_BUFFER lets caps describe AHardwareBuffer-backed frames without pretending
that the underlying storage is RGBA.

The optional ahb-format field carries values taken directly from Android's
AHARDWAREBUFFER_FORMAT constants in hardware_buffer.h. This is intended to be
symmetric with DMA_DRM/drm-format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11731>
tp-m and others added 29 commits July 21, 2026 14:56
…ype() functions

G_GNUC_CONST must only be used for functions that don't modify global state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12141>
…e() functions

G_GNUC_CONST must only be used for functions that don't modify global state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12141>
…t_type() functions

G_GNUC_CONST must only be used for functions that don't modify global state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12141>
… functions

G_GNUC_CONST must only be used for functions that don't modify global state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12141>
Store the property GParamSpecs in a static array and install them with
g_object_class_install_properties(). This makes it possible to notify
property changes with g_object_notify_by_pspec(), which is cheaper than the
name-based g_object_notify().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/119>
The "last-sample" property was readable but GstBaseSink never emitted a
property notification when it changed, so a "notify::last-sample" listener
would never be woken up. Callers that connect to the signal to wait for a
sample (e.g. gst-validate's check-last-sample action) could then block
forever: if they observe a transient NULL last-sample -- for instance after
a flush during preroll clears it via gst_base_sink_set_last_buffer(NULL) --
the buffer that arrives next re-populates last-sample but never fires the
notification they are waiting on.

Emit the notification whenever the stored last buffer or buffer list
actually changes. g_object_notify() may re-enter application code, so it is
fired after dropping the OBJECT_LOCK to avoid lock-order issues, mirroring
the existing "unref outside the lock" pattern in these helpers.

As the notification is emitted for every buffer that updates the last
sample it can be expensive, so it is guarded by a new
enable-last-sample-notify property, disabled by default.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/119>
…ications

fakevideosink and fakeaudiosink are bins wrapping a fakesink child whose
properties are proxied onto them via gst_util_proxy_class_properties().
Property reads/writes were forwarded to the child, but its "notify::"
signals were not, so a listener connected to e.g. "notify::last-sample" on
the bin was never woken up when the child updated the property. This could
hang consumers that wait for such a notification (e.g. gst-validate's
check-last-sample action against a fakevideosink).

Add gst_util_proxy_child_properties_notify() next to the property proxying
helper and use it from both sinks: it connects a detailed "notify::<name>"
on the child for each property the proxy mirrors and re-emits the proxy's
own pspec, so the handler runs only for the relevant property.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/119>
…en shell path

Add NULL check for gst_wl_display_get_output_by_name() and log a warning if output is not found.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12146>
…buffer

Fix dma_mem leak on buffer too small path in gst_wl_video_buffer_pool_alloc_buffer()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12145>
Fix an assert when a continuity missmatch is detected for a stream for which its
pad is not yet exposed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12158>
3fc1d79 added support for F32LE
output but missed a spot where S16 was still hardcoded when reordering.

Fix by passing the negotiated format

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12150>
vaQuerySurfaceStatus can return a not-ready surface status. Previously a single
call returning these errors caused a hard failure, leading to dropped frames or
loss of direct rendering paths.

This patch introduces va_retry_query_surface_status(), a poll helper that
retries up to 10 times (0.1ms sleep between attempts) when the driver returns a
not-ready surfaced. Non-recoverable errors bail out immediately.

It's used in va_get_derive_image().

Original-patch-by: oscar carter <oscar.carter@consult.red>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11695>
First the surface is queried to check if it's already on Ready state. If it's,
the function bails immediately.

The VA spec recommend to retry if vaSyncSurfaces returns
VA_STATUS_ERROR_HW_BUSY, so this patch retries until 10 times, waiting 1ms per
each try, if that error is returned.

Original-patch-by: oscar carter <oscar.carter@consult.red>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11695>
We weren't disabling the registry correctly due to typos and missing
env vars.

This speeds up introspection builds considerably on Windows.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12153>
The protocol is half undefined and yields protocols errors with all major
compositors. Just do like other sinks would do and push the frame as
progressive it they where not deinterlaced prior to the sink.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12159>
This prevents build failures when docs are disabled when the subproject
docs generators try to load the variable from the main project. In this
case, the plugins cache should still be buildable even though the docs
themselves are not generated.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5152
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11894>
Map video/x-ffvhuff to FourCC FFVH through the existing VfW-compatibility
path, the same way huffyuv maps to HFYU.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12168>
…ptor sets

The previous implementation allowed allocating one descriptor set less than
the maximum.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12169>
RTX packets with decreasing running times routinely come through
send_rtp , causing miscalculation of elapsed.

Fix by using current_time instead to calculate the bandwidth for RTX
sources, and also guard against potential underflows in elapsed
calculation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11779>
Remove unexpected debugging in _maybe_begin_setup_new_stack_span, logged as an error when GST_TRACERS=dots is set.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12140>
Updates the glimagesink test to iterate through the queryed buffers and select only the pool with GST_IS_GL_BUFFER_POOL.
This fixes a broken assert that will blindly pick the pool at index 0 which might not be a glbufferpool.
On Linux w/o NVIDIA GPUs, a second pool (udmabuf) might spawn in the upstream query, causing the problem.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12140>
@github-actions
github-actions Bot force-pushed the automation/sync-upstream-main branch from 36c4354 to c1cf807 Compare July 27, 2026 07:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.