Sync upstream GStreamer into ignis-main - #11
Conversation
| gst_validate_printf (NULL, | ||
| "%*s ... and %u more (set GST_VALIDATE_REPORTING_DETAILS=all to list them)\n", | ||
| 12, "", n_suppressed); | ||
|
|
There was a problem hiding this comment.
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.
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); |
There was a problem hiding this comment.
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.
Reviewed by Cursor Bugbot for commit 048051e. Configure here.
a4fa6a2 to
ce339fa
Compare
ce339fa to
a53b91e
Compare
| when: never | ||
| # Never run for gstreamer-security repo | ||
| - if: '$CI_PROJECT_NAME == "gstreamer-security"' | ||
| when: never |
There was a problem hiding this comment.
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.
Reviewed by Cursor Bugbot for commit a53b91e. Configure here.
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>
Instead wait for future data. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12120>
This returns GstFlowReturn and FALSE equals to GST_FLOW_OK. 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>
Add gst_plugin_set_static_features_flag() to the rtsp-sink plugin. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12018>
Add empty line before tables Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12288>
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>
bf00a7f to
d1bd95b
Compare
…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>
Move the code into a new function to better share it across the code base. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12314>
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>
Update media info files for keyframe detection fix in mxfdemux 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>
…tion/sync-upstream-main
d1bd95b to
534bcb5
Compare


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, deprecatingGstTracerRecord),gst_plugin_set_static_features_flagfor static registries, RISC-V vector CPUID, andGstBaseParseduplicated-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 valgrindchanges: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.