=== release 1.27.90 ===

2026-01-05 20:15:10 +0000  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	* gst-editing-services.doap:
	* meson.build:
	  Release 1.27.90

2025-12-09 19:13:20 +0000  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.27.50

=== release 1.27.50 ===

2025-12-09 19:08:48 +0000  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	* gst-editing-services.doap:
	* meson.build:
	  Release 1.27.50

2025-11-30 19:14:23 -0500  Xavier Claessens <xclaessens@netflix.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10252>

2025-11-13 18:00:14 +0100  Stéphane Cerveau <scerveau@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10154>

2025-10-15 13:04:04 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9855>

2025-09-28 09:48:05 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9759>

2025-10-14 13:22:19 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9841>

2025-10-11 09:20:32 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9830>

2025-10-07 09:36:44 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9809>

2025-09-29 17:18:51 +0900  Seungha Yang <seungha@centricular.com>

	* plugins/nle/nlesource.c:
	  ges: Port to gst_object_call_async
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/869>

2025-10-04 15:16:52 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9797>

2025-10-05 14:37:11 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9794>

2025-09-25 08:40:12 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9773>

2025-09-24 15:33:02 -0400  Doug Nazar <nazard@nazar.ca>

	* examples/c/play_timeline_with_one_clip.c:
	* tests/check/nle/simple.c:
	  gst: fixes
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9766>

2025-09-25 22:42:12 -0400  Doug Nazar <nazard@nazar.ca>

	* plugins/ges/gesdemux.c:
	  gst: Fix a few small leaks
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9756>

2025-09-14 22:07:40 +0200  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9700>

2025-09-07 20:39:44 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.27.2

=== release 1.27.2 ===

2025-09-07 20:34:55 +0100  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	* gst-editing-services.doap:
	* meson.build:
	  Release 1.27.2

2025-09-06 11:08:47 +0300  Sebastian Dröge <sebastian@centricular.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9655>

2025-09-03 20:23:50 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9350>

2025-06-11 01:49:19 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9350>

2025-06-11 01:50:29 -0400  Doug Nazar <nazard@nazar.ca>

	* tools/ges-launcher.c:
	* tools/ges-validate.c:
	  ges: tools: fix various memory leaks
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9350>

2025-06-11 01:53:05 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9350>

2025-08-23 08:49:14 -0400  Thibault Saunier <tsaunier@igalia.com>

	* tools/ges-launcher.c:
	  ges: validate: Respect the mute argument
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9602>

2025-03-26 11:45:59 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9013>

2025-08-09 19:00:00 +0300  Sebastian Dröge <sebastian@centricular.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9525>

2025-08-05 11:12:41 -0400  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9495>

2025-07-30 18:09:16 -0400  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5987>

2024-01-24 18:29:29 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5987>

2023-12-06 16:45:18 -0300  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5987>

2025-07-24 20:19:00 +0100  Nirbheek Chauhan <nirbheek@centricular.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9438>

2025-07-08 20:00:07 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.27.1

=== release 1.27.1 ===

2025-07-08 19:55:15 +0100  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	* gst-editing-services.doap:
	* meson.build:
	  Release 1.27.1

2025-06-22 03:25:09 -0400  Doug Nazar <nazard@nazar.ca>

	* ges/ges-clip.c:
	  ges: Fix using freed memory to print prop name
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9273>

2025-06-10 14:41:22 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>

	* scripts/gen-changelog.py:
	  gstreamer-vaapi: remove subproject
	  It's almost superseded by va plugin in gst-plugins-bad.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9200>

2025-05-16 13:32:08 +0200  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8990>

2025-05-28 11:30:05 +0200  Thibault Saunier <tsaunier@igalia.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9126>

2025-03-20 09:29:58 -0300  Thibault Saunier <tsaunier@igalia.com>

	* ges/ges-track-element.c:
	  ges: Handle add_control_binding failures
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9126>

2025-05-21 09:50:29 -0400  Doug Nazar <nazard@nazar.ca>

	* plugins/ges/gessrc.c:
	  ges: Free path and uri
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9043>

2025-05-21 09:48:32 -0400  Doug Nazar <nazard@nazar.ca>

	* plugins/ges/gesbasebin.c:
	  ges: Ensure we free the pad and the pad template
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9043>

2025-05-21 09:46:12 -0400  Doug Nazar <nazard@nazar.ca>

	* tests/check/python/test_assets.py:
	  ges: Silence warning about invalid escape sequence
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9043>

2025-05-14 14:30:09 -0400  Doug Nazar <nazard@nazar.ca>

	* ges/ges-audio-track.c:
	  ges-audio-track: Switch to GST_AUDIO_NE()
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8984>

2025-05-02 08:56:19 +0200  Alexander Slobodeniuk <aslobodeniuk@fluendo.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8915>

2025-03-15 20:56:17 +0100  Tim-Philipp Müller <tim@centricular.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8651>

2025-04-08 15:24:42 +0200  Andoni Morales Alastruey <ylatuya@gmail.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8828>

2025-04-09 10:28:14 -0400  Thibault Saunier <tsaunier@igalia.com>

	* ges/ges-meta-container.c:
	* ges/ges-uri-asset.c:
	  ges: Enhance debug logging
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8803>

2025-03-14 19:14:43 -0400  Doug Nazar <nazard@nazar.ca>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8648>

2025-03-26 11:38:56 +0100  Andoni Morales Alastruey <ylatuya@gmail.com>

	* 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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8693>

2025-03-12 13:59:45 +0100  Tim-Philipp Müller <tim@centricular.com>

	* RELEASE:
	* meson.build:
	  Back to development in main branch after 1.26.0
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8621>

=== release 1.26.0 ===

