=== release 1.28.7 ===

2026-09-07 20:11:13 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-plugins-base.doap:
	* meson.build:
	  Release 1.28.7

2026-09-01 10:36:31 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
	  rtpbasedepayload: Don't assert if previous buffer's delayed header extensions are still queued
	  This can happen on packet loss and various other scenarios and subclasses can't
	  always flush them themselves as it also depends on internal base class state.
	  Instead of asserting, simply log this case and flush all header extensions when
	  a new buffer is received.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5057
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12444>

2026-09-07 20:50:00 +0530  Sanchayan Maity <sanchayan@centricular.com>

	* tests/check/gst/typefindfunctions.c:
	  Revert "tests: typefindfunctions: Add test for type finding with caps"
	  This reverts commit 300e7801765d8f09ad9bb2334420961de260c2cf.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12443>

2026-09-02 16:14:23 +1000  Matthew Waters <matthew@centricular.com>

	* gst-libs/gst/rtsp/gstrtspmessage.c:
	  rtsp/message: fix crash when an auth value started with whitespace
	  When parsing a field like 'key= ",foo=bar' the space after the '=' would be
	  considered the end of the key value pair.
	  The '=' would be found and the key (before the '=') extracted. Then the value
	  parsing would skip any initial whitespace. advancing beyond the ' '. The value
	  would then be g_strndup(value, end - value). As `end < value`, This attempts to
	  copy -1 bytes and fail.
	  Fix by using the end of the item after skipping over any whitespace.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5278
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12431>

2026-08-16 13:46:20 +0100  Colin Kinloch <colin.kinloch@collabora.com>

	* gst-libs/gst/video/video-format.c:
	  video-format: Fix annotation on component function
	  This caused PyGObject to generate bindings for the
	  `gst_video_format_info_component` function that returned a single int
	  and would SIGSEGV when called.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12425>

2026-07-18 09:08:32 +0200  Thomas Devoogdt <thomas@devoogdt.com>

	* gst-libs/gst/sdp/gstmikey.c:
	  mikey: split master key and salt in MIKEY message generation
	  gst_mikey_message_new_from_caps writes the whole key (master key and
	  session salt concatenated) into a single TEK field. RFC 3830 table 6.13.a
	  defines both TEK (2) and TEK+SALT (3); without the latter, the receiver
	  has no way to determine the key and salt lengths. I ran into this while
	  adding MIKEY support to FFmpeg, which required a workaround, see
	  https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23408.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12404>

2026-09-03 14:28:18 -0400  Thibault Saunier <tsaunier@igalia.com>

	* tests/validate/audiotestsrc/reverse.validatetest:
	* tests/validate/compositor/renogotiate_failing_unsupported_src_format.validatetest:
	* tests/validate/encodebin/set-encoder-properties.validatetest:
	* tests/validate/fakevideodec/encoded.validatetest:
	* tests/validate/fakevideodec/simple.validatetest:
	* tests/validate/giosrc/read-growing-file.validatetest:
	* tests/validate/uridecodebin/expose_raw_pad_caps.validatetest:
	* tests/validate/videorate/10_to_1fps.validatetest:
	* tests/validate/videorate/change_rate_reverse_playback.validatetest:
	* tests/validate/videorate/change_rate_while_playing.validatetest:
	* tests/validate/videorate/drop_out_of_segment.validatetest:
	* tests/validate/videorate/duplicate_on_eos.validatetest:
	* tests/validate/videorate/duplicate_on_eos_disbaled.validatetest:
	* tests/validate/videorate/duplicate_on_eos_half_sec.validatetest:
	* tests/validate/videorate/fill_segment_after_caps_changed_before_eos.validatetest:
	* tests/validate/videorate/rate_2_0.validatetest:
	* tests/validate/videorate/reverse.10_to_30fps.validatetest:
	* tests/validate/videorate/reverse.30fps.validatetest:
	* tests/validate/videorate/reverse.variable_to_10fps.validatetest:
	* tests/validate/videorate/reverse_fast.variable_to_10fps.validatetest:
	* tests/validate/videorate/reverse_slow.variable_to_10fps.validatetest:
	  validate: Reindent all validatetest files
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12343>

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

	* tests/validate/audiotestsrc/reverse.validatetest:
	* tests/validate/fakevideodec/encoded.validatetest:
	* tests/validate/fakevideodec/simple.validatetest:
	* tests/validate/giosrc/read-growing-file.validatetest:
	* tests/validate/videorate/change_rate_reverse_playback.validatetest:
	* tests/validate/videorate/change_rate_while_playing.validatetest:
	* tests/validate/videorate/drop_out_of_segment.validatetest:
	* tests/validate/videorate/duplicate_on_eos.validatetest:
	* tests/validate/videorate/duplicate_on_eos_disbaled.validatetest:
	* tests/validate/videorate/duplicate_on_eos_half_sec.validatetest:
	* tests/validate/videorate/fill_segment_after_caps_changed_before_eos.validatetest:
	* tests/validate/videorate/reverse.variable_to_10fps.validatetest:
	* tests/validate/videorate/reverse_fast.variable_to_10fps.validatetest:
	* tests/validate/videorate/reverse_slow.variable_to_10fps.validatetest:
	  validateflow: auto-derive directories from test file path
	  Allow validateflow configs to be written as proper nested structures
	  instead of requiring the $(validateflow) variable expansion:
	  configs = {
	  [validateflow, pad=sink:sink, buffers-checksum=true],
	  }
	  instead of:
	  configs = {
	  "$(validateflow), pad=sink:sink, buffers-checksum=true",
	  }
	  When expectations-dir or actual-results-dir are not explicitly set,
	  validate_flow_override_new() now derives them from the __filename__
	  metadata field (already attached to each config structure by the
	  parser). This mirrors the path computation done in
	  gst_validate_structure_set_variables_from_struct_file().
	  The $(validateflow) variable and the old string syntax remain fully
	  supported for backward compatibility.
	  Port all existing .validatetest files to the new syntax.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12343>

2026-08-20 12:17:55 -0400  Thibault Saunier <tsaunier@igalia.com>

	* gst/videoconvertscale/gstvideoconvertscale.c:
	  videoconvertscale: keep input colorimetry in scale-only elements
	  videoscale does not put a colorimetry field in its output caps, so
	  gst_video_info_from_caps() derives one from the frame height: BT709 above
	  576 lines, BT601 below. Scaling across that boundary makes the input and
	  output infos disagree, which disqualifies the video converter fast paths
	  and makes videoscale apply a BT709 to BT601 matrix that was never
	  requested.
	  Take the input colorimetry when the subclass cannot convert and the output
	  caps do not ask for a specific one, so an explicit downstream request still
	  wins.
	  Scaling 1000x600 to 320x240 I420 drops from 9.3 to 1.4 G instructions.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4425
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12378>

2026-08-24 14:05:40 +0900  Seungha Yang <seungha@centricular.com>

	* gst-libs/gst/video/video-converter.c:
	* tests/check/libs/video.c:
	  video-converter: Fix GRAY output border color
	  Border color for grayscale formats should be computed like YUV
	  and use the Y component
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12374>

2026-08-20 13:06:39 +0900  Seungha Yang <seungha@centricular.com>

	* gst-libs/gst/video/video-blend.c:
	* gst-libs/gst/video/video-overlay-composition.c:
	  overlay-composition: Don't try to scale high bitdepth rectangles
	  gst_video_blend_scale_linear_RGBA() can scale only 8-bit formats
	  correctly. Skip blending the rectangle if scaling fails
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12330>

2026-08-11 15:47:07 +1000  Matthew Waters <matthew@centricular.com>

	* gst-libs/gst/gl/gstglcolorconvert.c:
	  glcolorconvert: don't rely on integer modulus '%'
	  GLSL does not support it until GLSL 1.30 which is only available with GL 3.0.
	  GL 2.1 systems instead have to use floating point mod() so convert everything
	  needing integer modulus to float and back.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12286>

2026-08-11 22:39:39 +1000  Jan Schmidt <jan@centricular.com>

	* gst-libs/gst/app/gstappsrc.c:
	* tests/check/elements/appsrc.c:
	  appsrc: Don't push EOS directly in event handler
	  The change in
	  https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11924
	  inadvertently dropped through and sent EOS events directly through
	  the default basesrc handler after the custom handling, instead of
	  letting the appsrc EOS machinery handle everything - leading to
	  unexpected extra (even endless) blocking waiting for some applications
	  that were pushing events to a blocked pipeline.
	  Add a unit test which reliably fails before, and succeeds with this
	  patch.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12283>

2026-08-05 19:21:52 +0900  Seungha Yang <seungha@centricular.com>

	* gst-libs/gst/video/gstvideometa.c:
	* gst-libs/gst/video/gstvideotimecode.c:
	  videotimecode: Fix documentation bug and update annotations
	  The implementation does not take ownership of latest_daily_jam,
	  and it is already annotated accordingly.
	  And add missing (allow-none) annotation to other methods for
	  consistency with gst_video_time_code_new()
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12255>

2026-08-05 13:04:46 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	  Back to development after 1.28.6

=== release 1.28.6 ===

2026-08-05 12:59:39 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-plugins-base.doap:
	* meson.build:
	  Release 1.28.6

2026-07-18 16:19:17 +0200  Tim-Philipp Müller <tim@centricular.com>

	* ext/pango/gstbasetextoverlay.h:
	* ext/pango/gsttextrender.h:
	  pango: remove incorrect G_GNUC_CONST annotation for get_type() functions
	  G_GNUC_CONST must only be used for functions that don't modify global state.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157>

2026-07-18 16:16:11 +0200  Tim-Philipp Müller <tim@centricular.com>

	* gst-libs/gst/video/video-format.h:
	  video: remove incorrect G_GNUC_CONST annotation for gst_video_format_from_string()
	  If the string pointer passed contains a dynamic allocation, it's entirely
	  possible that the same pointer value maps to different string values, e.g.
	  because it's re-used across free/malloc or changed between invocations of
	  the function.
	  From https://gcc.gnu.org/onlinedocs/gcc-16.1.0/gcc/Common-Attributes.html#index-const:
	  > Note that a function that has pointer arguments and examines the data
	  > pointed to must not be declared const if the pointed-to data might
	  > change between successive invocations of the function. In general,
	  > since a function cannot distinguish data that might change from data
	  > that cannot, const functions should never take pointer or, in C++,
	  > reference arguments. Likewise, a function that calls a non-const
	  > function usually must not be const itself.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157>

2026-07-18 16:06:17 +0200  Tim-Philipp Müller <tim@centricular.com>

	* gst-libs/gst/audio/audio-format.h:
	  audio: remove incorrect G_GNUC_CONST annotation for gst_audio_format_from_string()
	  If the string pointer passed contains a dynamic allocation, it's entirely
	  possible that the same pointer value maps to different string values, e.g.
	  because it's re-used across free/malloc or changed between invocations of
	  the function.
	  From https://gcc.gnu.org/onlinedocs/gcc-16.1.0/gcc/Common-Attributes.html#index-const:
	  > Note that a function that has pointer arguments and examines the data
	  > pointed to must not be declared const if the pointed-to data might
	  > change between successive invocations of the function. In general,
	  > since a function cannot distinguish data that might change from data
	  > that cannot, const functions should never take pointer or, in C++,
	  > reference arguments. Likewise, a function that calls a non-const
	  > function usually must not be const itself.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12157>

2026-01-24 13:16:22 +0000  Charles <charles05@canonical.com>

	* gst/playback/gstplaysink.c:
	  playsink: don't wait for text pad block during reconfiguration
	  When subtitles are re-enabled after being disabled (e.g., cycling through
	  subtitle tracks to "off" then back to track 1), video and audio playback
	  stalls indefinitely. This occurs because reconfiguration waits for a text
	  pad blocking probe that can never fire.
	  When gst_play_sink_request_pad creates a text pad it:
	  1. Creates a ghost pad with no target (gst_ghost_pad_new_no_target)
	  2. Installs a blocking probe on the internal proxy pad
	  3. Sets PENDING_FLAG for the pad type
	  The PENDING flag causes gst_play_sink_ready_to_reconfigure_locked to wait for
	  the blocking probe to fire before allowing reconfiguration to proceed.
	  However, the ghost pad target is only set later in gst_play_sink_do_reconfigure
	  when the text rendering chain is built and linked to the stream
	  synchronizer. Without a target, anything pushed to the ghost pad returns
	  NOT_LINKED immediately... The data never reach the internal proxy pad
	  where the blocking probe is installed.
	  This appears to creates a circular dependency:
	  - Reconfiguration waits for text blocking probe to fire
	  - Blocking probe needs data to reach internal proxy pad
	  - Data can't reach proxy pad without a ghost pad target
	  - Target is only set during reconfiguration
	  Initially, I attempted to fix the root cause by creating the stream synchronizer
	  pads early (in request_pad rather than do_reconfigure), so the ghost pad would
	  have a valid target from the start. However, this doesn't resolve the deadlock.
	  The deeper issue appears that when text is reenabled via playbin3's
	  reconfigure_output, the playsink text pad is created, but the upstream source
	  pad from uridecodebin may not be linked to it. The linking happens in
	  combiner_control_pad (called from pad_added_cb), but pad_added_cb is only
	  triggered when uridecodebin adds a *new* pad, not when an existing stream is
	  re-selected.
	  Without upstream linkage, no data flows to the text pad regardless of whether
	  the ghost pad has a target. The blocking probe cannot fire, and with
	  PENDING_TEXT set the reconfiguration just waits forever
	  This commit simply doesn't set PENDING_FLAG for GST_PLAY_SINK_TYPE_TEXT pads in
	  either gst_play_sink_request_pad or gst_play_sink_refresh_pad.
	  The blocking probe is still installed, so any text data arriving during
	  reconfiguration is properly held back, reconfiguration no longer waits for it to
	  fire. This looks safe because gst_play_sink_do_reconfigure only requires
	  playsink->text_pad to exist (not to be blocked) in order to set up the text
	  rendering chain.
	  This approach looks OK to me because:
	  - Video/audio have continuous data flow, so their probes fire quickly
	  - Text/subtitles are inherently sparse and may not have data available
	  - Text is secondary to A/V; its absence shouldn't block reconfiguration
	  - The text chain is properly set up during do_reconfigure regardless
	  Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4744
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12178>

2026-01-25 23:53:43 +0000  Charles <charles05@canonical.com>

	* gst/playback/gstplaysink.c:
	  playsink: Fix logging logic
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12178>

2026-01-25 23:53:17 +0000  Charles <charles05@canonical.com>

	* gst/playback/gstplaysink.c:
	  playsink: Fix typo
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12178>

2026-07-21 15:35:44 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* meson.build:
	  meson: Make the g-ir-scanner init section consistent across modules
	  We weren't disabling the registry correctly due to typos and missing
	  env vars.
	  This speeds up introspection builds considerably on Windows.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12163>

2026-02-13 02:58:40 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* gst-libs/gst/gl/eagl/gstglwindow_eagl.m:
	  gl/eagl: Fix GstGLUIView leak from duplicate __bridge_retained
	  _create_gl_window() called __bridge_retained twice on the same view,
	  storing to priv->internal_view both times. Each __bridge_retained
	  increments the ObjC retain count, but the first retained reference was
	  immediately overwritten by the second. Since gst_gl_window_eagl_finalize
	  only calls CFRelease once, the GstGLUIView (and its CAEAGLLayer) leaked
	  with an extra +1 retain count.
	  Remove the first redundant __bridge_retained. The local ARC variable
	  keeps the view alive until after addSubview: and the second
	  __bridge_retained.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12118>

2026-07-10 14:41:49 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/typefind/gsttypefindfunctions.c:
	  typefind: Fix C nonsense in ipmovie typefinder
	  memcmp() returns 0 on equality, not a non-zero value. The typefinder was
	  triggering on everything that is *not* an ipmovie file.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12098>

2026-07-09 15:50:31 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/typefind/gsttypefindfunctionsplugin.c:
	  typefind: Actually register various forgotten typefinders
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12098>

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

	* meson.build:
	  Back to development after 1.28.5

=== release 1.28.5 ===

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

	* gst-plugins-base.doap:
	* meson.build:
	  Release 1.28.5

2026-06-16 14:10:00 -0300  L. E. Segovia <amy@centricular.com>

	* meson.build:
	  audio-resampler: Declare that NEON support also requires Thumb
	  GCC from Yocto for Beaglebone Black doesn't enable it, so it causes a
	  build time error since !5075. All other versions that I know of
	  (Godbolt, Alpine, Ubuntu) have Thumb mode enabled by default.
	  Fixes #5164
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11971>

2026-06-22 11:54:41 +0300  Arthur Chan <arthur.chan@adalogics.com>

	* gst-libs/gst/pbutils/encoding-target.c:
	  encoding-target: Validate that encoding profile name is UTF-8 before using it
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5131
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12068>

2026-06-19 13:48:16 +0300  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusdec.c:
	  opusdec: Don't use any channel positions for >64 channels
	  We don't support this.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5122
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12067>

2026-07-06 11:52:50 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/rtp/gstrtcpbuffer.c:
	* tests/check/libs/rtp.c:
	  rtcpbuffer: Make sure to check for enough available space when adding SDES items
	  Also don't use the wrong offset if this is not actually the first packet in a
	  compound RTCP packet.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12033>

2026-07-04 15:37:58 -0500  Gordon Smith <gsmith@route8.io>

	* gst-libs/gst/rtp/gstrtcpbuffer.c:
	* tests/check/libs/rtp.c:
	  rtcpbuffer: Fix parsing of SR+SDES compound packet
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12033>

2026-07-02 18:00:06 +0530  Sanchayan Maity <sanchayan@centricular.com>

	* tests/check/gst/typefindfunctions.c:
	  tests: typefindfunctions: Add test for type finding with caps
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12020>

2026-06-08 16:50:09 +0900  Qi Hou <qi.hou@nxp.com>

	* ext/gl/gstgldownloadelement.c:
	  gldownload: fix wrong DRM format negotiation causing R/B channel swap
	  The _convert_dma_drm() function in gldownloadelement uses
	  gst_gl_dma_buf_transform_gst_formats_to_drm_formats() to convert
	  GstVideo formats to DRM formats for downstream caps negotiation.
	  It was incorrectly using GST_GL_DRM_FORMAT_DIRECT_IMPORT, which is
	  designed for the upload (import) direction. With this flag, the
	  function bypasses the standard format mapping table and instead
	  queries the EGL driver for all supported DRM formats. This causes
	  gldownload to advertise formats like DRM_FORMAT_ARGB8888 (BA24)
	  alongside DRM_FORMAT_ABGR8888 (AB24).
	  Since GL internally works with RGBA byte order (R,G,B,A in memory),
	  the only correct DRM fourcc is ABGR8888 (AB24). When a downstream
	  element such as waylandsink picks ARGB8888 (BA24) instead, the R and
	  B channels are swapped, resulting in wrong purple/pink color.
	  Fix this by using GST_GL_DRM_FORMAT_INCLUDE_EMULATED, which goes
	  through the standard GstVideo-to-DRM mapping table where RGBA is
	  correctly mapped to DRM_FORMAT_ABGR8888 only.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11997>

2026-03-30 10:22:51 -0300  L. E. Segovia <amy@centricular.com>

	* gst/typefind/gsttypefindfunctions.c:
	  typefind: fix caps leaks
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11972>

2026-03-27 18:55:14 -0300  L. E. Segovia <amy@centricular.com>

	* gst/typefind/gsttypefindfunctions.c:
	  typefind: fix incorrect parsing of WBMP multibyte integers
	  Fixes #5001
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11972>

2026-03-27 17:34:17 -0300  L. E. Segovia <amy@centricular.com>

	* gst/typefind/gsttypefindfunctionsplugin.h:
	* gst/typefind/gsttypefindfunctionsstartwith.c:
	  typefind: add X Bitmap support
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11972>

2026-03-27 17:32:48 -0300  L. E. Segovia <amy@centricular.com>

	* gst/typefind/gsttypefindfunctions.c:
	* gst/typefind/gsttypefindfunctionsstartwith.c:
	  typefind: add animated PNG detection
	  See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/4986
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11972>

2026-06-25 18:06:39 +0200  Marcus Hanestad <marlhan@proton.me>

	* gst/playback/gsturidecodebin3.c:
	  uridecodebin3: deactivate input_item in erroneous ready->paused transition
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11952>

2026-06-24 09:51:57 +0100  Philippe Normand <philn@igalia.com>

	* gst-libs/gst/app/gstappsink.c:
	  appsink: Clear local sample storage when flushing
	  Since commit d00e0b61 appsink keeps a local reference of the current sample in
	  order to reduce allocations. However not clearing its contents upon flush events
	  would prevent associated buffers from being cleared from their pool.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11947>

2026-06-15 09:54:15 +1000  Jan Schmidt <jan@centricular.com>

	* gst-libs/gst/app/gstappsrc.c:
	  appsrc: Uniformly handle EOS events being pushed
	  Treat an EOS event being sent to appsrc via gst_element_send_event()
	  the same as if the gst_app_src_end_of_stream() method / signal were used,
	  otherwise pipelines can get stuck with the appsrc pushing thread
	  having shut down, but the gst_app_src_push_*() methods not
	  returning GST_FLOW_EOS to inform the caller. The appsrc
	  ends up still accepting / queueing data it won't send.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11925>

2026-06-22 12:44:39 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstxmptag.c:
	  xmptag: Handle fractions with 0 denominator as invalid
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11922>

2026-03-30 09:44:27 -0300  L. E. Segovia <amy@centricular.com>

	* gst-libs/gst/pbutils/descriptions.c:
	* tests/check/libs/pbutils.c:
	  gdkpixbufdec: remove Sun and Andrew raster formats
	  They were both removed in 2.32.1:
	  https://github.com/GNOME/gdk-pixbuf/commit/af2fca9bba5c127ca092c3a4bf7656015d6168ad
	  Moreover, the Andrew raster format (image/x-cmu-raster) doesn't match at
	  all the Sun raster format, the former is similar to LaTeX while the
	  latter is binary.
	  As a double safety measure, let's bump the minimum gdk-pixbuf version as
	  2.32.1 was released in 2015 [1] while 2.8.0 is from 2005 [2].
	  Fixes #5004
	  [1]: https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/tags/2.32.0
	  [2]: https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/tags/GTK_2_8_0
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11901>

2026-06-14 21:13:47 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/gstsubparse.c:
	  subparse: Don't allow very small framerates for microdvd subtitles
	  Very small framerates close to 0.0 would become 0/1 and still lead to a division
	  by zero. Use 1/1000 as minimum and 1000/1 as maximum framerates for subtitles.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11852>

2026-06-14 21:47:25 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstxmptag.c:
	  xmptag: Don't allocate -1 bytes of memory if there's only a single tag
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11853>

2026-06-15 12:38:31 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstvorbistag.c:
	  vorbistag: Check for enough base64 data before trying to decode
	  g_base64_decode_inplace() asserts if fewer than 2 bytes are available.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11856>

2026-06-15 12:36:33 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstvorbistag.c:
	  vorbistag: Use gsize for lengths and avoid overflows
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11856>

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-plugins-base.doap:
	* meson.build:
	  Release 1.28.4

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

	* ext/alsa/gstalsasrc.c:
	  Revert "alsa: fix deadlock during shutdown"
	  This reverts commit dd1fbc9160e5368119544394be2c16c9e57d9a22.
	  https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11690#note_3516817

2026-06-12 12:20:36 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/pbutils/gstdiscoverer.c:
	  discoverer: Lock the DISCO_LOCK whenever accessing the streams list
	  The list is accessed from multiple threads, possibly at the same time.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11840>

2026-06-04 12:39:38 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/gstsubparse.c:
	  subparse: Avoid zero and extreme fps when parsing mdvdsub subtitles
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5068
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11810>

2026-06-04 12:16:07 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/id3v2.c:
	* gst-libs/gst/tag/id3v2.h:
	* gst-libs/gst/tag/id3v2frames.c:
	  id3v2: Improve const-correctness and use correct size type
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11808>

2026-06-04 12:16:03 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/id3v2frames.c:
	  id3v2: Check for enough data when reading RVA2 tags
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5067
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11808>

2026-06-04 12:15:58 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/id3v2.c:
	  id3v2: Don't modify const data
	  Also actually store caps for custom ID3v2 frames in the sample.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5045
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11808>

2026-06-04 12:04:58 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstxmptag.c:
	  xmptag: Make sure to keep the temporary array always NUL-terminated during parsing
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5066
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11806>

2026-06-04 12:04:54 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstxmptag.c:
	  xmptag: Correctly initialize pointer to the end of the input array
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5066
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11806>

2026-06-04 12:04:44 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstxmptag.c:
	  xmptag: Improve const-correctness in parser
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11806>

2026-06-02 17:52:06 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/rtp/gstrtcpbuffer.c:
	* tests/check/libs/rtp.c:
	  rtcpbuffer: Add some missing bounds checks when parsing SDES
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5047
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11796>

2026-06-02 17:51:53 +0300  Sebastian Dröge <sebastian@centricular.com>

	* tests/check/libs/rtp.c:
	  rtp: Fix various bool assertions in test
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11796>

2026-06-02 15:06:45 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>

	* gst-libs/gst/audio/gstaudioaggregator.c:
	* tests/check/elements/audiomixer.c:
	  audioaggregator: Remove brittle conversion of in-progress buffers
	  The sinkpad converters cannot be used to re-convert the internal buffers
	  because the `converter-config` could be invalid for this conversion. For
	  example, a conflicting `mix-matrix` will cause the conversion to fail.
	  In case of the converted input buffers, just remove them. On aggregate
	  we will re-convert and re-align the same input buffer.
	  In case of the partially-written output buffer, we cannot convert them
	  without potentially causing data loss or glitches. Since ad-hoc
	  conversion is brittle, just drop the converted output buffer.
	  A more elaborate implementation could keep already-mixed input buffers
	  around in case we need to recreate the entire output buffer. However,
	  that is not the aim of this commit.
	  Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11775>

2026-06-03 11:09:15 +0200  Dino Spiller <dinos@axis.com>

	* gst-libs/gst/audio/audio-resampler-neon.h:
	  audio-resampler-neon: re-increment address
	  The original code contained an increment on the "a" and "b" variables
	  that has been removed by last patch, resulting in several artifacts in
	  the sound. Restored the increment, to get back to the correct behavior.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11760>

2026-06-02 17:07:49 +0100  Arthur Chan <arthur.chan@adalogics.com>

	* gst-libs/gst/pbutils/encoding-profile.c:
	  pbutils: Add NULL check for tmpcaps parsing
	  Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11746>

2026-06-02 17:02:00 +0100  Arthur Chan <arthur.chan@adalogics.com>

	* gst-libs/gst/pbutils/encoding-profile.c:
	  pbutils: Fix possible null dereferene when empty string is provided
	  Signed-off-by: Arthur Chan <arthur.chan@adalogics.com>
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11747>

2026-05-21 00:50:55 +0530  Taruntej Kanakamalla <tarun@centricular.com>

	* gst-libs/gst/sdp/gstsdpmessage.c:
	* tests/check/libs/sdp.c:
	  sdp: keep level-asymmetry-allowed in the caps
	  Looking at the caps generated from SDP, without the `level-asymmetry-allowed`` field,
	  there is no way to tell if its value is 1 or not set (i.e 0) by the remote
	  peer.
	  So retain the `level-asymmetry-allowed` field in the caps so that, it can be used
	  along with the `profile-level-id` to determine the compatible `level` values
	  during the negotiation
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11727>

2026-05-24 00:53:49 +0200  Robert Mader <robert.mader@collabora.com>

	* gst-libs/gst/gl/egl/gstglmemoryegl.c:
	  gl: egl: Set TRANSFER_NEED_DOWNLOAD flag
	  Bringing _gl_mem_egl_alloc() in line with _gl_mem_pbo_alloc() and
	  ensuring glReadPixels() is used when downloading imported dmabufs.
	  Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/4965
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11710>

2026-05-21 15:38:50 +0200  Dino Spiller <dinos@axis.com>

	* gst-libs/gst/audio/audio-resampler-neon.h:
	  audio-resampler-neon: fix accumulated stride
	  The stride is accumulated, resulting in unintended excessive shift.
	  Modified by saving the base address to the register and successively
	  adding the strides.
	  Fixed also a missing load that was present in previous code.
	  Change-Id: Icedd56397c745b1c7603edc45a825b6a78b16b11
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11703>

2025-11-18 14:06:15 +0100  Albert Sjölund <alberts@axis.com>

	* ext/alsa/gstalsasrc.c:
	  alsa: fix deadlock during shutdown
	  Previously, due to being blocking and having no mechanism for graceful
	  shutdown, it would hang if there is no data available. Instead,
	  implement a similar mechanism as in alsasink to handle this, by using
	  snd_pcm_wait and yield.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11690>

2026-05-22 20:34:26 +0200  Robert Mader <robert.mader@collabora.com>

	* gst-libs/gst/video/gstvideodmabufpool.c:
	  videodmabufpool: Fix debug category
	  Without this define the default category is used, i.e.
	  GST_DEBUG=video-dmabuf-pool:5 doesn't work.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11677>

2026-05-15 10:46:15 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/id3v2.c:
	  id3v2: Don't unnecessarily assert on size==0 when unsyncing data
	  Simply return NULL and let the callers handle it, which all handle this
	  correctly already.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11641>

2026-05-14 15:42:21 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>

	* gst-libs/gst/gl/gstglupload.c:
	  glupload: fix memleak on failure path
	  In function _udmabuf_upload_transform_caps(), the capsfeature variable
	  `passthrough` was leaked if `intersected_caps` and empty, when pad direction is
	  not GST_PAD_SINK.
	  The simplest approach would be just add `gst_caps_features_free()` before the
	  `goto out`, but it looks better to refactor a little bit the function, so two
	  common variables to both blocks of the main `if`, would have a single point of
	  deallocation.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11640>

2026-05-14 16:41:42 +0200  Edward Hervey <edward@centricular.com>

	* gst/playback/gsturidecodebin3.c:
	  uridecodebin3: Use PLAY_ITEMS_LOCK for URI-related getter
	  The setter is using that lock.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11633>

2026-05-11 10:59:08 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/playback/gsturidecodebin.c:
	  uridecodebin: Protect missing_plugin_errors list from concurrent access
	  Otherwise this can lead to memory corruption or leaks.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11615>

2026-05-08 12:44:20 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/gl/gstglwindow.c:
	  glwindow: Allow setting a NULL window handle
	  Otherwise it's not possible to go back into the original state and a dangling
	  window handle might still be used by the window.
	  All our Android tutorials, for example, are setting the handle back to NULL when
	  the surface disappears and backends also seem to already handle this just fine.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11611>

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-plugins-base.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-22 15:12:04 -0400  Dominique Leroux <dominique.p.leroux@gmail.com>

	* gst-libs/gst/gl/gstglcolorconvert.c:
	* gst-libs/gst/gl/gstglformat.c:
	  gl: add GBRA swizzle support
	  Handle GBRA in the GL video format swizzle table, and use the same GBR
	  component reorder for input and output planar RGB conversions.  This lets
	  GBRA follow the existing planar RGB reorder path instead of reaching the
	  unhandled swizzle case.
	  Fixes #5060
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11422>

2026-04-22 15:10:55 -0400  Dominique Leroux <dominique.p.leroux@gmail.com>

	* tests/check/libs/gstglcolorconvert.c:
	  gl/tests: make colorconvert meta test robust
	  Check that textoverlay is available before constructing the meta test
	  pipeline, and report parser errors from gst_parse_launch() directly.  This
	  keeps the test from continuing with a partial pipeline in environments where
	  textoverlay is not visible to the Meson test sandbox.
	  Use a bounded preroll wait so failures in the helper pipeline cannot hang the
	  whole gstglcolorconvert test binary.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11422>

2026-04-22 15:08:21 -0400  Dominique Leroux <dominique.p.leroux@gmail.com>

	* tests/check/libs/gstglcolorconvert.c:
	  gl/tests: cover planar RGB reorder conversion
	  Add focused coverage for conversions between packed RGBA and planar RGB
	  formats in gstglcolorconvert.  The test keeps planar GL inputs as one
	  GstGLMemory per texture plane, because mapping the input buffer as a
	  GstVideoFrame before conversion can collapse or otherwise alter the memory
	  layout that the converter is meant to consume.
	  The failure messages include the input format, output format, plane,
	  offset, and byte values so component-swizzle mistakes are directly
	  visible from the test log.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11422>

2026-04-23 11:12:28 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>

	* gst-libs/gst/video/video-info-dma.c:
	  libs: video: add precondition check on dma helpers
	  For not invalid fourcc and modifiers. Also, check caps object type.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11451>

2026-05-05 10:34:45 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/pbutils/gstdiscoverer.c:
	  discoverer: Take the DISCO_LOCK while parsing stream topology
	  pad-added/removed on uridecodebin can modify the structures this is iterating
	  over, which can then lead to a use-after-free if timing is very bad.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11539>

2026-04-30 23:31:12 -0300  L. E. Segovia <amy@centricular.com>

	* gst-libs/gst/audio/audio-resampler-neon.h:
	  audio-resampler-neon: fix Thumb encoding and use Clang O2 calculation for strides
	  Fixes #5075
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11491>

2026-05-03 10:43:43 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudioaggregator.c:
	  audioaggregator: Don't reset samples_per_buffer when updating latency
	  There's no relation at all between these two values. Instead only reset it
	  when the output buffer duration property changes.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11487>

2026-05-03 10:41:34 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudioaggregator.c:
	  audioaggregator: Don't reset samples_per_buffer unless sample rate has changed
	  The value only depends on the output-buffer-duration property and the sample
	  rate, so resetting it is unnecessary unless the rate changes.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11487>

2026-05-02 18:12:59 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudioaggregator.c:
	  audioaggregator: Don't drop pending input buffers on sinkpads on srcpad caps changes
	  If there is no conversion support on the sinkpads then the subclass must be able
	  to handle the buffer independent of the srcpad caps, so dropping it is
	  unnecessary.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11483>

2026-05-01 20:31:52 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudioaggregator.c:
	  audioaggregator: Don't try converting buffers on caps changes if impossible
	  If there is no conversion function then the best we can do is to just not
	  convert and drop the buffers, and then continue processing from the next
	  buffers.
	  Anything else will cause assertions.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11479>

2026-04-30 17:39:00 +0200  Mathieu Duponchelle <mathieu@centricular.com>

	* gst/playback/gstdecodebin2.c:
	  decodebin2: fix leak of endpads list on shutdown while exposing
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11470>

2026-04-21 12:07:20 +0200  Santiago Carot-Nemesio <sancane@gmail.com>

	* gst/audioresample/gstaudioresample.c:
	* tests/check/elements/audioresample.c:
	  audioresample: Fix extra samples produced at speech-to-silence transitions
	  When audiorate fills a PTS gap with GAP-flagged silence buffers and
	  these reach audioresample, the element calls push_drain() to flush
	  the FIR filter tail during the transition from non-gap to gap samples.
	  This pushes an extra buffer downstream (bypassing BaseTransform)
	  containing the filter's residual output — roughly 128 samples at 16 kHz
	  per transition.
	  Since the incoming data is silence (GAP), the filter tail is also
	  silence, so these extra samples are audibly meaningless but they break
	  sample-count accounting in downstream elements that rely on exact
	  timestamp/duration correspondence.
	  Fix this by replacing push_drain() with dump_drain() in the GAP path.
	  dump_drain() feeds the same zeros into the filter to stabilize it, but
	  discards the output instead of pushing it downstream.
	  Includes a test that feeds audiorate ! audioresample with a 140 ms
	  timestamp gap and verifies that exactly 6 output buffers are produced
	  (not 7), with correct PTS, duration, and GAP flags.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11439>

2026-04-22 16:03:15 -0400  Xavier Claessens <xclaessens@netflix.com>

	* gst-libs/gst/app/gstappsink.c:
	* gst-libs/gst/app/gstappsrc.c:
	  appsink: Allow passing NULL callbacks
	  Otherwise there is no way to stop receiving those
	  callbacks. Implementation already explicitly allows it.
	  gst_app_sink_set_simple_callbacks() already allows it too.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11431>

2026-04-22 16:02:10 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>

	* ext/gl/gstglimagesink.c:
	* gst-libs/gst/gl/gstglcolorconvert.c:
	  opengl: Fix glcolorconvert vertical flip issue on crop
	  The same crop vertices was applied to both glimageisnk and glcolorconvert
	  despite the image orientation being opposite. To avoid more errors in the
	  future, simply multiply the texture coordinate by their cropped size. This allow
	  having exactly the same code in both element.
	  Fixes #5061
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11413>

2026-04-20 09:23:31 +0200  Edward Hervey <edward@centricular.com>

	* gst-libs/gst/tag/id3v2.c:
	* gst-libs/gst/tag/id3v2.h:
	  id3v2: Check valid frame sizes more
	  An empty frame data size is invalid and should be ignored.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5049
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11380>

2026-04-13 20:23:23 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/samiparse.c:
	  samiparse: Error out if there's more than 64 levels of SAMI element nesting
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 20:08:21 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/samiparse.c:
	  samiparse: Skip lines with invalid element/tag names or attribute names
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 20:04:07 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/samiparse.c:
	  samiparse: Skip comment elements, DOCTYPE, [CDATA etc
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 19:50:25 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/samiparse.c:
	  samiparse: Truncate HTML context buffer when resetting the context too
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 19:31:20 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/samiparse.c:
	  samiparse: Improve const-correctness and don't modify const input string
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 19:25:13 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/gstsubparse.c:
	  subparse: Free error if stripping pango markup fails
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 19:23:04 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst/subparse/gstsubparse.c:
	  subparse: Use a GString to accumulate text results from GMarkupParser
	  Repeated g_strconcat() is unnecessarily inefficient.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11362>

2026-04-13 20:54:18 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/tag/gstexiftag.c:
	  exiftag: Use a hashtable instead of a linked list for storing the pending tags
	  This considerably speeds up parsing of huge exif chunks.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11364>

2026-04-16 15:38:40 +0100  Arthur Chan <arthur.chan@adalogics.com>

	* gst/subparse/qttextparse.c:
