=== release 1.28.8 ===

2026-10-08 17:20:32 +0200  Tim-Philipp Müller <tim@centricular.com>

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

2026-09-09 20:42:25 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudiometa.c:
	  audio: Replace O(n²) overlap check in audio meta code with O(n log n) code
	  At least when receiving audio meta from the network, an attacker might provide a
	  big serialized meta with a couple of tens of thousands of channels which would
	  take a moment to check with the previous code.
	  For some example measurements:
	  - 128kB payload, 16k channels: 24.8ms before, 0.24ms now
	  - 1MB payload, 128k channels: 1.6s before, 2.9ms now
	  - 2MB payload, 256k channels: 6.4s before, 5.7ms now
	  This and all other meta deserialize function are checking for enough data to be
	  available before allocating arrays so triggering OOM by sending a payload that
	  declares more channels/etc than available inside the payload is not possible.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12652>

2026-09-09 17:00:29 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudiometa.c:
	* gst-libs/gst/video/gstvideometa.c:
	* tests/check/libs/audio.c:
	* tests/check/libs/video.c:
	  audio: video: Validate audio/video meta deserialization
	  Accepting arbitrary values can lead to assertions or out-of-bounds reads/writes.
	  Also ensure enough payload data is available before allocating arrays or
	  otherwise e.g. a crafted channels value could lead to OOM.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/5257
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12652>

2026-09-24 11:58:40 +0100  Tim-Philipp Müller <tim@centricular.com>

	* gst-libs/gst/audio/audio-channels.c:
	  audio: limit gst_audio_channel_positions_to_valid_order() to 64 channels
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12657>

2024-12-05 17:24:36 +0100  Kushal Arora <kusarora@amazon.com>

	* gst-libs/gst/app/gstappsink.c:
	* tests/check/elements/appsink.c:
	  appsink: Reset EOS state on PAUSED → READY
	  After an appsink received an EOS event, cycling its state through
	  PLAYING → READY → PAUSED left gst_app_sink_is_eos() returning TRUE.
	  Reset the EOS flag when appsink transitions from PAUSED to READY.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12663>

2026-09-25 09:28:59 +0200  Robert Mader <robert.mader@collabora.com>

	* gst-libs/gst/allocators/gstudmabufallocator.c:
	  udmabuf: Open device with O_RDONLY instead O_RDWR
	  udmabuf - just like dma-heaps - only need read access.
	  See also:
	  https://gitlab.freedesktop.org/camera/libcamera/-/commit/168b00eb344221c0c1ab27e418d71febc92d3086
	  Fixes: afab800737f7 ("allocators: Add a udmabuf allocator")
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12567>

2026-09-22 19:54:34 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/sdp/gstsdpmessage.c:
	  sdpmessage: Avoid sign bit when hex-escaping chars
	  gchar is signed and `hex[c >> 4]` will give a negative number for negative
	  chars, indexing into the ro data segment before the array.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12532>

2026-08-03 11:32:52 -0400  Olivier Crête <olivier.crete@collabora.com>

	* gst/videoconvertscale/gstvideoconvertscale.c:
	* tests/check/elements/videoconvert.c:
	  videoconvertscale: Restore default config when clearing converter-config
	  Otherwise resetting the property does nothing
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12516>

2026-07-27 14:39:00 -0400  Olivier Crête <olivier.crete@collabora.com>

	* gst/videoconvertscale/gstvideoconvertscale.c:
	* tests/check/elements/videoconvert.c:
	  videoconvertscale: Take GstVideoMeta into account when converting
	  The the GstVideoInfo from the frame instead of from the caps, as this
	  one was initialized from the GstVideoMeta.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12516>

2026-09-21 12:12:07 +0300  Sebastian Dröge <sebastian@centricular.com>

	* tests/check/libs/audio.c:
	  audioconverter: Add tests for the NULL/silence handling issues
	  And also various tests for normal cases for completeness.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12517>

2026-09-21 12:10:24 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/audio-converter.c:
	  audioconverter: Call gst_audio_format_info_fill_silence() with number of bytes instead of samples
	  The function takes the numbers of bytes and we were passing the number of
	  samples in many places. This was keeping the remainder of the samples
	  uninitialized with >8bpp formats.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12517>

2026-09-21 12:03:43 +0300  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/audio-converter.c:
	  audioconverter: Guard against NULL input in do_unpack() too
	  NULL is accepted to request silence output so treat it as silence input instead
	  of dereferencing it and crashing.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12517>

2026-09-20 22:54:28 +0000  Bruno Fournier <xxtqqtx@gmail.com>

	* gst-libs/gst/audio/audio-converter.c:
	  audioconverter: guard against NULL input in do_convert_out
	  audio_chain_get_samples() returns NULL when an upstream chain link produced
	  no samples yet, which happens for a short initial input whose frame count is
	  below the resampler latency. The sibling functions do_quantize() and
	  converter_generic() already guard against this, but do_convert_out()
	  dereferenced in[i] unconditionally, causing a NULL pointer dereference when a
	  float-to-integer conversion is combined with a sample rate change.
	  Guard the conversion loop with the same "if (in && out)" check the other
	  chain functions use.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12517>

2026-09-15 17:50:56 -0300  L. E. Segovia <amy@centricular.com>

	* gst-libs/gst/audio/audio-resampler-neon.h:
	* meson.build:
	  audio-resampler-neon: handle Thumb1-only builds correctly
	  Fixes #5280
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/12501>

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

	* meson.build:
	  Back to development after 1.28.7

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