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.
| UPDATE_PIPELINE_REASONS[reason], seqnum); | ||
| comp->priv->setup_new_stack_span_id = | ||
| gst_trace_span_begin (fmt, GST_TRACE_VALUES (TRACE_VALUES (comp, reason, | ||
| seqnum, GST_CLOCK_TIME_NONE))); |
There was a problem hiding this comment.
Span start logs as error
Low Severity
_maybe_begin_setup_new_stack_span emits GST_ERROR_OBJECT whenever a normal stack-setup trace span starts. That treats expected composition updates as errors and can fail CI or confuse operators when tracing is enabled.
Reviewed by Cursor Bugbot for commit 048051e. Configure here.
Treat an EOS event being sent to appsrc via gst_element_send_event() the same as if the gst_app_src_end_of_stream() method / signal were used, otherwise pipelines can get stuck with the appsrc pushing thread having shut down, but the gst_app_src_push_*() methods not returning GST_FLOW_EOS to inform the caller. The appsrc ends up still accepting / queueing data it won't send. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11924>
This test stress tests netsim by switching state rapidly while sending buffers and events through. That means that events sometimes land on a flushing pad and don't get sent, yielding sticky event errors that need filtering away. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11927>
!6380 introduced a regression where some output buffers might not receive a PTS in CBR mode Fixes #5151 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11930>
Fix the calculation of the presentation time from the avtp by properly adjusting for the rollover of the reference or avtp timestamp. The adjustment is needed whenever the distance between there reference timestamp and avtp timestamp is lager then half the avtp timestamp size. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11887>
Since 2021 the function `gst_va_surface_copy()` has been incomplete, since even the image is created, it wasn't retrieved from the surface. It went unnoticed on iHD Intel platforms because `vaCopy()` was used, but not in Mesa. The fix is just to actually retrieve the image from the source surface. Also, left a notice that derived could be used and it could be more efficient in Mesa after the fix is merged, but we would use the mechanism to check the driver's implementation _and_ version. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/3906 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11899>
Add a property for explicitly ignoring mismatched / broken continuity counters, for use in HLS playback where some streams are generated with broken continuity counters across the fragment boundaries. Alternative to !11762 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11884>
Check for the new ignore-continuity-counter property and set it it to true on tsdemux if present. Some HLS streams are broken at fragment boundaries and only play back correctly if we ignore the discontinuity. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11884>
This commit copies metas from the combined audio buffers pulled out of the adapter to the output video buffer. For each Reference Timestamp reference type, only the latest Reference Timestamp meta from the original buffers is retained. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11857>
Patch provided by Ramesh Adhikari, who also reported this. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5108 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11938>
Patch provided by Ramesh Adhikari, who also reported this. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5109 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11939>
Add 2 more places where input-selector might have slept / unlocked and the active pad can change, either to or away from the current pad. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11928>
Modify the end condition for the input-selector test. The test is inherently and deliberately racy, but could previously end up in a degenerate timing condition where one input would get serviced much more often than the other, and the test would time out instead of reaching its end condition. Timeouts should always indicate that the test got actually stuck due to a deadlock or so, rather than that the test was unfair. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11928>
Ensure the active pad can't change during an allocation query, as it can trigger sending of inconsistent sticky events if a switch happens at exactly the wrong moment Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11928>
Since commit d00e0b6 appsink keeps a local reference of the current sample in order to reduce allocations. However not clearing its contents upon flush events would prevent associated buffers from being cleared from their pool. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11931>
Rename internal tracking variable for clarity Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11929>
Make it easier to read probe function handling by using some internal aliases for the custom GST_FLOW_CUSTOM_SUCCESS_... flow return values Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11929>
When a pad is linked exactly in the middle of outputting sticky events, we need to restart the sequence instead of sending an incomplete and out-of-order set of events to the new pad peer. This can only happen when linking an already running pad that was trying to output sticky events while unlinked, such as when linking a newly requested tee src pad to a peer. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11929>
If gst_uri_from_string() returns NULL, the function breaks out of the switch without calling GST_RTP_SINK_UNLOCK, leaving the mutex locked. Any subsequent call to set_property on the same object will deadlock. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11937>
Currently the callers of gst_qtdemux_decorate_and_push_buffer() don't agree on whether the `position` argument should be in track units or nanoseconds. They also don't agree on whether it should be global time (after edit lists) or media time (before edit lists). This patch modifies both the function and the users to use the convention that makes the most sense: 1. The `position` argument should be in nanoseconds, as it's currently only used to update qtdemux->segment.position, which is of type GstClockTime. Using a different convention is currently causing unnecessary rounding in pull mode. 2. The `position` argument should be in global time (after edit lists). This is already the current behavior in pull mode. 3. The `position` argument reflects the current time position in the demuxer. What this means more exactly remains an implementation detail of the demuxer. This patch also adds a test for a file where a seek with `stop` set was causing a premature EOS in push mode, which is fixed by the changes. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11951>
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>
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>
…tion/sync-upstream-main
a53b91e to
36c4354
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
There are 5 total unresolved issues (including 4 from previous reviews).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 36c4354. Configure here.
| } | ||
| gst_audio_converter_free (conv); | ||
| } | ||
| } |
There was a problem hiding this comment.
Converter fuzzer can exhaust memory
Medium Severity
The audio converter path calls gst_audio_converter_convert on the full fuzz payload with no frame or output-size cap. With large inputs and extreme rate ratios, that API allocates out_frames * bpf unbounded, so the fuzzer can OOM. The resampler path in the same file already guards with MAX_FRAMES and MAX_RESAMPLE_BYTES.
Reviewed by Cursor Bugbot for commit 36c4354. Configure here.


This PR merges the latest upstream GStreamer main branch into ignis-main while preserving Ignis changes.
Note
Medium Risk
Broad upstream merge touches core parsing, tracing, and platform video memory paths; regression risk is typical of a large sync rather than a single isolated fix.
Overview
Large upstream merge bringing GStreamer 1.29.2-era API/docs and CI/fuzzing updates into ignis-main.
CI tailors pipelines for the
gstreamer-securityproject: Windows/macOS (and related Cerbero) jobs are skipped, andci/scripts/test.shomits--check-bugsfor that repo name.OSS-Fuzz expands
build-oss-fuzz.shto build selected good and bad demux/parser plugins (was mostly core-only), adds several new LLVM fuzz targets underci/fuzzing/(audio converter/caps, caps/value/structure parsing, video converter/metadata), seeds/corpus paths for discoverer andgst-value, and wires them inmeson.build.Public API (GIR) documents new 1.30 tracer span/event APIs (
GstTraceFormat,GST_TRACE_*macros) and deprecatesGstTracerRecordin favor of them; adds Android AHardwareBuffer allocators/caps andGST_VIDEO_FORMAT_AHARDWARE_BUFFER; CUDAGstCudaAggregator/GstCudaConverterandgst_cuda_fill_video_frame;gst_base_parse_set_allow_duplicated_ptsplus clearer PAUSED→READY reset notes onGstBaseParsehelpers;gst_egl_image_create; RISC-V vector CPU probe; discoverer stream-number contract docs. Plugin-base micro version bumps appear in generated GIR.Conformance: MV-HEVC Fluster reference hashes updated in
JCT-VC-MV-HEVC.json.Reviewed by Cursor Bugbot for commit 36c4354. Bugbot is set up for automated code reviews on this repo. Configure here.