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.
Register GstH2645Reorder-based h264/h265timestamper elements Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11908>
Update expected output for the new codectimestamper DTS offset behavior Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11908>
Update for removed codectimestamper plugin Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11908>
Add a forward declaration header so that including only the central gstcuda.h is sufficient, instead of including individual headers in every C++ source file Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11936>
Expose GstCudaConverter so applications can use the CUDA conversion helper, similar to GstD3D11/D3D12 public APIs Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11936>
Introduce a new CUDA aggregator baseclass for implementing various N-to-1 CUDA processing scenarios. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11936>
Add a utility method similar to D3D's ClearRenderTargetView() for filling a CUDA frame with a solid color Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11936>
Add GstCudaAggregatorConvertPad, similar to GstVideoAggregatorConvertPad, to support conversion during prepare_frame() stage Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11936>
Fix a typo where capture_height would not get properly assigned. Fixes invalid copy region errors. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12114>
"(transfer full): (nullable):" ends the annotation list at the first colon, so gobject-introspection drops the nullable annotation and the GIR marks the return value non-nullable, breaking bindings. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12116>
mesa/amd chooses this format for I420. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12104>
Fixes a leak of miniobject private data. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12104>
_create_gl_window() called __bridge_retained twice on the same view, storing to priv->internal_view both times. Each __bridge_retained increments the ObjC retain count, but the first retained reference was immediately overwritten by the second. Since gst_gl_window_eagl_finalize only calls CFRelease once, the GstGLUIView (and its CAEAGLLayer) leaked with an extra +1 retain count. Remove the first redundant __bridge_retained. The local ARC variable keeps the view alive until after addSubview: and the second __bridge_retained. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11501>
This might happen on EOS before enough data is available. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12119>
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>
…ions This was extremely inefficient previously with lots of branches in the inner processing loop and no possibility to unroll. In addition there's now clamping for the uint8_t function as otherwise this could easily wrap around. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12262>
test_input_formats is redundant now as only RGB is supported (previously we internally converted slowly but this is better left to videoconvert). Other tests need changing from RGB to RGBP as the model actually works with a planar RGB input. And also add a test for GRAY8 handling with a corresponding model. This covers all format combinations now. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12262>
GLSL does not support it until GLSL 1.30 which is only available with GL 3.0. GL 2.1 systems instead have to use floating point mod() so convert everything needing integer modulus to float and back. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12275>
Add meson wrapper for Microsoft.Windows.AI.MachineLearning nuget package Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12277>
Add "onnx-winml" build option (disabled by default) to allow building ONNX plugin against the Microsoft-provided ONNX runtime libraries. Note that Windows has its own onnxruntime.dll in system32, and system32 is searched before PATH for unpackaged apps. Because of this, PATH setup by meson devenv is not enough. For testing, Windows ML onnxruntime.dll needs to be copied next to executables such as gst-launch-1.0.exe. The same applies to applications using the ONNX plugin. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12277>
ORTCHAR_T is wchar_t on Windows Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12277>
…orrect place Such errors are put into the debug string, not the actual error message. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12290>
Add packed RGBA video formats with 16-bit (half) and 32-bit floating point components, in both endianness, along with a new GST_VIDEO_FORMAT_FLAG_FLOAT flag so that code can tell float formats apart from integer formats of the same depth. Floating point RGBA, and half floats in particular, is the standard working format of post-production pipelines: color correction, compositing and EXR based workflows process linear-light frames and rely on out-of-range intermediate values (scaler undershoot, wide gamut conversions, HDR superwhites) that integer formats clamp at every element boundary. The formats unpack to ARGB64 like the other deep RGB formats: the software converter processes in 16-bit integer, so values outside [0, 1] are clamped and half precision is quantized when converting to integer formats. Float-preserving processing is intended for elements that consume the frames natively; dedicated float fast paths in the converter can be added later if needed. The GST_VIDEO_FORMATS_ALL ordering was generated with scripts/sort_video_formats.py, which now ranks floating point formats by their effective bit depth. Only the significand resolves distinct shades: the exponent rescales values without adding resolution within a range, so in the worst-case [0.5, 1.0) range a float format distinguishes exactly as many levels as an integer format with as many bits as its significand. That is 24 bits for 32-bit floats (23 stored plus the implicit leading one) and 11 bits for halfs (10 stored plus the implicit one), so RGBA_F32 ranks above every integer format and RGBA_F16 lands between the 12-bit and 10-bit integer formats. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12017>
ORC has full 32 bit float support so the conversion arithmetic of the RGBA_F32 formats can be accelerated. The component reordering stays in C as ORC operates element wise and cannot reorder channels within a 16 bytes pixel; the byte swapped variants reuse the same code by swapping in the ORC functions. The RGBA_F16 formats keep their C implementation, ORC has no half float support. The ORC dist files are regenerated, they were generated with an older orcc which accounts for most of the churn. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12017>
Add an `expected-color` parameter to the `check-last-sample` action type, along with optional `x`, `y`, `width`, `height` region and `tolerance` parameters. The frame is converted to RGB with GstVideoConverter so any raw video format can be checked, and every pixel of the region must match the expected color within the tolerance. This allows checking actual frame content, reporting precise color values on mismatch, instead of relying on opaque buffer checksums. The action types documentation is regenerated, it was also stale. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12017>
Add tests checking: - videoconvert conversions of a solid color from RGBA to each of RGBA_F16_LE/BE and RGBA_F32_LE/BE - a RGBA -> RGBA_F16_LE -> RGBA roundtrip through videoconvert - videotestsrc producing each float format directly through the generic pack path - the color of each bar of a 100% SMPTE pattern produced as RGBA_F16_LE The frame content is verified with `check-last-sample, expected-color=` so failures report the actual color values, and validateflow checks the caps and event flow. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12017>
The float formats inherited the RGB default colorimetry and were tagged with range=0_255 while carrying [0.0, 1.0] values, which would have prevented ever giving 0_255 a meaning for float formats (e.g. [0, 255] scaled input for ML models). Give the float scale its own range value, make it the default for floating point RGB formats and treat it like full range in gst_video_color_range_offsets(), since float formats unpack to full-range integer code values. The other range values are reserved for float formats: caps parsing coerces them to 0_1 with a warning, like the RGB matrix is forced for RGB formats. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12017>
Converting between the packed float RGBA formats went through the generic unpack/pack path, whose ARGB64 (16-bit integer) intermediate clamps values to [0, 1] and drops precision. As RGBA_F16 and RGBA_F32 share the same R, G, B, A component order, convert between them directly with a per-component half <-> float pass (no color conversion or resampling), preserving out-of-range values and, in the F16 -> F32 direction, full precision. The half <-> float helpers are static inline in gstvideoutilsprivate.h so video-converter.c can share video-format.c's implementation. Add a unit test converting a HDR / out-of-gamut pixel through a RGBA_F32 <-> RGBA_F16 roundtrip and checking it is preserved exactly. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12017>
Error out if failed to get the OrtApi object Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12294>
The `GST_ALSA_SINK_LOCK` used to protect the calls to `snd_pcm_*` which are not tread-safe when related to the same device, is taken outside of the writing loop leading to a possible starvation in specific cases. This patch reorganizes the locks to reduce their scope and prevent starvation. It also fixes a deadlock when trying to recover on a `ESTRPIPE` error while `snd_pcm_resume()` returns `EAGAIN`. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11707>
The underlying SRT library supports multiplexing SRT connections over
the same UDP socket. This is useful for avoiding complicated firewall
discussions with IT departments, instead one can use a single address
for your SRT ingress or egress.
This commit introduces a new property `connection-key` if two SRT
listening elements have the same value set as `connction-key` they will
attempt to share the UDP socket.
We introduce a new `GstSRTListenerConnection` helper struct with a
helper API to go with it that will help us keep track of active
listening sockets. Most of The code dealing with listening and waiting
for callers is moved there from `gstsrtobject.c`. A global hash table
will store the different connections with the `connection-key` as key.
Example usage:
```console
$ gst-launch-1.0 -v \
srtsrc connection-key=multiplex uri="srt://127.0.0.1:3000?mode=listener&streamid=one" \
! tsparse ! queue ! filesink location=one.ts \
srtsrc connection-key=multiplex uri="srt://127.0.0.1:3000?mode=listener&streamid=two" \
! tsparse ! queue ! filesink location=two.ts
$ gst-launch-1.0 -v \
mpegtsmux name=muxone alignment=7 \
mpegtsmux name=muxtwo alignment=7 \
videotestsrc pattern=ball ! queue ! "video/x-raw,width=320,height=240" ! x264enc ! muxone. \
videotestsrc ! queue ! "video/x-raw,width=320,height=240" ! x264enc ! muxtwo. \
muxone. ! queue ! srtsink uri="srt://127.0.0.1:3000?mode=caller&streamid=one" \
muxtwo. ! queue ! srtsink uri="srt://127.0.0.1:3000?mode=caller&streamid=two"
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6427>
The SRT library uses pthread_create_key and pthread_setspecific to store the latest error on a thread as a singleton. At thread exit the specified destructor should run and free that singleton, failing that some C++ destructors should perform it. This does not always happen, in our tests the reason is that pthread_exit is not called on main threads. In order for our valgrind tests to passed we will add suppressions for this leak of the singleton error. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6427>
This in combination with connection sharing enables an application to listen on a single endpoint and accept any number of arbitrarily-named streams, using the following scheme: * Spin up a first srtsrc with URI srt://X.X.X.X:YYYY?mode=listener * Upon connection of a first caller, the first "free" (stream id == NULL) SRT object is selected, and its stream id property is updated while holding the connections lock * The application creates and starts a new srtsrc in the signal handler, which means a new "free" SRT object is always available while the connections lock isn't held In order for this scheme to work, the connections mutex is turned into a recursive one. This approach is a bit convoluted, but the alternative would be externally-managed SRT connections which would require a much more fundamental redesign. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6427>
Implement parsing for the structured streamid format (#!::key=value,...) as defined in the SRT access control guidelines. This allows extraction of user credentials from streamids while maintaining compatibility with simple streamid formats. Fixes authentication workflow for clients using structured streamids like Blackmagic devices. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6427>
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>
…tion/sync-upstream-main
bf00a7f to
d1bd95b
Compare


This PR merges the latest upstream GStreamer main branch into ignis-main while preserving Ignis changes.
Note
Medium Risk
Large upstream merge touching codec parsers, CI, and fuzz build configuration increases regression surface; no direct auth changes, but demuxer/parser and tracing API shifts may affect downstream Ignis builds or tests.
Overview
This merge pulls the latest upstream GStreamer
maininto ignis-main; the diff is upstream work, not new Ignis-only features.CI and validation — GitLab CI now skips Windows/macOS/Cerbero-style jobs for the
gstreamer-securityproject, tightens abi-check Meson options (tests/examples disabled), bumpsABI_CHECK_TAG, and refactors valgrind job path rules via shared*toplevel_and_ci_changes/*modules_changesanchors.ci/scripts/test.shomits--check-bugswhenCI_PROJECT_NAMEisgstreamer-security.Fuzzing — OSS-Fuzz build enables gst-plugins-good and gst-plugins-bad with a narrow set of demux/parser plugins instead of disabling them entirely. New libFuzzer targets exercise audio (caps, converter/resampler/quantize), gst-value (caps/structure deserialization), and video (metadata parsers and video-converter), with seeds/corpus updates for discoverer and value fuzzing.
API / introspection (GIR) — Documents 1.30 tracing spans (
GST_DEFINE_TRACE_FORMAT,gst_trace_span_*, deprecatedGstTracerRecord), plugin static registry flags andgst_plugin_get_registry(), RISC-V Vector CPU probe, BaseParse duplicate-PTS and BaseSinkenable-last-sample-notify, AHardwareBuffer / IOSurface memory helpers, richer H.265 levels and H.274 digitally signed content SEI types, and segmentation mask docs in analytics.Misc — AGENTS.md drops the robot-emoji acknowledgment rule; Fluster MV-HEVC reference hashes updated; GES micro version bump in GIR.
Reviewed by Cursor Bugbot for commit d1bd95b. Bugbot is set up for automated code reviews on this repo. Configure here.