Skip to content

Sync upstream GStreamer into ignis-main - #11

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

Sync upstream GStreamer into ignis-main#11
github-actions[bot] wants to merge 561 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
Large core merge touching plugin loading, tracing, parsers, and allocators; high chance of ABI/behavior conflicts with Ignis-specific changes.

Overview
Brings upstream GStreamer main into ignis-main (micro version 1.29.1 → 1.29.2), preserving Ignis work. Most of the visible delta is regenerated GIR plus new 1.30 public APIs.

Core: structured tracing (GstTraceFormat / span begin-end, deprecating GstTracerRecord), gst_plugin_set_static_features_flag for static registries, RISC-V vector CPUID, and GstBaseParse duplicated-PTS plus documented READY-reset behavior. Allocators: query helpers and caps features for AHardwareBuffer and IOSurface. Codecs: extra H.265 levels and H.274 digitally-signed-content SEI.

CI/fuzz: skip Windows/macOS/Cerbero on gstreamer-security, tighter valgrind changes: rules, OSS-Fuzz now builds selected good/bad demuxers, and new fuzzers for audio/video convert, caps/value parsing. Also updates a few MV-HEVC visl hashes and drops the AGENTS.md 🤖 footer.

Reviewed by Cursor Bugbot for commit 534bcb5. 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 2 times, most recently from a4fa6a2 to ce339fa Compare July 6, 2026 07:28
@github-actions
github-actions Bot force-pushed the automation/sync-upstream-main branch from ce339fa to a53b91e Compare July 13, 2026 07:03
Comment thread .gitlab-ci.yml
when: never
# Never run for gstreamer-security repo
- if: '$CI_PROJECT_NAME == "gstreamer-security"'
when: never

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cerbero security skip rule order

Medium Severity

The new gstreamer-security when: never rule on cerbero trigger sits after - if: '$MESON_COMMIT'. GitLab applies the first matching rule, so a non-empty MESON_COMMIT still starts Cerbero on gstreamer-security, unlike Windows/macOS jobs that check the project name first.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a53b91e. Configure here.

sdroege and others added 25 commits July 16, 2026 12:22
This can happen e.g. if the resolution is too large for the given format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12120>
This prevented reading the last byte in some cases.

Also add a missing bounds check to a debug function that is not compiled in by
default, so is actually not really important at all.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12103>
gst_v4l2_allocator_import_dmabuf() sets each plane's bytesused to
size + offset and data_offset to the memory's offset, but
gst_v4l2_allocator_qbuf() refreshes bytesused right before
VIDIOC_QBUF from gst_memory_get_sizes (mem, NULL, NULL), which
returns only the size and discards the offset.

Any dmabuf-import buffer whose memories carry an offset - e.g.
several V4L2 planes sharing one dmabuf, each plane's data located
via data_offset - is therefore queued with bytesused smaller than
data_offset, and the kernel rejects the buffer with EINVAL in
videobuf2's __verify_length() ("data_offset >= bytesused").

Include the offset in the refresh, mirroring the import path. Same
treatment for the single-plane branch, where a memory offset was
dropped identically.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12125>
Clear the partially parsed SEI message in case of an error to
prevent memory leaks and avoid processing stale data.

Fixes #5219

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12128>
Current implementation erroneously defaults to the source pad's caps template
when the peer caps query fails, incorrectly causing selection of
memory:AHardwareBuffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12110>
Make sure to fully reset the tracking struct when re-looping to
push sticky events after an interruption due to pad re-linking,
to avoid an infinite loop.

Also simplify the exit check the interior loop already checks
the pending events flag before it generates the INTERRUPTED
return result.

Add a unit test to check re-linking

Co-Authored-By: Jan Schmidt <jan@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12137>
Simulators *never* expose a hardware decoder in the VT APIs. It is
always a software decoder, even if the implementation might be backed
by a hardware decoder on the host system.

This was tested on iOS and tvOS Simulators on an M4 Mac Mini, M1 Mac
Mini, and a 2014 Intel Mac Mini.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12111>
There is only one default registry in GStreamer during application
run time, but this re-adds historic support for registering plugin
features into different registry instances. This will be used
for build-time redistributable registry generation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
The static features flag on a plugin marks it as having a fixed
set of features that does not change. That is, it does not
dynamically decide which features to register based on the system
it runs on.

This flag marks a plugin as suitable for inclusion in a
static build-time registry that can be shipped with binaries to
speed up the first run of an application once deployed, and
precludes a plugin having external dependencies registered.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
gst-preregistry-generate is a tool to scan a plugin directory and
pre-generate a redistributable registry.bin archive at build time, for
distributing with a GStreamer build. This archive contains plugin
paths relative to the file location, and is used to speed up
first-time program runs after installation, by avoiding loading every
distributed plugin.

This also means we need to consistently register some missing factory
types in init_post. These were getting loaded only when the registry
cache is read in priv_gst_registry_binary_read_cache(), so
gst-preregistry-generate would be unable to deserialize the type info
received from the plugin scanner.

Also add a "source-scanning" test that ensures this omission doesn't
happen again.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
When scanning a plugin directory, check for a pre-shipped registry cache
file (registry.{cpu}.bin). If found, load it into a temporary reference
registry when a plugin in that path needs loading (not in main cache,
or cache entry is stale). Then, instead of loading the plugin first check
the reference registry for a matching entry with the
same mtime and size. If found, transfer the plugin and features into
the main registry instead of loading the .so file.

This speeds up first-time runs after installation by avoiding loading
every distributed plugin and potentially passing them through an
expensive system virus checker. The static pre-shipped cache is
only loaded as needed, so has zero runtime cost unless a plugin actually
changes.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
Mark plugins that have no external dependencies and a static set of
features, making them suitable for inclusion in a static build-time
registry.

- ext/alsa, ext/cdparanoia, ext/gl, ext/ogg, ext/opus, ext/pango
- ext/theora, ext/vorbis, ext/vorbis (ivorbisdec)
- gst/adder, gst/app, gst/audioconvert, gst/audiomixer, gst/audiorate
- gst/audioresample, gst/audiotestsrc, gst/compositor, gst/debugutils
- gst/dsd, gst/encoding, gst/overlaycomposition, gst/pbtypes
- gst/playback, gst/rawparse, gst/subparse, gst/tcp
- gst/typefind, gst/videoconvertscale, gst/videorate, gst/videotestsrc
- gst/volume, sys/ximage, sys/xvimage

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
Mark plugins that have no external dependencies and a static set of
features, making them suitable for inclusion in a static build-time
registry.

- ext/adaptivedemux2, ext/amrnb, ext/amrwbdec, ext/cairo, ext/dv
- ext/flac, ext/gdk_pixbuf, ext/gtk, ext/jpeg, ext/lame, ext/libpng
- ext/mpg123, ext/pulse, ext/qt, ext/qt6, ext/raw1394, ext/shout2
- ext/soup, ext/speex, ext/taglib, ext/twolame, ext/vpx, ext/wavpack
- gst/alpha, gst/alphacolor, gst/apetag, gst/audiofx, gst/audioparsers
- gst/auparse, gst/autodetect, gst/avi, gst/cutter, gst/debugutils
- gst/debugutils (navigationtest), gst/deinterlace, gst/dtmf
- gst/effectv, gst/equalizer, gst/flv, gst/flx, gst/goom2k1, gst/goom
- gst/icydemux, gst/id3demux, gst/imagefreeze, gst/interleave
- gst/isomp4, gst/law (alaw, mulaw), gst/level, gst/matroska
- gst/monoscope, gst/multifile, gst/multipart, gst/replaygain, gst/rtp
- gst/rtpmanager, gst/rtsp, gst/shapewipe, gst/smpte, gst/spectrum
- gst/udp, gst/videobox, gst/videocrop, gst/videofilter, gst/videomixer
- gst/wavenc, gst/wavparse, gst/xingmux, gst/y4m
- sys/directsound, sys/oss4, sys/oss, sys/osxaudio, sys/osxvideo
- sys/rpicamsrc, sys/waveform, sys/ximage

Not marked: jack (uses runtime library loading), v4l2 (dynamic feature
set)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
Add gst_plugin_set_static_features_flag() to plugins that have no external
dependencies and a static set of features, making them suitable for inclusion
in a build-time static registry.

Excluded plugins (dynamic feature registration or runtime library loading):
  - ext/ladspa, ext/lv2, ext/nvcomp, ext/nvdswrapper, ext/tflite, ext/ttml,
    ext/vulkan (runtime module loading or plugin dependencies)
  - gst/frei0r (runtime module loading)
  - sys/amfcodec, sys/androidmedia, sys/applemedia, sys/d3d11,
    sys/d3d12, sys/directshow, sys/hip, sys/mediafoundation, sys/msdk,
    sys/nvcodec, sys/qsv, sys/v4l2codecs, sys/va, sys/wic (runtime
    device/library enumeration)

Modified plugins:
ext/:
  - aes, analyticsoverlay, aom, assrender, avtp, bs2b, bz2, chromaprint,
    codec2json, colormanagement, curl, dash, dc1394, directfb, dtls, dts,
    faac, faad, fdkaac, flite, fluidsynth, gme, gs, gsm, gtk, hls, iqa, isac,
    lc3, lcevcdecoder, lcevcencoder, ldac, libde265, mdns, modplug, mpeghdec,
    mpeg2enc, mplex, musepack, neon, onnx, openal, openaptx, opencv, openexr,
    openh264, openjpeg, openmpt, openni2, opus, qroverlay, qt6d3d11, resindvd,
    rsvg, rtmp, sbc, sctp, smoothstreaming, sndfile, soundtouch, spandsp, srt,
    srtp, svtav1, svthevcenc, svtjpegxs, teletextdec, vmaf, voaacenc,
    voamrwbenc, wayland, webp, webrtc, webrtcdsp, wildmidi, wpe, wpe2, x265,
    zbar, zxing

gst/:
  - accurip, adpcmdec, adpcmenc, aiff, asfmux, audiobuffersplit, audiofxbad,
    audiolatency, audiomixmatrix, audiovisualizers, autoconvert, bayer,
    camerabin2, closedcaption, codecalpha, codectimestamper, coloreffects,
    debugutils, dvbsubenc, dvbsuboverlay, dvdspu, faceoverlay, festival,
    fieldanalysis, freeverb, gaudieffects, gdp, geometrictransform, id3tag,
    insertbin, inter, interlace, ivfparse, ivtc, jp2kdecimator, jpegformat,
    librfb, midi, mpegdemux, mpegpsmux, mpegtsdemux, mpegtsmux, mse, mxf,
    netsim, onvif, pcapparse, pnm, proxy, rawparse, removesilence, rist,
    rtmp2, rtp, sdp, segmentclip, siren, smooth, speed, subenc, switchbin,
    tensordecoders, timecode, transcode, unixfd, videofilters,
    videoframe_audiolevel, videoparsers, videosignal, vmnc

sys/:
  - aja, asio, bluez, d3dvideosink, decklink, directsound, dvb,
    dwrite, fbdev, ipcpipeline, kms, magicleap, opensles, shm, tinyalsa,
    uvcgadget, uvch264, wasapi, wasapi2, webview2, win32ipc, winks, winscreencap

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
Add gst_plugin_set_static_features_flag() to all plugins - they have no
external dependencies and static feature sets.

Modified plugins:
ext/:
  - a52dec, cdio, dvdread, sidplay, x264

gst/:
  - asfdemux, dvdlpcmdec, dvdsub, realmedia

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
Add gst_plugin_set_static_features_flag() to both plugins - they have no
external dependencies and static feature sets.

Modified plugins:
  - ges, nle

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
jonasdn-spiideo and others added 4 commits August 14, 2026 13:59
vkCreateSamplerYcbcrConversion() is a Vulkan 1.1 core entry point. Calling it
directly makes the linker resolve it against the loader, so the plugin fails
to load on a Vulkan 1.0 loader with an undefined symbol error.

Resolve it at runtime with the VK_KHR_sampler_ycbcr_conversion entry point as
fallback, next to the existing free function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12135>
@github-actions
github-actions Bot force-pushed the automation/sync-upstream-main branch from bf00a7f to d1bd95b Compare August 17, 2026 06:09
DominiqueLrx and others added 24 commits August 18, 2026 16:51
…ily differ

Most cross-compiles done from macOS are done for a host machine that has aarch64
cpu family (i.e. the same as the build machine). So this went unnoticed so far.
But when cross-compiling for Android riscv64, the error became apparent when
using an unknown key to get the appropriate checksum.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12311>
Let WindowsML download and install the EP if needed, and register
it using the ONNX dynamic EP loading API

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12302>
…utput framerate

In order to be able to fill the gap on segment end the existing logic is trying use prev buffer duration,
to deduce how many times to repeat the buffer. However there are some cases where the duration isn't available,
when negotiated output frame rate is variable, held buffer (prevbuf) has valid PTS but no duration and
segment gets closed while that buffer is held - that specific combo causes hitting GST_BUFFER_DURATION_IS_VALID
assertion and app crashes.
The suggested change is to return early from gst_video_rate_duplicate_to_close_segment under these conditions
as there is no way to infer how long one copy lasts, pushing the buffer exactly once with invalid duration.
Related fixes:
- !2296
- !9820
This is the same assertion as #2886/#1177, reached through a third caller (gst_video_rate_duplicate_to_close_segment)
Fixes #5229

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12172>
This is useful if a user wants to reuse the connection establishment
mechanism of WebRTC (STUN, TURN, ICE) to transport non-audio/video
RTP data with timestamp information like meta/x-klv via rtpklvpay.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12314>
Fixed an issue where attempting to capture monochrome cursors,
such as high-contrast cursors, resulted in an out-of-bounds access.
The code for d3d11screencapturesrc was correct,
and the access range has now been aligned with it.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5259
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12315>
DirectML is in sustained engineering mode, but it's still useful
fallback when no other hardware-accelerated EP is installed
on the system

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12293>
According to ST 377-1:2019, 11.2.3, PosTableIndex in
Delta Entry Array specifies temporal reordering and is not related
to the random access flag in an Index Entry.

As it's already done in the keyframe search code above, always
respect the 0x80 random access flag when determining whether an
index entry is a keyframe

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12282>
If the model file is not reachable, error out on resource error and
release the object lock before to avoid dead lock from
GST_ELEMENT_ERROR.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11740>
This is required for decodebin and apps to be able to detect when hw
codecs or sw codecs are being used.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12309>
The DPB buffer barrier transitions the image to
VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR with VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR
as the destination access mask. However, vkCmdEncodeVideoKHR writes the
reconstructed picture into the DPB buffer.

VVL reports a WRITE_AFTER_WRITE hazard because the barrier's
dstAccessMask (VIDEO_ENCODE_READ_BIT) does not cover the subsequent
VIDEO_ENCODE_WRITE_BIT access by CmdEncodeVideoKHR, while it writes to
reconstructed picture, which was previously written during an image layout
transition initiated by vkCmdPipelineBarrier2.

The current synchronization allows VK_ACCESS_2_MEMORY_READ_BIT accesses at
VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, but to prevent this hazard, it must allow
only VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR accesses at
VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12249>
When downstream proposes a buffer pool, vulkanupload forces both
VK_IMAGE_USAGE_TRANSFER_SRC_BIT and VK_IMAGE_USAGE_TRANSFER_DST_BIT image
usages. But we cannot assure that both usages are valid for the color format,
specially when Vulkan Video extensions are used, since vulkanupload should
validate the format properties with
`vkGetPhysicalDeviceVideoFormatPropertiesKHR()`, nonetheless vulkanupload
doesn't hold the video profiles to call that function. Thus we cannot force
both.

vulkanupload uses `vkCmdCopyBufferToImage()` which only requires the destiny
image to have VK_IMAGE_USAGE_TRANSFER_DST_BIT usage. vulkanupload doesn't use
any Vulkan function that requires VK_IMAGE_USAGE_TRANSFER_SRC_BIT.

This patch only forces VK_IMAGE_USAGE_TRANSFER_DST_BIT usage when the pool is
shared with downstream, but no VK_IMAGE_USAGE_TRANSFER_SRC_BIT.

This patch fixes Validation Layer error
VUID-vkCmdEncodeVideoKHR-pEncodeInfo-08206 when encoding with RADV driver.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12249>
gst_video_blend_scale_linear_RGBA() can scale only 8-bit formats
correctly. Skip blending the rectangle if scaling fails

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12321>
The hipcc compiler binary name was changed at some point between
6.x and 7.x. Try to find hipcc.exe too

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12331>
@github-actions
github-actions Bot force-pushed the automation/sync-upstream-main branch from d1bd95b to 534bcb5 Compare August 24, 2026 06:11
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.