=== release 1.28.3 === 2026-05-11 18:28:12 +0100 Tim-Philipp Müller * gst-editing-services.doap: * meson.build: Release 1.28.3 2026-04-07 13:09:24 +0100 Nirbheek Chauhan * 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: 2026-04-16 16:13:56 +0000 Thibault Saunier * ges/ges-uri-source.c: ges: fix use-after-free in GESUriSource decodebin callbacks uridecodebin streaming threads can fire autoplug-select and source-setup after the owning GESVideoUriSource/GESAudioUriSource has started being disposed, dereferencing a self->element that points at freed private data (self is embedded in the owner's private data). Connect those two signals with g_signal_connect_object(), passing the owning track element as the lifetime-binding object. GLib then keeps a temporary reference on it for the duration of each invocation and invalidates the closure once the element is destroyed, covering both the in-flight and future-invocation races without manual bookkeeping. Part-of: 2026-03-23 10:16:12 -0300 Thibault Saunier * ges/ges-structured-interface.c: structured-interface: fix use-after-free of last container reference The LAST_CONTAINER_QDATA was stored as a raw pointer on the timeline, which could become stale if the container was destroyed. Replace it with a GWeakRef so that lookups safely return NULL when the container is gone instead of dereferencing freed memory. Part-of: 2025-11-21 10:59:39 -0300 Thibault Saunier * ges/ges-asset.c: ges: asset: fix potential crash in cache_deinit Add a null check before destroying type_entries_table to handle cases where the cache was never initialized or already deinitialized. Part-of: 2026-02-10 16:26:05 +0000 Thibault Saunier * ges/ges-pipeline.c: * tests/check/ges/basic.c: ges: pipeline: fix shared task pool context handling The shared task pool context created in ges_pipeline_handle_message was never stored on the pipeline element itself. This meant gst_element_get_context() would always return NULL for subsequent NEED_CONTEXT requests, causing a new pool to be created for every child element that requested one instead of reusing the same pool. Fix this by calling gst_element_set_context() after creating the pool, and clean up the pool in dispose. Add a test verifying the context is properly stored on the pipeline. Part-of: 2026-02-08 13:37:10 +0000 Thibault Saunier * ges/ges-xml-formatter.c: ges: xml-formatter: fix asset list leak in _save_assets Two issues with the asset list in _save_assets: The return value of g_list_sort was not assigned back to the assets variable. Since g_list_sort may change the list head, the subsequent g_list_free_full could miss nodes that were sorted before the original head pointer. Also, the early return on _save_subproject failure did not free the assets list. Part-of: 2026-02-08 13:37:03 +0000 Thibault Saunier * plugins/ges/gesdemux.c: gesdemux: fix buffer and event leaks in EOS handler The EOS handler in ges_demux_sink_event takes a buffer from the input adapter and maps it but never unmaps or unrefs it. The EOS event parameter is also never unreffed on the success/error code paths since the function returns before reaching gst_pad_event_default. This caused "definitely lost" leaks of the xges file content buffer and EOS events in every nested timeline test. Part-of: 2026-02-06 23:30:13 +0000 Thibault Saunier * plugins/ges/gesbasebin.c: ges: fix memory leaks during nested timeline teardown GESBaseBin locks the inner timeline's state (commit b283b3b5442) to prevent the parent NLE composition's action thread from cascading state changes into it, which would cause SELECT_STREAM events to be pushed from the wrong thread. During shutdown however, this locked state prevents the inner timeline from being properly set to NULL during the normal state change cascade, leaking pads' sticky events and buffers. Fix this by unlocking the timeline state in GESBaseBin's PAUSED_TO_READY handler - by this point the composition's action thread is already stopping and the race condition no longer applies. Also set the inner timeline to NULL in GESBaseBin's dispose as a safety net for cases where the state change cascade doesn't run. Part-of: 2026-02-06 21:23:20 +0000 Thibault Saunier * ges/ges-validate.c: ges: validate: fix action type leak in prepare_seek_action gst_validate_get_action_type() returns a new reference that must be released by the caller. prepare_seek_action() never unreffed the returned type, leaking a reference on every seek action preparation. Part-of: 2026-02-06 17:10:51 +0000 Thibault Saunier * ges/ges-timeline.c: ges: timeline: fix SELECT_STREAMS event leak in send_event GstElement::send_event is transfer-full for the event parameter. When ges_timeline_send_event() handles a GST_EVENT_SELECT_STREAMS event internally instead of chaining up, it must unref the event. The event was leaked on every stream selection. Part-of: 2026-02-06 17:10:46 +0000 Thibault Saunier * plugins/nle/nleobject.c: nle: fix message leaks in nle_bin_handle_message GstBin::handle_message is transfer-full for the message parameter. When the method returns without chaining up to the parent class, it must unref the message itself. Both early-return paths (NLE_QUERY_PARENT_NLE_OBJECT handling and GST_MESSAGE_STREAM_COLLECTION dropping) were missing the gst_message_unref() call, leaking the message on every occurrence. Part-of: 2026-02-06 17:10:39 +0000 Thibault Saunier * ges/ges-project.c: ges: project: fix URI string leak in missing-uri signal emission g_signal_emit() with a G_TYPE_STRING return value overwrites the output pointer without freeing the previous value. When _request_id_update() returns a non-NULL new_id, that string was leaked by the subsequent g_signal_emit() call which unconditionally overwrites the pointer. Save the proposed id before emitting the signal and free it only if the signal handler provides a different replacement. Part-of: 2026-02-06 17:10:33 +0000 Thibault Saunier * ges/ges-track.c: ges: track: fix stream collection leak in handle_message gst_structure_get() with GST_TYPE_STREAM_COLLECTION returns a new reference that was never released after being passed to ges_track_select_subtimeline_streams(). Part-of: 2026-02-06 17:10:27 +0000 Thibault Saunier * plugins/ges/gesdemux.c: gesdemux: fix caps and query leaks Fix two memory leaks found with valgrind: - In ges_demux_get_extension(), the caps created from mimetype were not freed when no matching structure was found in the loop iteration, leaking on every non-matching formatter. - In ges_demux_create_timeline(), the URI query was never unreffed after being used, leaking on every timeline creation. Part-of: 2026-04-07 20:07:19 +0100 Tim-Philipp Müller * meson.build: Back to development after 1.28.2 === release 1.28.2 === 2026-04-07 20:02:23 +0100 Tim-Philipp Müller * gst-editing-services.doap: * meson.build: Release 1.28.2 2026-03-30 16:40:02 +0300 Sebastian Dröge * ges/ges-multi-file-source.c: gst: Fix a couple of const correctness bugs around strchr() usage `assignment discards ‘const’ qualifier from pointer target type` Part-of: 2026-03-18 10:04:29 +0100 Xabier Rodriguez Calvar * meson.build: ges: remove spurious python-embed dependency from libges libges does not use any Python API directly — the only Python-related code is gst_plugin_load("python") in ges-formatter.c, which is a GStreamer API call. The gst-python plugin itself handles all Python interaction. The python-embed dependency was added to libges_deps, causing: - An unnecessary python-X.Y-embed in Requires.private of the .pc file - Unnecessary linkage against libpython on macOS The config.h entries HAS_PYTHON and PY_LIB_FNAME were also dead code, never referenced by any C source file. Remove python_dep, gmodule_dep, and libdl from libges_deps along with all the libpython search logic, since none of these are actually used. This is a follow-up to !9759 which moved the OTIO formatter to a separate Python plugin but left behind the now-unused python-embed dependency and libpython search logic in the GES meson.build. Part-of: 2026-02-26 01:53:07 +0000 Tim-Philipp Müller * meson.build: Back to development after 1.28.1 === 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 ===