=== release 1.29.1 ===

2026-03-22 14:56:37 +0000  Tim-Philipp Müller <tim@centricular.com>

	* NEWS:
	* RELEASE:
	* gst-plugins-base.doap:
	* meson.build:
	  Release 1.29.1

2023-04-02 16:53:45 +0100  Tim-Philipp Müller <tim@centricular.com>

	* meson.build:
	* scripts/dist-common-files.py:
	  modules: dist common files from monorepo root
	  Less noise when making releases, and just need to maintain one copy.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11094>

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

	* README.md:
	  modules: remove subproject README.md from git
	  Will be added to the tarballs based on the monorepo README on dist.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11094>

2026-03-22 14:20:18 +0000  Tim-Philipp Müller <tim@centricular.com>

	* RELEASE:
	  modules: remove RELEASE from git, will be generated from template on dist

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

	* NEWS:
	  modules: Remove NEWS from git which is generated from full release notes
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11094>

2026-02-19 14:56:50 +0200  Marko Kohtala <marko.kohtala@gmail.com>

	* gst-libs/gst/rtsp/gstrtspurl.c:
	* tests/check/libs/rtsp.c:
	  rtsp: gstrtspurl: Parse URL having user without password
	  In RFC 1738 the password is optional, but it was required when @ was used
	  in the authority section. This failed to parse URL with only a username.
	  Fixes #4922
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10847>

2026-03-19 09:41:29 +0000  Wojciech Kapsa <wojciech.kapsa@medvc.eu>

	* gst/compositor/compositor.c:
	  compositor: move gst_compositor_init_blend() to element class_init
	  Commit e8e12db5f4 moved gst_compositor_init_blend() from plugin_init()
	  to gst_compositor_pad_class_init() so it would be called even without
	  plugin_init() (e.g. gstreamer-full static linking).
	  However, pad_class_init is only called when the first GstCompositorPad
	  is instantiated. When compositor runs with force-live=true and no sink
	  pads, no pad is ever created, so the global blend/fill function pointers
	  remain NULL, causing a segfault in _draw_background().
	  Move the call to gst_compositor_class_init() instead, which is always
	  called when a GstCompositor element is created, regardless of whether
	  any pads exist. This preserves the original intent of not depending on
	  plugin_init() while ensuring the blend functions are always initialized.
	  This is the same pattern applied by c0f9029a13 which moved
	  GST_DEBUG_CATEGORY_INIT from pad_class_init to compositor_class_init
	  for the same reason.
	  Fixes: e8e12db5f4 ("debug: Category init should happen in class_init when possible")
	  Reproducer:
	  gst-launch-1.0 compositor force-live=true background=black \
	  ! fakesink sync=true
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11078>

2026-03-18 23:42:56 +0100  Tim-Philipp Müller <tim@centricular.com>

	* po/LINGUAS:
	* po/kk.po:
	* po/pt_BR.po:
	* po/sv.po:
	* po/zh_CN.po:
	  gst-plugins-base: update translations
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11074>

2026-03-11 10:00:38 +0900  Shigeharu Kamiya <s_kamiya@toa.co.jp>

	* gst-libs/gst/rtsp/gstrtspconnection.c:
	* gst-libs/gst/rtsp/gstrtspconnection.h:
	* gst-libs/gst/rtsp/gstrtspdefs.h:
	  rtspsrc: add backchannel-http-method property for HTTP tunnel mode
	  Some ONVIF cameras reject backchannel RTP data sent base64-encoded via
	  the HTTP POST connection, expecting it as raw binary on the GET
	  connection instead. Add a backchannel-http-method property to select
	  which connection carries backchannel data (post or get), with automatic
	  fallback to the other method when the server closes the connection.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10999>

2026-03-11 13:49:27 -0300  L. E. Segovia <amy@centricular.com>

	* gst-libs/gst/gl/meson.build:
	  winrt: fix MSYS build by checking for XAML headers on egl and d3d11
	  MSYS2 has switched to a default WINVER corresponding to Windows 10. This
	  unintentionally kept WinRT working because the default WINVER made the
	  tests involving WINAPI_PARTITION_APP etc. fail early.
	  The headers involved in gluing D3D11 are not available on the MinGW CRT.
	  See https://github.com/msys2/MINGW-packages/commit/496bb7651c8168c5ad2f1ac1b88ef12c6633e395
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10989>

2026-02-23 11:34:23 -0500  Dominique Leroux <dominique.p.leroux@gmail.com>

	* gst-libs/gst/pbutils/codec-utils.c:
	* gst-libs/gst/pbutils/codec-utils.h:
	* tests/check/libs/pbutils.c:
	  pbutils: Add VPX caps helpers and tests
	  Add VPX caps helpers to set and parse normalized VP8/VP9
	  configuration fields.
	  The setter writes profile/level/bit depth/chroma fields for VPX caps,
	  accepts both video/x-vp8 and video/x-vp9, enforces VP8-specific
	  constraints, and avoids partial caps updates on validation failure.
	  The parser returns normalized VPX configuration from caps, including
	  optional colorimetry-derived fields used by vpcC-related paths.
	  Extend pbutils tests to cover validation behavior, VP8/VP9 constraints,
	  failure atomicity, and out-parameter unchanged-on-error semantics.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10875>

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

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

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

2026-03-13 12:19:45 +0100  Nicolas Dufresne <nicolas.dufresne@collabora.com>

	* gst-libs/gst/gl/gstglupload.c:
	  gl: upload: Fix linking glupload with restrictive caps filter
	  When a strict caps filter is used, the caps we are using may be
	  limited to DMABuf. Before we have a context, we don't know if the DMABuf formats
	  are supported or not, but we know that they will likely be supported as
	  GLMemory/RGBA with direct upload. Ensure this option is return, fixing the
	  linker issue.
	  Fixes #4622
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11029>

2026-03-13 12:17:29 +0100  Nicolas Dufresne <nicolas.dufresne@collabora.com>

	* gst-libs/gst/gl/gstglupload.c:
	  gl: upload: Optimize EGL format check when there is no context
	  Iterating over all the format is unnecessary without a context since all format
	  are going to be accepted anyway. Skip the check entire and accept the formats.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11029>

2026-03-15 11:37:21 +0000  Tim-Philipp Müller <tim@centricular.com>

	* gst-libs/gst/video/video-info.c:
	* tests/check/libs/video.c:
	  video: fix too small default stride for UYVP with odd widths
	  UYVP is packed 4:2:2 in units of two pixels. For odd widths we
	  need to allocate an extra macropixel of two pixels, even if we
	  only need one of those.
	  For a width of 321 it would allocate 804 bytes whereas we need 805.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11033>

2026-03-13 18:32:49 +0900  Seungha Yang <seungha@centricular.com>

	* gst/videorate/gstvideorate.c:
	* tests/check/elements/videorate.c:
	  videorate: Fix unrestored caps on backward PTS
	  When caps changes, videorate temporarily restores previous caps to
	  drain queued buffers and then switches back to the current caps.
	  But if the current buffer has backward PTS, above restoration step was
	  skipped, leaving the previous caps configured on the srcpad.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11020>

2026-03-12 08:59:41 +0000  Charles <charles05@canonical.com>

	* gst-libs/gst/video/video-converter.c:
	  video-converter: fix I420/A420/AYUV BGRA/ARGB output on big-endian
	  These conversion tasks contained a G_BYTE_ORDER guard that swapped the
	  choice between video_orc_convert_*_BGRA and video_orc_convert_*_ARGB on
	  big-endian platforms, corrupting I420/A420/AYUV -> RGBA/BGRA/ARGB
	  conversions. A black I420 frame came out as R=0 G=0 B=255 A=0 instead
	  of R=0 G=0 B=0 A=255 on s390x.
	  The ORC C fallback implementations use orc_union16/orc_union32 byte-array
	  fields (x2[], x4[]) which index bytes at fixed memory addresses regardless
	  of host endianness. The AltiVec SIMD backend similarly handles endianness
	  internally via different vperm constants for BE/LE. In both cases the same
	  function produces the same byte layout in memory on all platforms, making
	  the G_BYTE_ORDER guards incorrect.
	  Tested on s390x (big-endian): removing the guards fixes the corruption.
	  Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4960
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11013>

2020-07-03 12:06:14 +0200  Stéphane Cerveau <scerveau@collabora.com>

	* gst-libs/gst/video/gstvideodecoder.c:
	  videodecoder: Forward hdr-format info downstream
	  By default the hdr-format detected by a parser should be passed to the
	  downstream element.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9668>

2020-10-19 15:36:58 +0200  Stéphane Cerveau <scerveau@collabora.com>

	* gst-libs/gst/video/video-hdr.c:
	* gst-libs/gst/video/video-hdr.h:
	  video-hdr: introduce HDR10+ parser
	  Supports parsing HDR10+ data structure with application_version = 1
	  coming from a SEI message. The structure is described in CTA-861.4,
	  section "6 HDR Dynamic Metadata Type 0x0004".
	  Co-authored-by: Jakub Adam <jakub.adam@collabora.com>
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9668>

2025-09-09 15:43:08 +0200  Stéphane Cerveau <scerveau@collabora.com>

	* gst-libs/gst/video/video-hdr.c:
	* gst-libs/gst/video/video-hdr.h:
	  video-hdr: add HDR10+ structure
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9668>

2025-09-09 15:41:52 +0200  Stéphane Cerveau <scerveau@collabora.com>

	* gst-libs/gst/video/video-hdr.c:
	* gst-libs/gst/video/video-hdr.h:
	  video-hdr: add GstVideoHDRMeta
	  Allows attaching HDR metadata to a GstBuffer. Data is carried as a blob
	  plus enum value determining its format.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9668>

2026-03-05 15:35:15 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusenc.c:
	  opusenc: Use correct memcpy() size when copying Vorbis channel positions
	  The size of the destination (64 channels) was used but the source is
	  smaller (8 channels). While copying garbage into the destination is not so much
	  of a problem as only the actually used number of channels is going to be read
	  later, this can potentially lead to a segfault.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4948
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10982>

2026-02-03 07:30:26 +0900  jeongmin kwak <jeongmin.kwak@lge.com>

	* gst-libs/gst/rtp/gstrtcpbuffer.c:
	* tests/check/libs/rtp.c:
	  rtcp: Fix buffer overread in SDES packet parsing
	  Add bounds checking in gst_rtcp_packet_sdes_next_entry() and
	  gst_rtcp_packet_sdes_get_entry() to prevent reading beyond packet
	  boundaries when parsing malformed SDES items.
	  Both functions now return FALSE when attempting to read past the
	  packet length, preventing potential buffer overread vulnerabilities.
	  tests: Add regression test for SDES buffer overread vulnerability
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10730>

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

2026-03-03 16:25:39 +0900  jeongmin kwak <jeongmin.kwak@lge.com>

	* gst-libs/gst/rtp/gstrtpbuffer.c:
	* tests/check/libs/rtp.c:
	  rtpbuffer: Add validation for CSRC list length
	  Validate that the CSRC list does not extend beyond the packet boundary
	  as required by RFC 3550. A malformed RTP packet with a CSRC count that
	  would cause the CSRC list to extend beyond the available packet data
	  could lead to out-of-bounds memory access.
	  The validation follows the same pattern used for padding validation
	  (line 430), ensuring consistency with existing security checks.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10956>

2026-03-01 10:53:21 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/gl/gstglcolorconvert.c:
	  glcolorconvert: Fix NULL pointer dereference on buffers without video meta
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4935
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10939>

2026-02-11 19:44:34 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/riff/riff-media.c:
	  riff: Correctly check that enough RGB palette data is available
	  This can otherwise overflow and result in out-of-bounds reads/writes.
	  Fixes GST-SA-2026-0004, ZDI-CAN-28854, CVE-2026-2921.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4901
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10882>

2026-02-22 00:21:15 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* meson.build:
	  meson: Fix building of examples/gl/qt/qglwtextureshare
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10866>

2025-10-07 11:49:52 -0400  Xavier Claessens <xclaessens@netflix.com>

	* gst-libs/gst/tag/licenses.c:
	* gst-libs/gst/tag/meson.build:
	  devenv: Add support for licenses translation
	  Despite what comment said, gst-env was not setting that env. Do it now
	  in Meson devenv.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9802>

2026-02-20 14:02:16 +0100  Piotr Brzeziński <piotr@centricular.com>

	* gst-libs/gst/pbutils/codec-utils.c:
	  pbutils: Remove fixed caps check when not strictly necessary
	  Those checks were added because some functions do parse the provided
	  caps, in which case they absolutely have to be fixed. In the case of
	  those three functions, they only write to the caps without reading
	  anything, so it's safe to provide them with caps which aren't fixed yet.
	  This is used in vtenc during negotiation and the added check was causing
	  vtenc to print a critical warning whenever it'd negotiate.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10856>

2026-02-18 17:45:25 +0200  Vivia Nikolaidou <vivia@ahiru.eu>

	* gst-libs/gst/video/video-converter.c:
	  video-converter: Do not transform_metas with 0 width or height
	  It can legitimately happen in some scenarios and will lead to a crash, so in
	  that case we just skip copying the metas instead. gst_video_converter_frame, for
	  example, has a similar check that just returns if width or height are 0, so
	  let's just follow the same approach.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10832>

2026-02-17 13:23:26 +0200  Vivia Nikolaidou <vivia@ahiru.eu>

	* gst/compositor/compositor.c:
	  compositor: Do copy_metas also for background frame
	  Previously the background frame was skipped from the n_pads counting for
	  performance reasons, but the copy_metas check  used n_pads to iterate.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10824>

2026-02-14 12:38:55 +0100  Robert Mader <robert.mader@collabora.com>

	* gst-libs/gst/video/gstvideofilter.c:
	  videofilter: Add VIDEO_ALIGNMENT to downstream pool
	  In order to support the new GstVideoDmabufPool. Note that the video meta
	  should also only be added when downstream advertises support for it,
	  however doing so requires changes to tests and is thus left to a follow-up.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10808>

2026-02-12 02:49:28 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* gst-libs/gst/gl/egl/gstglcontext_egl.c:
	* gst-libs/gst/gl/gstglcontext.c:
	* gst-libs/gst/gl/wgl/gstglcontext_wgl.c:
	  gstgl: Fix incorrect usage of G_MODULE_SUFFIX on macOS
	  G_MODULE_SUFFIX is "so" on both Linux and macOS, but these codepaths
	  were assuming that it's only "so" for Linux. Use pre-processor macros
	  instead.
	  This is exactly why G_MODULE_SUFFIX is deprecated on macOS.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667>

2026-01-28 11:55:31 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* gst-libs/gst/gl/meson.build:
	  eagl: Add support for tvOS
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667>

2026-01-28 11:45:20 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* ext/gl/meson.build:
	* gst-libs/gst/gl/meson.build:
	* meson.build:
	* tests/examples/gl/cocoa/meson.build:
	* tests/examples/gl/qt/qglwtextureshare/meson.build:
	  meson: Deprecate `system = 'ios'` in cross files, use subsystem
	  Since we require Meson 1.4.0, we can now use subsystem names (added in
	  1.2.0).
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10667>

2026-02-05 10:31:15 +0100  Matus Gajdos <matuszpd@gmail.com>

	* gst-libs/gst/audio/gstaudiobasesink.c:
	  audiobasesink: Fix rounding when calculating render start/stop
	  When playing some audio files with:
	  gst-launch-1.0 uridecodebin uri="file:///tmp/audio.flac" ! \
	  audioconvert ! alsasink
	  Very first sample gets dropped. This is caused by rounding always down
	  when calculating render start/stop. Using the `round` variant of
	  `gst_util_uint64_scale_int()` fixes this issue.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10755>

2026-02-09 10:10:02 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/sdp/gstsdpmessage.c:
	  Revert "sdp: Validate numeric values in SDP parsing"
	  This reverts commit 6bdc7d2f7022c2398ad8b9fee395d693574162b4.
	  It introduces new warnings when parsing valid SDP files.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10778>

2026-02-03 14:34:09 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/video/gstvideodecoder.c:
	  videodecoder: Don't directly forward gap events if the decoder is not drained
	  Instead queue it up for forwarding before the next video frame. While this is
	  not ideal, it makes sure that the gap event does not go ahead of previous
	  buffers if the decoder has any queued internally, which could break timestamp
	  tracking downstream.
	  This fixes a regression introduced in 62cb08404b9bd055c45cc1d5b71141e927ad748a.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738>

2026-02-03 14:13:54 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/video/gstvideodecoder.c:
	  videodecoder: Move gap event handling into a helper function
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738>

2026-02-03 13:55:27 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/audio/gstaudiodecoder.c:
	  audiodecoder: Only forward gap events immediately if no frames are pending
	  Otherwise the gap event would go ahead of the pending frames, breaking
	  buffer/event serialization.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10738>

2026-01-06 11:22:34 +0900  jeongmin kwak <jeongmin.kwak@lge.com>

	* gst-libs/gst/sdp/gstsdpmessage.c:
	  sdp: Validate numeric values in SDP parsing
	  Media port and bandwidth values in SDP were parsed with atoi()
	  which cannot detect parsing errors. Replace with
	  g_ascii_string_to_unsigned() for proper validation with automatic
	  range checking and overflow detection.
	  Invalid values now log GST_WARNING and fallback to safe defaults
	  (0 for bandwidth/port) for backward compatibility with misconfigured
	  servers, while making RFC 4566 violations visible for debugging.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10501>

2026-01-06 21:30:00 +0100  Christian Gräfe <cgraefe83@gmail.com>

	* docs/plugins/gst_plugins_cache.json:
	* ext/gl/gstglsrcbin.c:
	  glsrcbin: adapt klass "Src" to "Source"
	  use recommended "Source" instead of "Src"
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10728>

2025-12-02 17:28:29 +0100  Pablo García <pgarcia@fluendo.com>

	* gst/typefind/gsttypefindfunctions.c:
	* gst/typefind/gsttypefindfunctionsplugin.c:
	* gst/typefind/gsttypefindfunctionsplugin.h:
	  typefind: Add AC-4 support
	  Based on
	  https://www.etsi.org/deliver/etsi_ts/103100_103199/10319001/01.04.01_60/ts_10319001v010401p.pdf,
	  Annex G.3 and G.4.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10267>

2026-01-19 15:55:29 -0300  Thibault Saunier <tsaunier@igalia.com>

	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
	  gl: cocoa: Handle non-Cocoa windows in CGL context creation
	  When using surfaceless mode (GST_GL_WINDOW=surfaceless), a GstGLDummyWindow
	  is created instead of a GstGLWindowCocoa. The CGL context code was assuming
	  the window was always a Cocoa window, causing a crash when trying to access
	  Cocoa-specific fields.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10564>

2026-01-20 14:37:36 -0500  Dominique Leroux <dominique.p.leroux@gmail.com>

	* gst-libs/gst/pbutils/codec-utils.c:
	* gst-libs/gst/pbutils/codec-utils.h:
	* tests/check/libs/pbutils.c:
	  pbutils: New utilities to handle vp8/vp9 vpcC and vp9 levels, with tests
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10538>

2026-01-06 11:41:27 +0900  jeongmin kwak <jeongmin.kwak@lge.com>

	* gst-libs/gst/rtsp/gstrtsptransport.c:
	  rtsp: Validate transport parameter parsing in RFC 2326
	  The layers, ttl, and ssrc parameters were parsed with strtoul()
	  but did not validate whether parsing succeeded, causing invalid or
	  empty values to be silently accepted as zero in violation of RFC 2326.
	  Replace with g_ascii_string_to_unsigned() for proper validation with
	  automatic range checking (ttl: 0-255) and overflow detection.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10500>

2026-01-29 12:34:46 +0100  Fabian Orccon <forccon@fluendo.com>

	* gst-libs/gst/audio/gstaudiosink.c:
	* gst-libs/gst/audio/gstaudiosrc.c:
	* gst/playback/gstdecodebin2.c:
	* gst/playback/gstparsebin.c:
	* tests/check/elements/inputselector.c:
	  all: GThreadFunc return type fixes
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10682>

2026-01-30 13:07:48 +0100  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>

	* gst/playback/gstplaysink.c:
	  playsink: unref color balance channels with g_object_unref()
	  Since they are not GstObject but plain GObjects, the unref function has to be
	  g_object_unref(). Otherwise it might generate problems with tracers.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10701>

2025-12-20 13:41:04 +0200  Sebastian Dröge <sebastian@centricular.com>

	* docs/plugins/gst_plugins_cache.json:
	* ext/opus/gstopusenc.c:
	* ext/opus/gstopusenc.h:
	  opusenc: Support encoding 96kHz if supported by the library and explicitly enabled
	  This is disabled by default behind the qext property as it can lead to
	  compatibility problems.
	  Also allow higher bitrates to be configured.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4816
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10425>

2025-12-20 13:39:05 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusdec.c:
	  opusdec: Unconditionally install phase-inversion property
	  Properties existing conditionally are problematic.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10425>

2025-12-20 13:38:02 +0200  Sebastian Dröge <sebastian@centricular.com>

	* docs/plugins/gst_plugins_cache.json:
	* ext/opus/gstopuscommon.c:
	* ext/opus/gstopuscommon.h:
	* ext/opus/gstopusdec.c:
	* ext/opus/gstopusdec.h:
	  opusdec: Support 96kHz decoding if supported by the library
	  Also add a new property to ignore extensions.
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4816
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10425>

2026-01-30 09:47:54 +0200  Sebastian Dröge <sebastian@centricular.com>

	* docs/plugins/gst_plugins_cache.json:
	  docs: Update plugins cache for Opus changes
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10423>

2025-12-20 12:12:18 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusdec.c:
	  opusdec: Add support for S24_32 samples
	  See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4816
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10423>

2025-12-20 12:11:45 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusenc.c:
	* ext/opus/meson.build:
	  opusenc: Add support for S24_32 samples
	  See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4816
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10423>

2025-12-20 11:43:00 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusdec.c:
	  opusdec: Add support for F32 samples
	  See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4816
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10423>

2025-12-20 11:02:33 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusenc.c:
	* ext/opus/meson.build:
	  opusenc: Add support for F32 samples
	  See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4816
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10423>

2025-12-20 10:58:03 +0200  Sebastian Dröge <sebastian@centricular.com>

	* ext/opus/gstopusenc.c:
	* ext/opus/gstopusenc.h:
	  opusenc: Use base class audio info instead of duplicating fields
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10423>

2025-12-12 06:30:48 +0100  Edward Hervey <edward@centricular.com>

	* gst-libs/gst/video/gstvideodecoder.c:
	  videodecoder: Handle recovery from temporary reordered output
	  The code previously assumed that if there was a single reordered output
	  frame, then it was wrong forever.
	  Sadly, it could just be a temporary issue (maybe even just a single frame) and
	  wouldn't have a chance from recovering.
	  Instead, check if we received enough "ordered" frames from the subclass and
	  switch back to normal behaviour
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10558>

2025-04-03 14:52:49 +0200  Edward Hervey <edward@centricular.com>

	* gst/playback/gstdecodebin3.c:
	  decodebin3: Fix switch to smaller collections
	  If an input stream goes away without EOS, we will end up with a case where the
	  number of slots won't match the number of stream in the collection (until that
	  stream and slot really gets removed).
	  But we still want to detect when all streams of that (smaller) collection are
	  present so we can switch to it.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10583>

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

	* gst/audiorate/gstaudiorate.c:
	  audiorate: Handle SEGMENT_DONE the same way as EOS
	  videorate already does the same.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10568>

2026-01-19 03:06:15 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* gst-libs/gst/gl/eagl/gstglwindow_eagl.m:
	  eagl: Auto-resize when the UIView window is resized
	  * layoutSubviews needs to be defined
	  * contentsScale and contentScaleFactor need to be set correctly, the
	  default of 1.0 is incorrect on all modern devices
	  * Update drawable size when the window object changes
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10556>

2026-01-18 17:37:47 +0530  Nirbheek Chauhan <nirbheek@centricular.com>

	* gst-libs/gst/gl/meson.build:
	* meson.options:
	  gl: Fix explicit enabling of EAGL support on iOS
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10556>

2026-01-28 18:15:48 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/rtp/gstrtppayloads.c:
	  rtp: Add mappings for H266 and AV1 encoding-names
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10649>

2026-01-28 11:50:49 +0200  Sebastian Dröge <sebastian@centricular.com>

	* gst-libs/gst/rtsp/gstrtsprange.c:
	* gst-libs/gst/rtsp/gstrtsptransport.c:
	* gst/subparse/gstsubparse.c:
	* gst/subparse/qttextparse.c:
	* gst/subparse/samiparse.c:
	  base: Fix a couple of new const-ness warnings around strstr() usage
	  Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4871
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10637>

2025-03-26 16:07:18 +0100  Edward Hervey <edward@centricular.com>

	* gst/playback/gstdecodebin3.c:
	  decodebin3: Improve handling collection change on existing pad
	  A check was already present for checking if an incoming stream belonged to the
	  current collection. This was added in
	  https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10109
	  But it only focused on the collection on the current pad, and not on the
	  aggregated collection.
	  This modification actually checks against the aggregated (and potentially
	  different) input collection, and also updates it accordingly.
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8700>

2025-03-26 16:01:02 +0100  Edward Hervey <edward@centricular.com>

	* gst/playback/gstdecodebin3.c:
	  decodebin3: Ensure input->collection is always coherent
	  If we want to "unset" the current input collection (by providing NULL) it
	  wouldn't actually unset it and we would end up with a dangling pointer instead
	  of NULL (i.e. no collection yet for that input)
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8700>

2026-01-14 23:12:32 +0100  Ruben Gonzalez <rgonzalez@fluendo.com>

	* gst/typefind/gsttypefindfunctions.c:
	  typefindfunctions: Promote y4m_typefind
	  Related to https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4848
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10542>

2026-01-09 16:42:52 +0100  François Laignel <francois@centricular.com>

	* tests/check/elements/inputselector.c:
	  input-selector: add test eos for remaining non active pad
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10507>

2026-01-06 16:43:55 +0100  François Laignel <francois@centricular.com>

	* tests/check/elements/inputselector.c:
	  input-selector: add pad release stress test
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10507>

2026-01-27 18:36:19 +0000  Tim-Philipp Müller <tim@centricular.com>

	* README.md:
	* RELEASE:
	* meson.build:
	  Back to development in main branch after 1.28.0
	  - Track orc main branch
	  - Track gst-plugins-rs main branch
	  Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/10616>

=== release 1.28.0 ===

