Skip to content

Sync upstream GStreamer into ignis-main#11

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

Sync upstream GStreamer into ignis-main#11
github-actions[bot] wants to merge 325 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

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-security project: Windows/macOS (and related Cerbero) jobs are skipped, and ci/scripts/test.sh omits --check-bugs for that repo name.

OSS-Fuzz expands build-oss-fuzz.sh to build selected good and bad demux/parser plugins (was mostly core-only), adds several new LLVM fuzz targets under ci/fuzzing/ (audio converter/caps, caps/value/structure parsing, video converter/metadata), seeds/corpus paths for discoverer and gst-value, and wires them in meson.build.

Public API (GIR) documents new 1.30 tracer span/event APIs (GstTraceFormat, GST_TRACE_* macros) and deprecates GstTracerRecord in favor of them; adds Android AHardwareBuffer allocators/caps and GST_VIDEO_FORMAT_AHARDWARE_BUFFER; CUDA GstCudaAggregator / GstCudaConverter and gst_cuda_fill_video_frame; gst_base_parse_set_allow_duplicated_pts plus clearer PAUSED→READY reset notes on GstBaseParse helpers; 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.

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.

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)));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Fix in Cursor Fix in Web

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

thaytan and others added 29 commits June 23, 2026 13:33
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>
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>
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>
seungha-yang and others added 28 commits July 14, 2026 04:38
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>
_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 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>
@github-actions
github-actions Bot force-pushed the automation/sync-upstream-main branch from a53b91e to 36c4354 Compare July 20, 2026 07:01

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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).

Fix All in Cursor

❌ 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);
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 36c4354. Configure here.

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.