=== release 1.29.2 ===

2026-06-29 00:04:39 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-devtools.doap:
	* meson.build:
	  Release 1.29.2

2026-05-12 15:11:42 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/data/gstvalidate.supp:
	  ges: validate: add title source selector test for glvideomixer
	  Adds check_selector_title_glvideomixer.validatetest, which exercises
	  the GESVideoElementSelector with a +title clip routed through
	  glvideomixer. The existing check_selector_* scenarios all use
	  +test-clip (videotestsrc) and never exercise the title source's
	  filter chain (videotestsrc ! textoverlay) against a non-software
	  compositor. This adds the first coverage of titles end-to-end with
	  the GL family.
	  Asserts the selector picks memory:GLMemory + glvideomixer +
	  glcolorconvert + glupload + gldownload.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11434>

2026-04-28 11:47:28 -0400  Thibault Saunier <tsaunier@igalia.com>

	* docs/ges-validate-action-types.md:
	  validate: docs: regenerate GES action types reference
	  Picked up via `ges-launch-1.0 --inspect-action-type ges`. The bulk of
	  the diff is pre-existing drift (action types added to the registration
	  code but never re-rendered into the doc): `seek`, `edit`, `group`,
	  `set-layer-active`, `set-ges-properties`, `check-ges-properties`,
	  `check-child-properties`, `set-child-properties`. Existing entries
	  are updated to current parameter lists and descriptions.
	  Also adds the new `check-ges-video-element-selector` action this MR
	  introduced.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11434>

2026-06-22 11:07:43 +0900  Seungha Yang <seungha@centricular.com>

	* meson.build:
	  msvc: Fix build after adding new tracer macros
	  MSVC's legacy preprocessor does not expand variadic args in
	  recursive macros correctly, causing new tracer macros to fail
	  with cl version 19.41.34120.
	  Use standard conforming preprocessor mode instead
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11907>

2026-06-04 11:52:04 -0400  Thibault Saunier <tsaunier@igalia.com>

	* tracer/gsttr-stats.py:
	* tracer/tracer/analysis_runner.py:
	* tracer/tracer/parser.py:
	  tracer: adapt the python log-analysis tools to GstTraceFormat
	  The log tracer now announces each format's schema as a '<name>.class' line
	  (legacy scope/value shape, GstTracerFieldType nicks). Update the tracer parser
	  to recognise those lines regardless of source file, accept decimal thread ids,
	  and aggregate any numeric field with bounds derived from the data.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11708>

2026-06-04 09:49:53 -0400  Thibault Saunier <tsaunier@igalia.com>

	* tracer/Makefile:
	* tracer/gsttr-stats.py:
	* tracer/gsttr-tsplot.py:
	  tracer: document that the log tracer renders structured output
	  The stats/rusage/latency/leaks/factories tracers now emit their records as
	  structured tracer events that the log tracer turns into GST_TRACER debug
	  output. Update the gst-stats workflow examples to co-enable the log tracer.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11708>

2026-05-18 12:47:24 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-scenario.c:
	  validate: scenario: Trace action execution as custom spans
	  Wrap each action's `execute()` call in a `validate-action` custom
	  span, closing it on synchronous return, on `_action_set_done()` for
	  async actions, and on `_action_free()` as a safety net.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11708>

2026-06-04 10:44:18 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-monitor.c:
	  validate: monitor: initialize the pipeline weak ref on init
	  monitor->pipeline is a GWeakRef read through g_weak_ref_get() and cleared
	  in finalize, but it was only g_weak_ref_init()'d on the parent-pipeline
	  and set-property paths. A monitor that took neither left the GWeakRef
	  uninitialized, so the get/clear operated on garbage. Initialize it to
	  NULL in _init so it is always valid.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-06-02 09:06:08 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-report.c:
	  validate: cap the reporters listed in a "Detected on" line
	  A single issue can be detected on hundreds of pads, producing an unreadable
	  line. List at most 20 reporters and append "... and N more", unless
	  GST_VALIDATE_REPORTING_DETAILS=all is set.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-06-01 15:41:12 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-internal.h:
	* validate/gst/validate/gst-validate-report.c:
	* validate/gst/validate/gst-validate-reporter.c:
	* validate/gst/validate/gst-validate-scenario.c:
	* validate/gst/validate/gst-validate-utils.c:
	  validate: colorize report output on terminals
	  Highlight report levels, the detected-on/description labels and action
	  execution (name, file:line, scenario, repeat, result) when the output is a
	  color-capable terminal. Color escapes are stripped for files and pipes.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-06-01 14:43:31 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-runner.c:
	  validate: cap repeated "Detected on" lines in synthetic reports
	  When a single issue type is detected on a large number of reporters, the
	  synthetic report printed one "Detected on <...>" line per reporter, flooding
	  the output with hundreds of near-identical lines.
	  Cap the listing to a handful of lines and collapse the rest into a single
	  "... and N more" line. Critical and full-details reports are always printed in
	  full, and setting GST_VALIDATE_REPORTING_DETAILS=all restores the complete
	  listing.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-05-26 15:14:01 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-pipeline-monitor.c:
	  validate: pipeline-monitor: guard NULL message src in NOT_NEGOTIATED report
	  `_generate_not_negotiated_error_report` cast GST_MESSAGE_SRC() to a
	  GstElement and walked its srcpads, crashing on messages posted with a
	  NULL src. Guard against it, and always include the original GError
	  message and debug field so the report stays useful when the src is
	  missing.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-05-15 17:27:24 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-scenario.c:
	  validate: scenario: add dot-dir parameter to dot-pipeline action
	  Allows callers to drop the dot file in a dedicated subdirectory of
	  GST_DEBUG_DUMP_DOT_DIR instead of the directory's root. Useful when a
	  scenario produces many dot files and they need to be grouped per
	  action, per phase, etc.
	  Also documents the existing `name` and `details` parameters which had
	  no parameter spec until now.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-05-13 16:49:26 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-runner.c:
	  validate: runner: honor print filters in report synthesis
	  Skip synthesized output for reports that gst_validate_report_should_print()
	  filters out via the GST_VALIDATE print flags (issues/warnings/criticals).
	  Criticals are still tracked so the runner exit code is unaffected.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-05-12 19:10:26 -0400  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-pad-monitor.c:
	  validate: Do not error on unresolved proxy pad lookup
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-03-04 14:54:13 -0300  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-scenario.c:
	  validate: scenario: check position after flush seek completes
	  When a flush seek completes (state change reaches target), verify the
	  resulting position before marking the seek action as done. Without this
	  check, position errors could be reported against the wrong action.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2026-03-03 15:09:44 -0300  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-scenario.c:
	  validate: scenario: add max-execution-duration action parameter
	  Allow scenario actions to specify a maximum expected execution duration.
	  When set, the action's actual execution time is checked against this
	  threshold and a SCENARIO_ACTION_EXECUTION_ERROR is reported if it
	  exceeds it. This is useful for detecting performance regressions in
	  actions like seeks.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11848>

2024-09-03 19:28:11 +1000  Jan Schmidt <jan@centricular.com>

	* validate/gst/validate/gst-validate-utils.c:
	  validate: Use gst_value_take_structure()
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7647>

2026-05-14 20:07:35 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* validate/launcher/baseclasses.py:
	  validate: Use relative paths in the printed command under CI
	  This makes it much easier to run validate commands locally, since you
	  don't need to manually substitute the paths. Just export BUILD_ROOT
	  and SOURCE_ROOT in the shell and you're good to go.
	  Use double-quotes so that substitution works.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11626>

2026-05-14 14:00:10 +0100  Tim-Philipp Müller <tim@centricular.com>

	* validate/launcher/testsuites/check.py:
	  tests: skip rtpfunnel stress test under valgrind
	  Takes eternities (22 minutes in some cases!), probably
	  because of the way multithreading works in valgrind.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11622>

2026-04-07 13:09:24 +0100  Nirbheek Chauhan <nirbheek@centricular.com>

	* meson.build:
	  meson: Require C std gnu11 or c11
	  When using gcc or clang, gnu11 will be used, and when using MSVC c11
	  will be used which will pass /std:c11. This provides us with the
	  `restrict` keyword on all supported platforms.
	  We can do this now because we require Visual Studio 2019.
	  This feature was added in Meson 1.3
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11266>

2026-05-06 19:11:11 -0400  Olivier Crête <olivier.crete@collabora.com>

	* validate/gst/validate/flow/gstvalidateflow.c:
	  validateflow: Wait for all async calls when stopping
	  This fixed segfaults that happen because async calls on other
	  threads can survive the validate runner.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11517>

2026-05-05 21:44:38 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* validate/gst/validate/flow/gstvalidateflow.c:
	  validate: flow: defer mismatch report off the streaming thread
	  Calling GST_VALIDATE_REPORT while holding flow_mutex risks a deadlock:
	  the report path walks the pipeline (dot dump) and emits the
	  "report-added" signal synchronously, taking GstObject locks that other
	  threads may hold while waiting on flow_mutex (e.g. via runner_stopping).
	  In validate_flow_override_vprintf, dispatch the per-line mismatch report
	  through gst_call_async. In runner_stopping, capture the remaining
	  mismatch under the lock and report it after release.
	  This was consistently causing a 40 min timeout on the CI:
	  https://gitlab.freedesktop.org/gstreamer/gstreamer/-/jobs/99029861
	  https://gitlab.freedesktop.org/gstreamer/gstreamer/-/jobs/99015308
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11436>

2026-05-05 14:17:39 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* validate/launcher/testsuites/check.py:
	  devtools: Blacklist nle.ensure_no_unnecessary_stack_init_seeks
	  This is failing 70% of the time under load, skip it.
	  https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5083
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11436>

2026-04-15 15:13:41 -0400  Thibault Saunier <tsaunier@igalia.com>

	* dots-viewer/Cargo.lock:
	* dots-viewer/package-lock.json:
	* dots-viewer/package.json:
	* dots-viewer/static/dist/bundle.js:
	  dots-viewer: Update dependencies
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11350>

2026-03-03 18:04:20 -0300  Thibault Saunier <tsaunier@igalia.com>

	* docs/fakesrc.simple.validatetest:
	* validate/tests/launcher_tests/check_set_prop_never_called_error.validatetest:
	* validate/tests/launcher_tests/check_set_props_and_time_props.validatetest:
	* validate/tests/launcher_tests/foreach.validatetest:
	* validate/tests/launcher_tests/foreach_array.validatetest:
	* validate/tests/launcher_tests/foreach_deep.validatetest:
	* validate/tests/launcher_tests/foreach_repeat.validatetest:
	* validate/tests/launcher_tests/multipipe.validatetest:
	* validate/tests/launcher_tests/not_negotiated.accept_caps_failure.validatetest:
	* validate/tests/launcher_tests/overrides.validatetest:
	* validate/tests/launcher_tests/run_command_with_envvars.validatetest:
	* validate/tests/launcher_tests/simple_interlaced_action.validatetest:
	* validate/tests/launcher_tests/simple_repeat.validatetest:
	  validate: Reindent all validatetest files
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10965>

2026-02-20 19:29:58 -0300  Thibault Saunier <tsaunier@igalia.com>

	* dots-viewer/bundle-entry.js:
	* dots-viewer/package.json:
	* dots-viewer/static/css/graphviz.svg.css:
	* dots-viewer/static/css/pipeline.css:
	* dots-viewer/static/dist/bundle.js:
	* dots-viewer/static/index.html:
	* dots-viewer/static/js/svg-overlay-manager.js:
	* dots-viewer/static/js/text-ellipsizer.js:
	* dots-viewer/static/js/tooltip.js:
	  dots-viewer: add showHtmlTooltip() and update tooltip styles for caps display
	  Add a showHtmlTooltip() method to TooltipManager so callers can inject
	  arbitrary HTML rather than plain text.  Also update the tooltip CSS to
	  use monospace font, pre-wrap whitespace, and a wider max-width to
	  accommodate the formatted caps output.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11082>

2026-02-20 19:03:47 -0300  Thibault Saunier <tsaunier@igalia.com>

	* dots-viewer/static/css/graphviz.svg.css:
	* dots-viewer/static/index.html:
	* dots-viewer/static/js/gstdots.js:
	* dots-viewer/static/js/svg-overlay-manager.js:
	* dots-viewer/static/pipeline.html:
	  dots-viewer: improve SVG dark theme, dimming, fonts and Esc handling
	  - Add a dark theme for graphviz SVGs using invert(1) hue-rotate(180deg);
	  white fills are pre-softened to #c0c0c0 so they land at ~#404040 after
	  inversion rather than pure black, while black text inverts to pure white.
	  A light/dark toggle button persists the choice in localStorage.
	  - Use a system-UI font stack for SVG text for better readability.
	  - Dim non-selected pads to opacity 0.35 + grayscale(1) instead of 0.15 so
	  their text remains legible when a pad is highlighted.
	  - Require Esc twice to close the pipeline overlay; the first press unhighlights
	  any selected pad (or arms a 2-second pending state), the second press lets
	  the event through to removePipelineOverlay(). Modifier-key keyup events no
	  longer reset the pending state so the two-press sequence is reliable.
	  - Update overlay instruction text colour to #e0e0e0 (was #808080) so it is
	  readable against the dark overlay background.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11082>

2026-02-20 19:03:14 -0300  Thibault Saunier <tsaunier@igalia.com>

	* dots-viewer/bundle-entry.js:
	* dots-viewer/package-lock.json:
	* dots-viewer/package.json:
	* dots-viewer/static/css/pipeline.css:
	* dots-viewer/static/dist/bundle.css:
	* dots-viewer/static/dist/bundle.js:
	* dots-viewer/static/dist/bundle.js.LICENSE.txt:
	* dots-viewer/static/index.html:
	* dots-viewer/static/js/gstdots.js:
	* dots-viewer/static/js/jquery.graphviz.svg.js:
	* dots-viewer/static/js/pipeline-navigation.js:
	* dots-viewer/static/js/pipeline-viewer.js:
	* dots-viewer/static/js/svg-overlay-manager.js:
	* dots-viewer/static/js/text-ellipsizer.js:
	* dots-viewer/static/js/tooltip.js:
	* dots-viewer/static/overlay.html:
	* dots-viewer/static/pipeline.html:
	* dots-viewer/webpack.config.js:
	  dots-viewer: replace rendering stack with d3-graphviz
	  Replace the @viz-js/viz webpack bundle and jQuery graphviz.svg plugin
	  with d3-graphviz, which uses @hpcc-js/wasm for Graphviz WASM layout
	  and D3.js for SVG rendering. This gives us a single Graphviz dependency,
	  native DOT parsing, built-in zoom/pan, and full CSS control over the
	  rendered SVG.
	  index.html now renders thumbnails and the interactive overlay directly
	  with d3-graphviz which removes the meed for the iframe in the overlay.
	  Node/edge indexing and highlighting are reimplemented using
	  recursive traversal behaving the same way as before.
	  matching the original linkedTo/linkedFrom behavior.
	  Add pipeline.html as a standalone DOT file viewer with drop zone,
	  three-panel layout (info sidebar, graph area, detail panel), and
	  d3-graphviz rendering via pipeline-viewer.js.
	  Remove dot-parser.js (d3-graphviz handles DOT natively),
	  jquery.graphviz.svg.js (replaced by d3-graphviz), and overlay.html
	  (overlay now renders directly in index.html).
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11082>

2026-04-08 18:12:45 -0400  Olivier Crête <olivier.crete@collabora.com>

	* modelinfo-helper/modelinfo-generator.py:
	  modelinfo-helper: Use shape_signature for tflite when available
	  The "shape" field is the allocated one, for dynamic tensors, the
	  "shape_signature" indicates which dimensions are dynamic.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11281>

2026-03-04 20:17:15 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/flow/gstvalidateflow.c:
	  validate: flow: compare expectations live as lines are produced
	  Previously mismatches were only discovered after the pipeline finished,
	  losing information about when during execution the divergence happened.
	  By comparing each line as it is produced, the validate report now
	  captures the exact moment of mismatch with a backtrace pointing to the
	  code responsible.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10975>

2026-03-03 15:08:05 -0300  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/flow/gstvalidateflow.c:
	  validate: flow: include file names in diff output header
	  When printing flow expectation diffs, add a `diff -u -- expected actual`
	  header line so the file paths are visible in the output. This makes it
	  easier to identify which files are being compared, especially when
	  reviewing CI logs.
	  Also move the g_free(fname) call outside the inner block to avoid
	  freeing it before it's used in the header.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10975>

2026-03-22 17:15:18 +0000  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	  modules: remove zombie RELEASE and NEWS files
	  They seem to have come back from the dead by mistake.

2026-03-22 15:00:47 +0000  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.29.1

=== release 1.29.1 ===

2026-03-22 14:56:37 +0000  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	* gst-devtools.doap:
	* meson.build:
	  Release 1.29.1

2023-04-02 16:53:45 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	* scripts/dist-common-files.py:
	  modules: dist common files from monorepo root
	  Less noise when making releases, and just need to maintain one copy.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11094>

2026-03-22 14:20:18 +0000  Tim-Philipp Müller <tim@centricular.com>

	* RELEASE:
	  modules: remove RELEASE from git, will be generated from template on dist

2026-02-15 15:02:07 +0000  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	  modules: Remove NEWS from git which is generated from full release notes
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11094>

2026-03-12 20:40:24 +0100  Vivienne Watermeier <vwatermeier@igalia.com>

	* docs/gst-validate-flow.md:
	* validate/gst/validate/flow/formatting.c:
	* validate/gst/validate/flow/formatting.h:
	* validate/gst/validate/flow/gstvalidateflow.c:
	  validateflow: add option to record buffer contents as text
	  'buffers-checksum' offers a 'raw-hex' option for recording buffer contents,
	  this adds a similar 'raw-text' one to more conveniently record
	  buffers containing text, e.g. subtitles.
	  (And adds a line of documentation for the previously unmentioned 'raw-hex'.)
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11017>

2026-02-27 10:55:44 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/media-descriptor-writer.c:
	  validate: media-descriptor-writer: sort tag fields alphabetically
	  Tag fields in .media_info files were serialized in insertion order,
	  which could vary between runs. Sort them alphabetically to produce
	  stable, diffable output.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-26 23:33:06 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-internal.h:
	* validate/gst/validate/media-descriptor-writer.c:
	* validate/gst/validate/media-descriptor.c:
	  validate: media-descriptor-writer: strip stream IDs for portability
	  Stream IDs in .media_info files contain a SHA256 hash of the media URI
	  as prefix (e.g. "ab929aab.../001"), making them machine-specific and
	  causing meaningless diffs when regenerated on different systems.
	  Strip the SHA256 prefix at write time, storing only the portable suffix
	  ("/001", "/002") for multi-stream files, or an empty string for
	  single-stream files. The comparison code in stream_id_is_equal() is
	  updated to handle the new portable format while remaining
	  backwards-compatible with old full-hash IDs.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-26 23:15:32 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/launcher/apps/gstvalidate.py:
	  validate-launcher: Move .stream_info files from media submodule to main repo
	  Following the same pattern as .media_info files (d87c819ed93), move
	  .stream_info files into gst-integration-testsuites/media_info/ so they
	  are versioned in the main repo rather than the media submodule.
	  When media_info_dir is set, skip .stream_info files during the regular
	  media path walk and instead discover them from the media_info_dir.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-26 22:15:11 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-internal.h:
	* validate/gst/validate/media-descriptor-writer.c:
	  validate: media-descriptor-writer: sort streams by stream number when serializing
	  Stream ordering in .media_info files depends on discovery/callback order,
	  which is not deterministic. Sort streams by their stream number from
	  GstDiscovererStreamInfo before serializing to ensure stable output
	  across runs.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-26 22:12:06 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/media-descriptor-writer.c:
	  validate: media-descriptor-writer: store relative URIs in .media_info files
	  .media_info files previously stored absolute file:// URIs, making them
	  machine-specific and causing meaningless diffs when regenerated on
	  different systems. When writing to a file, compute the relative path
	  from the output file's directory to the media file and store that
	  instead. Non-file:// URIs (HTTP, DASH, etc.) are left unchanged. If
	  the relative path cannot be computed, the absolute URI is kept as a
	  fallback.
	  The Python parser already handles this gracefully — when a file:// URI
	  doesn't exist on disk, it reconstructs the path from the media file
	  location.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-26 20:16:33 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/launcher/baseclasses.py:
	* validate/launcher/main.py:
	  ci: run media_check tests on a dedicated runner with diff on failure
	  Reserve the last CI parallel runner for media_check tests using a new
	  --dedicated-part option in gst-validate-launcher. On failure, regenerate
	  .media_info files and produce a downloadable diff artifact.
	  Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4936
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-26 10:12:19 -0300  Thibault Saunier <tsaunier@igalia.com>

	* validate/launcher/apps/gstvalidate.py:
	* validate/launcher/baseclasses.py:
	* validate/launcher/main.py:
	  validate-launcher: regenerate stream media info files when updating
	  When running with --update-media-info, stream info (.media_info) files
	  were silently skipped. Parse the existing XML to extract the stream URI
	  and frame-detection setting, then re-run the media check command to
	  regenerate the file.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2026-02-25 16:05:39 -0300  Thibault Saunier <tsaunier@igalia.com>

	* docs/gst-validate-launcher-writing-testsuites.md:
	* docs/gst-validate-launcher.md:
	* docs/sitemap.txt:
	  docs: gst-validate-launcher: split out testsuite writing into its own page
	  The launcher documentation was mixing usage instructions with testsuite
	  authoring details. Split the testsuite implementation example into a
	  dedicated page (gst-validate-launcher-writing-testsuites.md) so the
	  main page focuses on running tests and debugging.
	  Also added sections for listing tests and debugging options (gdb,
	  valgrind, verbose), and registered the new page in the hotdoc sitemap
	  as a child of the launcher page.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10924>

2025-12-18 13:54:30 +0100  Alicia Boya García <aboya@igalia.com>

	* validate/launcher/main.py:
	  gst-validate-launcher: Fix --help for Python 3.14
	  There are two regressions relating to --help in Python 3.14:
	  The existing code did not flush after printing the help to the temporary
	  file. In consequence, it wasn't guaranteed that the file had been fully
	  written (or at all) by the time less was spawned, and in Python 3.14
	  less showed an empty file.
	  Python 3.14's argparse added color formatting to the help. However, less
	  won't display color codes by default and will instead complain about
	  receiving a binary file. This patch passes -R to less to fix this.
	  This patch also makes the usage of the pager consistent with
	  gst-inspect-1.0.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10408>

2026-03-03 15:02:23 +0000  Thibault Saunier <tsaunier@igalia.com>

	* docs/fakesrc.simple.validatetest:
	* docs/gst-validate-flow.md:
	* docs/gst-validate-test-file.md:
	* validate/gst/validate/flow/gstvalidateflow.c:
	* validate/tests/launcher_tests/appsink_forward.validatetest:
	* validate/tests/launcher_tests/simple_repeat.validatetest:
	  validateflow: auto-derive directories from test file path
	  Allow validateflow configs to be written as proper nested structures
	  instead of requiring the $(validateflow) variable expansion:
	  configs = {
	  [validateflow, pad=sink:sink, buffers-checksum=true],
	  }
	  instead of:
	  configs = {
	  "$(validateflow), pad=sink:sink, buffers-checksum=true",
	  }
	  When expectations-dir or actual-results-dir are not explicitly set,
	  validate_flow_override_new() now derives them from the __filename__
	  metadata field (already attached to each config structure by the
	  parser). This mirrors the path computation done in
	  gst_validate_structure_set_variables_from_struct_file().
	  The $(validateflow) variable and the old string syntax remain fully
	  supported for backward compatibility.
	  Port all existing .validatetest files to the new syntax.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10962>

2026-02-22 13:28:57 +0200  Sebastian Dröge <sebastian@centricular.com>

	* dots-viewer/Cargo.lock:
	  devtools: dots-viewer: Update Rust dependencies
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10867>

2026-02-18 20:41:10 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/launcher/reporters.py:
	  validate: launcher: fix total time spent when re-running flaky tests
	  init_timer() was resetting _start_time unconditionally, so the recursive
	  _run_tests() call made for flaky test retries would overwrite the original
	  start time, causing "Total time spent" to only reflect the retry run duration.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10839>

2026-02-18 08:58:45 -0300  Thibault Saunier <tsaunier@igalia.com>

	* validate/launcher/apps/gstvalidate.py:
	  validate-launcher: don't generate tests for skipped media info files after updating them
	  When running with --update-media-info, .skipped media info files were
	  being updated correctly but then also passed to _add_media(), causing
	  tests to be generated for them. Skipped files should never produce tests.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10831>

2026-02-11 00:19:19 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/launcher/testsuites/check.py:
	  validate: blacklist check_edit_in_frames_with_framerate_mismatch from valgrind
	  This test triggers massive external library leaks (PipeWire, ALSA, OpenAL,
	  Pango/Cairo, libxml2) during audio sink autodetection that are not caused
	  by GStreamer code. With 240+ valgrind errors from third-party libraries,
	  suppressing them individually is not practical.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784>

2026-02-10 16:26:21 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/data/gstvalidate.supp:
	  validate: suppress GLib GTask thread pool init leak
	  GLib's GTask type initialization creates a one-time thread pool
	  during GDBus startup that is never freed. This is a known GLib
	  behavior, not a GStreamer leak.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784>

2026-02-06 21:42:19 +0000  Thibault Saunier <tsaunier@igalia.com>

	* validate/gst/validate/gst-validate-scenario.c:
	  validate: scenario: fix action type leak in _should_execute_action
	  GST_VALIDATE_ACTION_GET_TYPE() uses gst_validate_get_action_type()
	  which returns a transfer-full reference. The macro is used inline
	  to access the flags field, but the returned reference is never
	  released, leaking the action type's refcount each time it's called.
	  Use _find_action_type() directly instead, which returns a borrowed
	  reference that doesn't need to be freed.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10784>

2026-02-11 15:08:46 +0000  Thibault Saunier <tsaunier@igalia.com>

	* docs/gst-validate-test-file.md:
	* validate/launcher/apps/gstvalidate.py:
	* validate/launcher/baseclasses.py:
	* validate/launcher/main.py:
	  validate: support .media_info files in the main repo
	  .media_info files often need to be updated atomically with code changes
	  (e.g. a parser fix that changes frame detection results), but updating
	  them in the media submodule requires a separate commit in a separate
	  repo.
	  Add a --media-info-dir option to gst-validate-launcher that specifies a
	  directory containing .media_info files that override the ones next to
	  media files. The directory structure mirrors media/defaults/.
	  The validate testsuite auto-detects media_info/ next to the testsuites
	  directory, so no CLI flag is needed when running from the monorepo.
	  Move all existing .media_info files from the media submodule into
	  subprojects/gst-integration-testsuites/media_info/ so they can be
	  updated in the same commit as the code they relate to.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10791>

2026-02-03 12:44:32 -0300  Thibault Saunier <tsaunier@igalia.com>

	* docs/gst-validate-flow.md:
	* docs/gst-validate-launcher.md:
	* docs/gst-validate-test-file.md:
	* validate/launcher/main.py:
	  integration-testsuites: rename medias/ to media/
	  "Media" is already the plural of "medium", so "medias" is a double
	  plural. Rename the submodule directory from medias/ to media/ and update
	  all references throughout the codebase.
	  The --media-paths argument is now the primary name for the launcher
	  option, with --medias-paths kept as a deprecated alias for backward
	  compatibility.
	  The gitlab repo has been renamed from gst-integration-testsuites to
	  gst-test-media to better reflect its contents (media files only, not
	  testsuites), though the URL path remains gst-integration-testsuites due
	  to gitlab limitations.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10537>

2026-02-02 17:00:33 -0300  Thibault Saunier <tsaunier@igalia.com>

	* docs/gst-validate-test-file.md:
	  validate: docs: document how to add tests and media files to gst-integration-testsuites
	  Add sections to the .validatetest file documentation explaining
	  where tests live, how test discovery works, how to set up
	  validateflow expectations, the steps to follow when adding a new
	  test, and how to add media files to the medias/ submodule.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10537>

2025-12-12 11:14:38 -0300  Thibault Saunier <tsaunier@igalia.com>

	* docs/gst-validate-flow.md:
	* validate/gst/validate/flow/formatting.c:
	* validate/gst/validate/flow/formatting.h:
	* validate/gst/validate/flow/gstvalidateflow.c:
	  validateflow: Add support for GstVideoSEIUserDataUnregisteredMeta
	  Add formatting support for GstVideoSEIUserDataUnregisteredMeta in
	  validateflow's buffer output. The SEI metadata is formatted as:
	  GstVideoSEIUserDataUnregisteredMeta[uuid=..., size=..., data="..."]
	  A new `logged-unregistered-sei-uuids` config option allows whitelisting
	  specific SEI UUIDs to log. If not specified, no SEI metas are logged,
	  preserving backward compatibility with existing expectation files.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10367>

2026-01-27 18:36:19 +0000  Tim-Philipp Müller <tim@centricular.com>

	* RELEASE:
	* meson.build:
	  Back to development in main branch after 1.28.0
	  - Track orc main branch
	  - Track gst-plugins-rs main branch
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10616>

=== release 1.28.0 ===

