=== release 1.28.1 === 2026-02-26 01:44:06 +0000 Tim-Philipp Müller * gst-editing-services.doap: * meson.build: Release 1.28.1 2023-04-02 16:53:45 +0100 Tim-Philipp Müller * 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: 2026-02-15 17:20:59 +0000 Tim-Philipp Müller * RELEASE: modules: remove RELEASE from git, will be generated from template on dist Part-of: 2026-02-15 15:02:07 +0000 Tim-Philipp Müller * NEWS: modules: Remove NEWS from git which is generated from full release notes Part-of: 2026-01-27 18:25:19 +0100 Piotr Brzeziński * meson.build: meson: Fix libxml2 not building due to wrong option type 'python' was moved from a boolean to a feature a few months ago and 4f4260dbe3489699aba0a724a3d55020666a0d6a pulled that in on our side. Notably, this was causing adaptivedemux2 to not build on my system. Part-of: 2026-01-27 17:10:54 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.28.0 === release 1.28.0 === 2026-01-27 17:02:33 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-editing-services.doap: * meson.build: Release 1.28.0 2026-01-19 16:46:51 -0300 Thibault Saunier * ges/ges-pipeline.c: ges-pipeline: fix context use-after-free in task pool handling gst_message_new_have_context() takes ownership of the context (transfer full). The code was using pool_context after passing it to the message, causing a use-after-free. Ref the context before passing it to the message and unref after using it. Part-of: 2025-12-05 11:28:28 -0300 Thibault Saunier * ges/ges-pipeline.c: ges-pipeline: rely on base class for context management Remove the custom context list and related handling from GESPipeline. GstBin already provides context management through the parent GstElement's contexts list and handles NEED_CONTEXT/HAVE_CONTEXT messages appropriately. The preview sink bus handler no longer needs special context handling since forwarded messages will be processed by GstBin's message handler. The only custom handling that remains is for the task pool context, which is specific to GESPipeline's needs. Part-of: 2025-11-27 09:39:47 -0300 Thibault Saunier * ges/ges-pipeline.c: ges-pipeline: add support for task pool context When child elements request a task pool context, GESPipeline now intercepts the request in its bus sync handler and: - First posts a need-context message as if from itself, giving applications a chance to provide a shared task pool - If no context is provided, creates its own GstSharedTaskPool with max threads set to the number of processors - Stores the context in its context list for reuse by other children - Answers the requesting child element directly Part-of: 2026-01-05 20:20:51 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.27.90 === release 1.27.90 === 2026-01-05 20:15:10 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-editing-services.doap: * meson.build: Release 1.27.90 2025-12-09 19:13:20 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.27.50 === release 1.27.50 === 2025-12-09 19:08:48 +0000 Tim-Philipp Müller * NEWS: * RELEASE: * gst-editing-services.doap: * meson.build: Release 1.27.50 2025-11-30 19:14:23 -0500 Xavier Claessens * bindings/python/meson.build: devenv: export PYGI_OVERRIDES_PATH Our _GI_OVERRIDES_PATH hack has been upstreamed in pygobject >=3.55, with the new variable name PYGI_OVERRIDES_PATH. Part-of: 2025-11-13 18:00:14 +0100 Stéphane Cerveau * ges/ges-command-line-formatter.c: ges: fix asset refcount leak in command-line formatter The asset returned by _ges_get_asset_from_timeline() needs to be unreffed after passing to ges_project_add_asset() which takes its own reference. Part-of: 2025-10-15 13:04:04 -0300 Thibault Saunier * ges/ges-clip.c: * ges/ges-clip.h: * ges/ges-internal.h: * ges/ges-timeline.c: ges: separate clip layer move detection from track element freezing The GES_CLIP_IS_MOVING flag was used for both suppressing automatic track element creation and indicating layer-to-layer moves. Split into two flags: - GES_CLIP_FREEZE_TRACK_ELEMENTS: prevents automatic track element management during split/ungroup/move operations - GES_CLIP_IS_MOVING_BETWEEN_LAYERS: indicates actual layer-to-layer move in progress Add ges_clip_is_moving_between_layers() public API that returns TRUE only during ges_clip_move_to_layer() operations, not during split or ungroup. This allows distinguishing actual layer moves from other operations that add/remove clips. Remove ges_clip_set_moving_from_layer() wrapper and use flag macros directly for consistency. Part-of: 2025-09-28 09:48:05 -0300 Thibault Saunier * ges/ges-formatter.c: * ges/ges.resource: * ges/meson.build: * ges/python/gesotioformatter.py: ges: Move OTIO formatter to a separate Python plugin The GES OpenTimelineIO formatter was previously embedded directly in libges using GLib resources, this was all a bit complex for not much benefit, moreover it started to crash recently. Move the formatter to a standalone Python plugin that will be loaded through the standard GStreamer Python plugin infrastructure making it all more simple. The formatter is now located in subprojects/gst-python/plugins/ges/ and will only be loaded when the Python plugin is available and opentimelineio is installed. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4676 Part-of: 2025-10-14 13:22:19 -0300 Thibault Saunier * plugins/ges/gesbasebin.c: * plugins/ges/gesbasebin.h: * plugins/ges/gesdemux.c: * plugins/ges/gessrc.c: ges: add error reporting to base bin timeline setup Add a GError parameter to ges_base_bin_set_timeline() to properly report failures when timeline setup fails. Part-of: 2025-10-11 09:20:32 -0300 Thibault Saunier * ges/ges-command-line-formatter.c: * ges/ges-track-element.c: * ges/ges-xml-formatter.c: * ges/gstframepositioner.c: * tests/check/ges/clip.c: * tests/check/ges/project.c: * tests/check/ges/test-utils.h: controller: Add MT-safe gst_timed_value_control_source_list_control_points() gst_timed_value_control_source_get_all() is not thread-safe because it returns transfer-container - the GList contains pointers to internal GstControlPoint structures that can be freed by another thread while being accessed, causing use-after-free bugs. The new list_control_points() returns a full copy of the timed values. Part-of: 2025-10-07 09:36:44 -0300 Thibault Saunier * ges/ges-timeline.c: ges: timeline: Respect SELECT_ELEMENT_TRACK signal discard decision When a handler connected to SELECT_ELEMENT_TRACK returns NULL to indicate that a track element should be discarded, the previous implementation would still emit SELECT_TRACKS_FOR_OBJECT, potentially allowing the element to be added to tracks anyway. This fix ensures that if a handler is connected to SELECT_ELEMENT_TRACK, we respect its decision (whether it returns a track or NULL). Only fall back to SELECT_TRACKS_FOR_OBJECT when no handler is connected to SELECT_ELEMENT_TRACK. Part-of: 2025-09-29 17:18:51 +0900 Seungha Yang * plugins/nle/nlesource.c: ges: Port to gst_object_call_async Part-of: 2025-10-04 15:16:52 -0400 Doug Nazar * ges/ges-audio-track.h: * ges/ges-audio-transition.h: * ges/ges-effect-clip.h: * ges/ges-effect.h: * ges/ges-group.h: * ges/ges-layer.h: * ges/ges-multi-file-source.h: * ges/ges-pipeline.h: * ges/ges-pitivi-formatter.h: * ges/ges-test-clip.h: * ges/ges-text-overlay-clip.h: * ges/ges-text-overlay.h: * ges/ges-time-overlay-clip.h: * ges/ges-timeline.h: * ges/ges-title-clip.h: * ges/ges-track.h: * ges/ges-transition-clip.h: * ges/ges-uri-clip.h: * ges/ges-utils.h: * ges/ges-video-track.h: * ges/ges-video-transition.h: ges: Add G_GNUC_WARN_UNUSED_RESULT to constructors Part-of: 2025-10-05 14:37:11 -0400 Doug Nazar * tests/check/ges/backgroundsource.c: * tests/check/ges/effects.c: * tests/check/ges/project.c: * tests/check/ges/transition.c: ges: tests: convert g_assert() to g_assert_*() and mark unused items Part-of: 2025-09-25 08:40:12 -0400 Doug Nazar * ges/ges-clip.h: * ges/ges-container.h: * ges/ges-extractable.h: * ges/ges-layer.h: * ges/ges-marker-list.h: * ges/ges-meta-container.h: * ges/ges-pipeline.h: * ges/ges-project.h: * ges/ges-timeline-element.h: * ges/ges-timeline.h: * ges/ges-title-clip.h: * ges/ges-title-source.h: * ges/ges-track-element-deprecated.h: * ges/ges-track.h: ges: Add G_GNUC_WARN_UNUSED_RESULT to funcs with transfer full returns Part-of: 2025-09-24 15:33:02 -0400 Doug Nazar * examples/c/play_timeline_with_one_clip.c: * tests/check/nle/simple.c: gst: fixes Part-of: 2025-09-25 22:42:12 -0400 Doug Nazar * plugins/ges/gesdemux.c: gst: Fix a few small leaks Part-of: 2025-09-14 22:07:40 +0200 Thibault Saunier * ges/ges-gerror.c: * ges/ges-gerror.h: * ges/meson.build: ges: Add ges_error_quark function for GError domain Add a proper ges_error_quark() function to allow automatic ErrorDomain implementation generation in language bindings, particularly for GStreamer-rs. This follows the same pattern as gst_stream_error_quark() in GStreamer core. Part-of: 2025-09-07 20:39:44 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.27.2 === release 1.27.2 === 2025-09-07 20:34:55 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-editing-services.doap: * meson.build: Release 1.27.2 2025-09-06 11:08:47 +0300 Sebastian Dröge * plugins/nle/nlecomposition.c: * tests/check/nle/common.h: * tools/ges-launcher.c: gst: Change usage of gst_element_state_*() to gst_state_*() Part-of: 2025-09-03 20:23:50 -0400 Doug Nazar * ges/ges-base-xml-formatter.c: * ges/ges-command-line-formatter.c: * ges/ges-internal.h: * ges/ges-project.c: * ges/ges-timeline-element.c: * ges/ges-utils.c: ges: Change priority and rename idle source callbacks The priority for idle sources is lower then default and can cause starvation when it's really being used to queue a callback on a context. Increase the priority to default so that callbacks happen in order requested. Part-of: 2025-06-11 01:49:19 -0400 Doug Nazar * ges/ges-source.c: * ges/ges-timeline-element.c: * ges/ges-timeline.c: * ges/ges-track-element.c: * ges/ges-utils.c: * ges/ges-video-source.c: ges: fix various memory leaks Part-of: 2025-06-11 01:50:29 -0400 Doug Nazar * tools/ges-launcher.c: * tools/ges-validate.c: ges: tools: fix various memory leaks Part-of: 2025-06-11 01:53:05 -0400 Doug Nazar * tests/check/ges/asset.c: * tests/check/ges/backgroundsource.c: * tests/check/ges/layer.c: * tests/check/ges/negative.c: * tests/check/ges/overlays.c: * tests/check/ges/project.c: * tests/check/ges/timelineedition.c: * tests/check/ges/titles.c: * tests/check/meson.build: ges: tests: fix various memory leaks Part-of: 2025-08-23 08:49:14 -0400 Thibault Saunier * tools/ges-launcher.c: ges: validate: Respect the mute argument Part-of: 2025-03-26 11:45:59 -0300 Thibault Saunier * ges/ges-clip.c: * ges/ges-effect-asset.c: * ges/ges-internal.h: * ges/ges-track-element.c: * ges/gstframepositioner.c: ges: Set framerate caps filter on the last time effect The responsibility to change the framerate to the one requested on the VideoTrack should always be the last time effect in it. This introduces a new `capsfilter` at the end of video effect that will be in passthrough most of the time. t show Part-of: 2025-08-09 19:00:00 +0300 Sebastian Dröge * ges/ges-timeline-element.c: gstreamer: Make sure to zero-initialize the GValue before G_VALUE_COLLECT_INIT G_VALUE_INIT does not zero-initialize the data member as automatic zero-initialization only happens for non-union types. For union types the initialized value is undefined. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4595 Part-of: 2025-08-05 11:12:41 -0400 Thibault Saunier * docs/libs/document-children-props.py: ges: docs: fix enum value extraction for enums with gaps Handle enums like GstBaseTextOverlayHAlign that have missing values by dynamically calculating the actual range needed and skipping invalid enum values instead of creating placeholder entries. Part-of: 2025-07-30 18:09:16 -0400 Thibault Saunier * docs/libs/GESTimeOverlaySourceClip-children-props.md: * docs/libs/GESTitleSource-children-props.md: * docs/libs/document-children-props.py: ges: docs: Fix enum introspection in document-children-props.py The script was failing with newer pygobject versions because the __enum_values__ attribute has been removed. Updated to use proper introspection by: - Getting enum type from property default value - Using enum_class.values for the first enum value (index 0) - Creating other enum values with enum_type(i) constructor - Extracting name and nick from enum values properly Also fixed ruff linting issues: - Removed unused imports and variables - Used specific exception types instead of bare except - Added noqa comment for gi import ordering Part-of: 2024-01-24 18:29:29 -0300 Thibault Saunier * docs/libs/GESAudioTestSource-children-props.md: * docs/libs/GESAudioUriSource-children-props.md: * docs/libs/GESTimeOverlaySourceClip-children-props.md: * docs/libs/GESTitleSource-children-props.md: * docs/libs/GESTransitionClip-children-props.md: * docs/libs/GESVideoTestSource-children-props.md: * docs/libs/GESVideoUriSource-children-props.md: * docs/libs/document-children-props.py: ges: Update children properties documentation Part-of: 2023-12-06 16:45:18 -0300 Thibault Saunier * ges/ges-video-source.c: * ges/gstframepositioner.c: * tests/check/ges/test-utils.h: * tests/check/meson.build: * tests/check/scenarios/check-zorder.validatetest: ges: framepositioner: Make zorder controllable and expose it And add a test for it Part-of: 2025-07-24 20:19:00 +0100 Nirbheek Chauhan * meson.build: meson: Pass python=false to libxml2 We don't need this in gstreamer anyway. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4510 Part-of: 2025-07-08 20:00:07 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.27.1 === release 1.27.1 === 2025-07-08 19:55:15 +0100 Tim-Philipp Müller * NEWS: * RELEASE: * gst-editing-services.doap: * meson.build: Release 1.27.1 2025-06-22 03:25:09 -0400 Doug Nazar * ges/ges-clip.c: ges: Fix using freed memory to print prop name Part-of: 2025-06-10 14:41:22 +0200 Víctor Manuel Jáquez Leal * scripts/gen-changelog.py: gstreamer-vaapi: remove subproject It's almost superseded by va plugin in gst-plugins-bad. Part-of: 2025-05-16 13:32:08 +0200 Thibault Saunier * ges/ges-structured-interface.c: * plugins/nle/validate.c: general: Stop checking `G_HAVE_GNUC_VARARGS` now that we depend on c99 Cleaning up a bit the code now that we can rely on C99 which specifies varargs for macros. Part-of: 2025-05-28 11:30:05 +0200 Thibault Saunier * ges/ges-asset.c: asset: Do not warn on `ges_asset_request` for UriClipAsset It is a common pattern to request UriClip asset sync to check if it is in the cache and it is not a problem. Part-of: 2025-03-20 09:29:58 -0300 Thibault Saunier * ges/ges-track-element.c: ges: Handle add_control_binding failures Part-of: 2025-05-21 09:50:29 -0400 Doug Nazar * plugins/ges/gessrc.c: ges: Free path and uri Part-of: 2025-05-21 09:48:32 -0400 Doug Nazar * plugins/ges/gesbasebin.c: ges: Ensure we free the pad and the pad template Part-of: 2025-05-21 09:46:12 -0400 Doug Nazar * tests/check/python/test_assets.py: ges: Silence warning about invalid escape sequence Part-of: 2025-05-14 14:30:09 -0400 Doug Nazar * ges/ges-audio-track.c: ges-audio-track: Switch to GST_AUDIO_NE() Part-of: 2025-05-02 08:56:19 +0200 Alexander Slobodeniuk * ges/ges-asset.c: * ges/ges-audio-uri-source.c: * ges/ges-clip-asset.c: * ges/ges-clip.c: * ges/ges-container.c: * ges/ges-effect-clip.c: * ges/ges-group.c: * ges/ges-image-source.c: * ges/ges-layer.c: * ges/ges-marker-list.c: * ges/ges-multi-file-source.c: * ges/ges-project.c: * ges/ges-test-clip.c: * ges/ges-text-overlay-clip.c: * ges/ges-timeline-element.c: * ges/ges-timeline.c: * ges/ges-title-clip.c: * ges/ges-track-element-asset.c: * ges/ges-track-element.c: * ges/ges-track.c: * ges/ges-transition-clip.c: * ges/ges-uri-asset.c: * ges/ges-uri-clip.c: * ges/ges-video-transition.c: * ges/ges-video-uri-source.c: * ges/gstframepositioner.c: * plugins/nle/nleobject.c: * plugins/nle/nleoperation.c: * plugins/nle/nlesource.c: * plugins/nle/nleurisource.c: properties: add G_PARAM_STATIC_STRINGS where missing "Hold on, I know you need to generate the registry, but let me just create copies of all those strings first", Framework whispered Part-of: 2025-03-15 20:56:17 +0100 Tim-Philipp Müller * meson.options: meson: rename meson_options.txt to meson.options Which is supported since Meson 1.1: https://mesonbuild.com/Release-notes-for-1-1-0.html#support-for-reading-options-from-mesonoptions Part-of: 2025-04-08 15:24:42 +0200 Andoni Morales Alastruey * ges/ges-video-uri-source.c: ges: fix frame position for sources with par < 1 In #8693 the issue was fixed for par > 1 without noticing that it was also broken for par > 1. Given that the natural width and height only changes when par != 1, the logic is simplified to do: * par_n < par_d -> the height is corrected * par_n > par_d -> the width is corrected Part-of: 2025-04-09 10:28:14 -0400 Thibault Saunier * ges/ges-meta-container.c: * ges/ges-uri-asset.c: ges: Enhance debug logging Part-of: 2025-03-14 19:14:43 -0400 Doug Nazar * ges/ges-asset.c: * ges/ges-effect-clip.c: * ges/ges-effect.c: * ges/ges-image-source.c: * ges/ges-multi-file-source.c: * ges/ges-project.c: * ges/ges-uri-clip.c: all: Annotate *_set_property() contructor only props without free Properties that are marked constructor only aren't required to be freed before g_value_dup_string() as they can only be called once during construction. Part-of: 2025-03-26 11:38:56 +0100 Andoni Morales Alastruey * ges/ges-video-uri-source.c: ges: fix frame position for sources with par > 1 A source with 1920x1080 and par 16:15 has a natural size of 2048x1080. The current code is incorrectly setting the natural width as height resulting in 1920x2048. Part-of: 2025-03-12 13:59:45 +0100 Tim-Philipp Müller * RELEASE: * meson.build: Back to development in main branch after 1.26.0 Part-of: === release 1.26.0 ===