=== release 1.28.5 ===

2026-07-08 23:42:39 +0200  Tim-Philipp Müller <tim@centricular.com>

	* gst-editing-services.doap:
	* meson.build:
	  Release 1.28.5

2026-07-03 13:56:26 -0400  Thibault Saunier <tsaunier@igalia.com>

	* tests/check/ges/clip.c:
	* tests/check/ges/test-utils.c:
	* tests/check/ges/test-utils.h:
	* tests/check/ges/timelineedition.c:
	  ges: tests: Implement assertion check macros as functions
	  The GST_TIME_ARGS expansions in CHECK_OBJECT_PROPS and in the clip time
	  conversion macros generated huge test functions, making some test files
	  take up to ~25 seconds to compile. File and line are passed explicitly
	  to the new functions so failures still point at the call site.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12012>

2026-06-12 13:27:54 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.28.4

=== release 1.28.4 ===

2026-06-12 13:19:43 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-editing-services.doap:
	* meson.build:
	  Release 1.28.4

2026-05-11 18:33:25 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.28.3

=== release 1.28.3 ===

2026-05-11 18:28:12 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-editing-services.doap:
	* meson.build:
	  Release 1.28.3

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/11563>

2026-04-16 16:13:56 +0000  Thibault Saunier <tsaunier@igalia.com>

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

2026-03-23 10:16:12 -0300  Thibault Saunier <tsaunier@igalia.com>

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

2025-11-21 10:59:39 -0300  Thibault Saunier <tsaunier@igalia.com>

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

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

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

2026-02-08 13:37:10 +0000  Thibault Saunier <tsaunier@igalia.com>

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

2026-02-08 13:37:03 +0000  Thibault Saunier <tsaunier@igalia.com>

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

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

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

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

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

2026-02-06 17:10:51 +0000  Thibault Saunier <tsaunier@igalia.com>

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

2026-02-06 17:10:46 +0000  Thibault Saunier <tsaunier@igalia.com>

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

2026-02-06 17:10:39 +0000  Thibault Saunier <tsaunier@igalia.com>

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

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

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

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

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

2026-04-07 20:07:19 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.28.2

=== release 1.28.2 ===

2026-04-07 20:02:23 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-editing-services.doap:
	* meson.build:
	  Release 1.28.2

2026-03-30 16:40:02 +0300  Sebastian Dröge <sebastian@centricular.com>

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

2026-03-18 10:04:29 +0100  Xabier Rodriguez Calvar <calvaris@igalia.com>

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

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

	* meson.build:
	  Back to development after 1.28.1

=== release 1.28.1 ===

2026-02-26 01:44:06 +0000  Tim-Philipp Müller <tim@centricular.com>

	* gst-editing-services.doap:
	* meson.build:
	  Release 1.28.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/10822>

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

	* RELEASE:
	  modules: remove RELEASE from git, will be generated from template on dist
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10822>

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/10822>

2026-01-27 18:25:19 +0100  Piotr Brzeziński <piotr@centricular.com>

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

2026-01-27 17:10:54 +0000  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.28.0

=== release 1.28.0 ===

2026-01-27 17:02:33 +0000  Tim-Philipp Müller <tim@centricular.com>

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

2026-01-19 16:46:51 -0300  Thibault Saunier <tsaunier@igalia.com>

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

2025-12-05 11:28:28 -0300  Thibault Saunier <tsaunier@igalia.com>

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

2025-11-27 09:39:47 -0300  Thibault Saunier <tsaunier@igalia.com>

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

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

	* meson.build:
	  Back to development after 1.27.90

=== 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 ===

