GStreamer 1.29.x release notes
GStreamer 1.29.x is an API/ABI-unstable development series leading up to the stable 1.30 series.
The latest unstable development snapshot in the 1.29 series is 1.29.2 and was released on 29 June 2026.
1.29.1
The first API/ABI-unstable 1.29.x development snapshot release (1.29.1) was released on 22 March 2026.
Any newly-added API in the 1.29.x series may still change or be removed again before 1.30 and should be considered unstable until 1.30 is released.
The 1.29.x release series is for testing and development purposes, and distros should probably not package it.
Highlighted changes in 1.29.1
- ac4parse: New basic AC-4 parser element, plus AC-4 typefinding
- analytics: New GstAnalyticsMtd derivative to represent grouping of Mtd's and Keypoint
- analytics: Added a hand tracking tensor decoder element
- Parse HDR10+ metadata out of H.265 and AV1 bitstreams
- Matroska demuxer: Can build a dynamic seek index now if needed
- New h264seiinserter and h265seiinserter elements that support both closed captions and unregistered user data SEIs
- Add HLS WebVTT sink element to the hlssink3 plugin
- New DASH sink element that uses CMAF muxer without splitmuxsink
- New plugin for general purpose compress/decompress
- New udpsrc2 element with better performance for high bitrate streams
- New VA-API overlay compositor
- Opus audio support for F32 and S24_32 samples and 96kHz sample rate
- Playbin3 subtitle switching fixes
- Bump ranks of the new Rust RTP (de)payloaders to PRIMARY and default to mtu 1200 for payloaders
- rtspsrc2 authentication support
- GstPlay track selection notification improvements
- QML6 GL Source now supports navigation events
- QuickTime demuxer gained Bayer support
- Splitmuxsink now includes the start and end timecodes in fragment-opened and closed messages
- srtpdec gained a way to invalidate keys for a specific SSRC
- The APE tag demuxer can extract cover art tags now
- translationbin can control the textaccumulate latency now via a new property
- Allow device providers rank override using GST_PLUGIN_FEATURE_RANK
- cerbero gained support for Android on RISC-V64
- Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements
gstreamer
- Allow device providers rank override using GST_PLUGIN_FEATURE_RANK
- basesink: Unset have_preroll if not actually waiting for preroll
- debugutils: add tooltip with full params to dot graph elements
- dots: add features parameter to control pipeline-snapshot composition
- logging: improve performance by reducing allocations in __gst_vasnprintf
- structure/tracer: Some simple UX enhancements to set tracer properties
- tracer: add object-parent-set hook
- validateflow: auto-derive directories from test file path
Backported into 1.28:
- Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning
- Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS
- GThreadFunc return type fixes
- aggregator: Handle gap event before segment
- aggregator: Various introspection annotations / docs fixes for vfuncs
- baseparse, Preserve upstream buffer duration if possible
- baseparse: Fix out_buffer leak in frame_free and missing ref in frame_copy
- bin: iterator is not nullable
- bitwriter: Steal owned data in reset_and_get_data()
- caps: Fix the features leak in gst_caps_append_structure_full
- filesink: Fix wrong open() in overwrite mode
- filesink: Report write error correctly on Windows
- ges: Plug all leaks reported running valgrind on our testsuite
- gst-stats: Also allow ANSI colored logs without 0x in front of the thread id
- gst: Add explanatory comment to call_async implementation
- input-selector: fix several shortcomings
- multiqueue: reverse playback: use segment stop position as start time
- registry: Skip .dSYM bundles when loading plugins, try 2
- registry: Skip .dSYM bundles when loading plugins, try 3
- typefindfunctions: Promote y4m_typefind
gst-plugins-base
- Parse HDR10+ metadata out of H.265 and AV1 bitstreams
- video-hdr: HDR10plus signalling by using only blob data might be suboptimal
- audiobasesink: Fix rounding when calculating render start/stop
- gl: cocoa: Handle non-Cocoa windows in CGL context creation
- gst-env.py: Keep a simple wrapper for meson devenv
- opusenc/dec: Add support for F32 / S24_32 samples
- opusenc/dec: Support 96kHz sample rate
- playbin3: Reproducible deadlock switching subtitle tracks in MKV containers
- playsink: don't wait for text pad block during reconfiguration
- pbutils, qtmux, qtdemux, vtdec, vp9parse: vp9 improvements to unify vpcC creation and level handling
- pbutils: Remove fixed caps check when not strictly necessary
- typefind: Add AC-4 support
- validateflow: auto-derive directories from test file path
Backported into 1.28:
- Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning
- Fix scaling and resizing with UIView on EAGL and Vulkan
- Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS
- GThreadFunc return type fixes
- Various element factory metadata fixes
- audiobuffersplit: Various smaller fixes and implement handling of negative rates correctly
- audiodecoder / videodecoder: Fix gap event handling
- compositor: Do copy_metas also for background frame
- compositor: move gst_compositor_init_blend() to element class_init
- decodebin3: Fix switch to smaller collections
- decodebin3: Improve handling collection change on existing pad
- glcolorconvert: Fix NULL pointer dereference on buffers without video meta
- glupload: Fix linking glupload with restrictive caps filter
- input-selector: fix several shortcomings
- opusenc: Use correct memcpy() size when copying Vorbis channel positions
- playsink: unref color balance channels with g_object_unref()
- riff: Correctly check that enough RGB palette data is available
- rtcp: Fix buffer overread in SDES packet parsing
- rtp: Add mappings for H266 and AV1 encoding-names
- rtpbuffer: Add validation for CSRC list length
- rtsp: Validate transport parameter parsing in RFC 2326
- rtsp: gstrtspurl: Parse URL having user without password
- typefindfunctions: Promote y4m_typefind
- video-converter: Do not transform_metas with 0 width or height
- video-converter: fix I420/A420 BGRA/ARGB output on big-endian
- video: fix too small default stride for UYVP with odd widths
- videodecoder: Handle recovery from temporary reordered output
- videofilter: Add VIDEO_ALIGNMENT to downstream pool
- videorate: Fix unrestored caps on backward PTS
gst-plugins-good
- Bayer support for qtdemux (mp4/uncv)
- apedemux: Add support for cover art tags
- av1dec, vpxdec, openh264dec, jpegdec: Streamline and simplify decide_allocation
- deinterlace: Allow allocation queries to pass through in mixed mode
- dtmfsrc: expose properties for controlling minimum durations
- flvdemux: Make no-more-pads threshold configurable
- flvmux: Timestamp outgoing buffers from mux, not incoming buffer
- gst-plugins-good: Fix unused parameter warnings in alphacolor
- level: Port from GstBaseTransform to GstAudioFilter
- matroska-demux: parse TrackLanguageBcp47 tags
- matroskademux: Build dynamic seek index if needed
- matroska: Read and write vp9 CodecPrivate to assist initial decoder config
- pbutils, qtmux, qtdemux, vtdec, vp9parse: vp9 improvements to unify vpcC creation and level handling
- qml6glsrc: Add support to handle navigation events
- qml6glsrc: Simplify implementation of Qt6GLWindow
- qt6: fixed build for Android
- qtdemux: Handle 'pict' tracks as if they were video tracks
- qtmux: include gstqtmux-doc.c in doc_sources
- rtp: Lower Opus (de)payloader ranks to SECONDARY
- rtspsrc: add backchannel-http-method property for HTTP tunnel mode
- rtspsrc: Correctly parse RTSP 2.0 RTP-Info headers
- splitmuxsink: Include start/end timecodes in fragment-opened/closed messages
- srtpdec: Add API for invalidating keys for a specific SSRC
- test-client-managed-mikey: Allow user to select cipher
- test-client-managed-mikey: Fix parsing of auth
- wavparse: Add support for ID3 tags
Backported into 1.28:
- Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS
- GThreadFunc return type fixes
- Qt6GLVideoItem: caps update fixed
- Various element factory metadata fixes
- gstrtspsrc: Set new mki in the encoder upon crypto update
- hlsdemux2: fix seekable range for live HLS streams
- meson: Fix libxml2 not building due to wrong option type
- qml6glsrc: Fix rendering of scene with clipped items
- qtdemux: Don't ignore flow return when pushing queued buffers downstream
- qtdemux: Don't immediately push segment after moov in push mode for fmp4
- qtdemux: Fix handling of in-between fragments without tfdt
- qtdemux: Fix invalid WebVTT timestamps
- qtdemux: Fix out-of-bounds read when parsing PlayReady DRM UUIDs
- qtdemux: Make sure to not output the same samples multiple times in reverse playback mode
- qtdemux: Push raw audio/video buffers downstream in reverse order if rate < 0
- qtdemux: Set the segment position to the start on EOS in reverse playback mode
- rgvolume: don't apply dBSPL reference level compensation for LUFS values
- rtph264depay: fix invalid memory access in gst_rtp_h264_finish_fragmentation_unit
- rtpqdm2depay: error out if anyone tries to use this element (and remove it)
- rtpsource: Add locking for receive reports table
- rtptwcc: fix feedback packet count wrapping at 255
- rtspsrc: fix Memory leak in gst_rtspsrc_close() when GST_RTSP_EEOF error occurs
- v4l2: Add support for AV1 stateful V4l2 decoder
- vpxdec: Support downstream pools with alignment requirements
- wavenc: Skip writing empty LIST INFO chunk
- wavpack: Fix handling of format changes, extend parser with new features, handle non-S32 samples in all variations
- wavparse: Avoid integer overflow and out-of-bounds read when parsing adtl chunks
- wavparse: Avoid overflow in length when setting ignore-length=true
- wavparse: Fix parsing of RF64 wave files
gst-plugins-bad
- Parse HDR10+ metadata out of H.265 and AV1 bitstreams
- VA-API overlay compositor
- amfcodec: Add Linux support
- amfcodec: fix build for platforms other than Windows and Linux
- amfcodec: update the SDK headers
- analytics: adding group mtd and keypoint mtd
- av1dec, vpxdec, openh264dec, jpegdec: Streamline and simplify decide_allocation
- av1parse: now adds av1c in caps codec_data
- avfassetsrc: Replace file:// URI support with avf+file://
- closedcaption: Add h264seiinserter and h265seiinserter elements
- decklink: Fix timecode handling
- doc: cleanup gst-launch comment
- doc: correct inference elements doc
- mxfdemux: fix uninitialized warning
- mxfdemux: handle reverse playback in pull mode
- pbutils, qtmux, qtdemux, vtdec, vp9parse: vp9 improvements to unify vpcC creation and level handling
- play: Add new tracks-selected message as signal to the signal adapter
- play: Add new tracks-selected message to notify about track selections having happened
- rtmp2: Don't retry on G_IO_ERROR_TIMED_OUT
- srtpdec: Add API for invalidating keys for a specific SSRC
- tests: add vulkan av1 decode
- tests: fix vp9 vulkan decode test on radv
- timecodestamper: Add timecode source mode based on ST12-2/3 ancillary meta
- vah264dec: Set VA_PICTURE_H264_NON_EXISTING
- validateflow: auto-derive directories from test file path
- vkh264enc: fix level if required in new_sequence() and avoid renegotiation if possible
- vkvideo: move dedicated DPB detection after capability query
- vulkan: add H.26X GOP mapper utility for video encoding
- vulkan: fix grammar of function _has_feature_timeline_semaphore()
- vulkan: ignore Setting-Limit-Adjusted validation layer warning
- vulkan: Expose Vulkan physical device features and properties
- webrtc: Populate certificate stats
- webrtcbin: Fill crypto-related transport stats
Backported into 1.28:
- analytics: Set default pixel-aspect-ratio for inference elements
- Fix a couple of new const-ness warnings around strstr() usage, out-of-bounds read in PTP clock and uninitialized variable compiler warning
- Fix dims_order handling
- Fix scaling and resizing with UIView on EAGL and Vulkan
- Fix support for cross-compiling to iOS and add a cross file for it, remove HAVE_IOS, port to tvOS
- GThreadFunc return type fixes
- GstPlay: fix segmentation fault due to use after free
- Minimal support for compiling with zxing-cpp 3.x
- Various element factory metadata fixes
- ajasink: Only allow 6 / 8 / 16 audio channels
- ajasinkcombiner: Only forward the segment events from the video sinkpad
- applemedia: Fix vtenc draining logic, port other existing fixes between vtdec and vtenc
- applemedia: elements can now be individually registered with gst-full
- asiosink: Fill silence when paused
- audiobuffersplit: Various smaller fixes and implement handling of negative rates correctly
- audiobuffersplit: fix reverse playback
- av1dec: Enable VIDEO_META and VIDEO_ALIGNMENT for pool
- av1parse: split the alignment and stream type logic
- av1parse: Misc fixes 2 typo
- av1parse, vp9parse: Remove segment clipping to let downstream handle frame boundaries
- baseparse, h264parse, h265parse: Preserve upstream buffer duration if possible
- ccconverter: Reset counters on flush-stop
- cea608mux: fix overflow when calculating output PTS
- codecs: v4l2: Add short and long term ref sets support in v4l2 codecs -- stable ABI
- codectimestamper: Fix latency query handling
- cudaupload, cudadownload: Fix CUDA/GL interop copy path
- dashsink: test: use playbin3 for DASH playback verification
- decklinkvideosink: fix element leak in decklink callback
- dtls: unregister signal handlers from connection
- dvbsuboverlay: Add missing bounds checks to the parser everywhere
- gdppay: Fix null pointer dereference on duplicated caps event
- h264,h265ccextractor: Fix framerate in initial caps
- h264parse: Fix framerate calculation and interlaced features
- h264parser: Fix memory leak in gst_h264_parser_parse_nal()
- h265parser: Validate num_decoding_units_minus1 in pic_timing SEI
- h266parser: Fix APS ID bounds check in APS parsing
- h266parser: Fix out of bounds write when parsing pic_timing SEI
- h266parser: Validate tile index bounds in picture partition parsing
- libs: jpegparser: boundary checks before copying it
- meson: Add a subproject for providing the LunarG MoltenVK SDK
- meson: Explicitly use cpp_std=c++11 for decklink
- meson: Fix downloading MoltenVK SDK, make it work when meson-installed
- meson: Fix libxml2 not building due to wrong option type
- mpeghdec: memory leak fix in MPEG-H Audio decoder plugin
- mpegtspacketizer: Handle clock change/resets without skew correction
- mxfdemux: always send a segment before sending eos or segment-done
- mxfdemux: fix gst_mxf_demux_pad_get_stream_time ()
- nvcodec: Add capability caching to speed up plugin initialization
- objectdetectionoverlay: add support for rotated bounding boxes
- openh264enc: remove broken drain and simplify handle_frame
- soundtouch: Only allow up to 192kHz and 16 channels
- srtpenc: preserve ROC when master key is updated for an ongoing session
- svtav1: fix "Level of parallelism" property type discrepencies
- tsdemux: Fix Continuity Counter handling
- tsmux: reduce noise for DEBUG log level
- tsmux: Fix integer overflow in SCTE35 NULL interval
- v4l2: Add support for AV1 stateful V4l2 decoder
- vabasetransform: copy buffer's metadata at copy when import buffer
- vavp8enc: set color format chroma
- vkav1dec: fix to set SavedOrderHints properly
- vtdec: Avoid busy looping when queue length is smaller than DPB size
- vtdec: Don't re-create session if only the framerate changed
- vtdec: Fix race condition when negotiating during playback
- vtdec: Fix wrong DPB size check in the output loop
- vtdec: Reverse playback fixes
- vtenc: Fix DTS offset calculation
- vtdec: Store supplemental codec support in a global variable
- vulkan: load video function pointers conditionally based on codec operation
- vulkan: Clear mutex when GstVulkanImageMemory is freed
- wayland: Fix CLAMP operation of maxFALL and maxCLL
- wayland: display: Add protection when replacing wl_output
- waylandsink: make gst_wl_window_commit_buffer handle NULL buffers
- webrtc: sink floating refs of ICE transports
- webrtcbin: Check the presence of encoding-name fields in answer caps
- zxing: Fix version check for zxing-cpp 3.0.1
gst-plugins-ugly
- No changes that haven't been backported
Backported into 1.28:
- asfdemux: Error out on files with more than 32 streams
- rmdemux: Check if new video fragment overflows the fragment storage before storing it
GStreamer Rust plugins
- ac4parse: Basic AC-4 parser element creation
- analytics: Add a hand tracking tensor decoder element
- compress: adding deflate algo support
- compress: Adding brotli support
- dashsink2: add new DASH sink element that uses CMAF muxer without splitmuxsink
- flate: adding flate, for general purpose compress/decompress
- hlssink3: Add HLS WebVTT sink element
- rtp: Bump ranks of new Rust (de)payloaders to PRIMARY
- rtp: basepay2: default to lower MTU of 1200 instead of 1400
- rtprecv: Add
add-reference-timestamp-metaproperty - speechmatics: Fix infinite reconnection on discont buffer
- transcriberbin: handle error messages fully asynchronously
- translationbin: expose property to control textaccumulate latency
- udp: Add new plugin with udpsrc2
- udpsrc2: handle ICMP errors
- webrtcsink: add support for qtic2venc encoder
- Update dependencies
- gstwebrtc-api: fix example offer options
- Add explanation to the README.md why gst-plugins-rs is a separate repository
Backported into 0.15:
- burn: yoloxinference: Restrict widths/heights to a multiple of 32
- cargo_wrapper: Add nasm dir to path only if needed
- Don't transform push_event() false returns into flow errors
- fallbacksrc: Send select-streams event to collection source element
- gst-plugins-rs: only add example features when dependencies are found
- gtk4paintablesink: Error out in NULL->READY if there is no default GDK display
- png: implement image repacking when buffer is padded
- rtpav1pay: insert sequence header if a keyframe is missing it
- rtpbin2: don't panic in Drop impl
- rtpsend: send mandatory events on the rtcp srcpad before sending the first buffer
- rtspsrc2: Implement authentication support
- speechmatics: fix first_buffer_pts race condition in dispatch_message
- speechmatics, textaccumulate: fix flushing issues
- threadshare: examples: add rtpbin2 send / recv
- threadshare: fix socket leak in ts-udpsink
- threadshare: udpsink/src: don't error out failing to send packet to a client / receiving an ICMP error
- Update dependencies
- webrtc: Silence new clippy warning
- whisper: update to latest release 0.16
gst-libav
- No changes that haven't been backported
Backported into 1.28:
- Various element factory metadata fixes
- audiodecoder / videodecoder: Fix gap event handling
- avviddec: Allow stride changes for some decoders
- avviddec: Fix handling of mixed interlaced content
- avviddec: Handle field/order changes in mixed interlace mode
- gst-libav: avvidcmp: set colorimetry on AVFrame
- libav: Don't process lines that won't be outputted
gst-rtsp-server
- No changes that haven't been backported
Backported into 1.28:
- rtsp-client: Lock media when unlinking session medias
- rtsp-stream: Clear send_thread when it's freed
- rtspclient: expose property to control error posting on RTCP timeout
gstreamer-sharp
gst-python
Backported into 1.28:
gst-editing-services
- ges-launcher: fix crash when error message has no source
- validate: Cleanup media and scenarios and add documentation
- validateflow: auto-derive directories from test file path
Backported into 1.28:
- Plug all leaks reported running valgrind on our testsuite
- Remove spurious python-embed dependency from libges
- meson: Fix libxml2 not building due to wrong option type
gst-devtools, gst-validate + gst-integration-testsuites
- gst-validate-launcher: Fix --help for Python 3.14
- validate: Cleanup media and scenarios and add documentation
- validate: support .media_info files in the main repo
- validateflow: auto-derive directories from test file path
- validate-launcher: don't generate tests for skipped media info files after updating them
- validate: Cleanup media and scenarios and add documentation
- validate: launcher: fix total time spent when re-running flaky tests
- validate: support .media_info files in the main repo
- validateflow: auto-derive directories from test file path
Backported into 1.28:
gstreamer-docs
Backported into 1.28:
Development build environment
- Add release notes snippets directory
- vscode: avoid to track launch.json
- gst-env.py: Don't change CWD when entering the devenv
- gst-env.py: Keep a simple wrapper for meson devenv
- macos: enforce meson >= 1.8.3 for Xcode 26+
- wraps: update ffmpeg to 7.1.1, cairo to 1.18.4
- wraps: bump libvpx to 1.15
Backported into 1.28:
- Add a subproject for providing the LunarG MoltenVK SDK
- Fix downloading MoltenVK SDK, make it work when meson-installed
- wraps: update libxml2 to v2.15.2
Cerbero build tool and packaging changes in 1.29.1
- Adding Support for Android on RISC-V64
- build-tools: remove gtk-doc-lite recipe
- cerbero: fixes for background build setup
- hacks: Remove xml hack in favor of etree.indent
- system_recipes: drop arch assert
- x265: unify all recipes in a single file
- oven: do not mark skipped recipes as built
Backported into 1.28:
- Add tvOS support
- Ensure there's no gstreamer in the artifact cache
- Rename vaapi variant to va and by default on Linux, test built plugins correctly on CI
- Update to Rust 1.93 / cargo-c 0.10.20
- Update to Rust 1.94 and cargo-c 0.10.21
- build: include plugin's .pc file in Linux and macOS
- bump up to NDK 29 and pin cpp_std to c++11 in opencore-amr
- cerbero: Use static python requires for all wheels
- cerbero: add environment variable for building run with background priority
- cerbero: os.PRIO_DARWIN_PROCESS is only available on Python 3.12+
- fetch: use the Oven for parsing the dependency tree
- filesprovider: Check missing files at the recipe level on CI runs
- glib.recipe: Upstream old iOS GIO_MODULE_DIR hack
- gtk.recipe: Enable gstreamer media backend on Windows
- gtk: Enable GStreamer media backend on Windows
- inno: assorted fixes for Registry key handling
- inno: Fix incorrect MSVC redistributable when cross-building for Arm64
- inno: Restrict usage to native Windows as exposed by sys.platform
- inno: fix environment variable being created outside SessionManager/Environment
- libpng: update to 1.6.55
- libsoup: update to 3.6.6
- libsrtp: update to v2.8.0
- osx-framework: Add missing gstreamer libraries
- osx: fix file duplication in .pkg payloads
- packaging: Fix missing devel payloads for gstreamer-1.0-python
- pygobject.recipe: Fix overflow when comparing GstMessageType on Windows
- recipe: do not run symbolication if nodebug
- wheel: Add a new gstreamer_meta package with fewer deps
- wheel: Add debuginfo wheel
- wheels: Add a new meta-package 'gstreamer_bundle'
- wheels: Add proper description / long_description
- wheels: Don't raise an exception if cli exits with non-zero code
- x265: drop common source recipe
Contributors to 1.29.1
Adrian Perez de Castro, Albert Sjölund, Alicia Boya García, Amyspark, Andoni Morales Alastruey, Andrey Sidorov, ArokyaMatthewNathan, axxel, Azat Nurgaliev, Carlos Bentzen, Charles, Chris Bainbridge, Christian Gräfe, Cole Richardson, Daniel Morin, David Rosca, Deepa Guthyappa Madivalara, Detlev Casanova, Dominique Leroux, Edward Hervey, Fabian Orccon, François Laignel, freedesktop, Guillaume Desmottes, He Junyan, Hou Qi, Hyunjun Ko, Jakub Adam, James Liu, Jan Alexander Steffens (heftig), Jan Schmidt, jeongmin kwak, Jeremy Whiting, Jorge Zapata, László Károlyi, L. E. Segovia, Mao Han, Marko Kohtala, Martin Rodriguez Reboredo, Mathieu Duponchelle, Matthew Waters, Mattia, Matus Gajdos, Monty C, Nicolas Dufresne, Nirbheek Chauhan, Ognyan Tonchev, Olivier Crête, Pablo García, Peter Stensson, Philippe Normand, Piotr Brzeziński, Rinat Zeh, Robert Mader, Roberto Viola, Ruben Gonzalez, Sanchayan Maity, Sebastian Dröge, Sergey Radionov, Seungha Yang, Shigeharu Kamiya, Sjoerd Simons, Stéphane Cerveau, Sven Püschel, Taruntej Kanakamalla, Thibault Saunier, Tim-Philipp Müller, Tobias Koenig, Tobias Rapp, Tobias Schlager, Víctor Manuel Jáquez Leal, Vitaly Vlasov, Vivia Nikolaidou, Vivienne Watermeier, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xi Ruoyao,
... and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all!
List of merge requests and issues fixed in 1.29.1
1.29.2
The first API/ABI-unstable 1.29.x development snapshot release (1.29.2) was released on 29 June 2026.
Any newly-added API in the 1.29.x series may still change or be removed again before 1.30 and should be considered unstable until 1.30 is released.
The 1.29.x release series is for testing and development purposes, and distros should probably not package it.
Highlighted changes in 1.29.2
- webrtcbin2: New scalable WebRTC bin that uses fewer threads and native Rust DTLS, ICE and RTP session management implementations
- rtspsrc2: implement support for SRTP, authentication, HTTP tunnelling, keep alive, stream selection, TLS validation, latency configuration
- rtp2: New Rust RTP payloader and depayloader implementations for MPA audio, MPEG-2 video and raw video
- Digitally Signed Content (DSC) support, initially for H.266 video
- New D3D12-based element which performs color lookup operations using user-provided Adobe .cube LUT files
- videoencoders: Support adaptive presets with resolution-dependent properties and implement in x264enc and nvh264enc
- closedcaption: add h266seiinserter; add "do-timestamp" property to codecseiiinserter/merge_requests/10514)
- flv: Add support for AV1 video
- v4l2: add capture timestamps to buffers in v4l2src, and "bitrate" and "gop-size" properties to video encoders
- applemedia: new iosurface helper library providing a memory:IOSurface abstraction
- AMF: add super resolution hq-scaler component
- New OpenGL glalphacombine element for RGBA inputs and Vulkan/OpenGL memory support for alphacombine
- openjpeg: Add support for high bit depth formats
- analytics: add semantic tag getter to GstAnalyticsMtd
- tensordecoders: Add YOLO26 detection decoder
- tfliteinference: support for external delegates, XNNPACK, and GRAY8 input
- MP4: add support for losslessly-compressed video
- matroskamux: add TrueHD audio and HDMV PGS subpicture support
- playsink reconfiguration stability improvements
- New agingradio and sofalizer audio effect elements
- New image-rs based imagersoverlay element in Rust to replace gdkpixbufoverlay
- webrtcsink: add v4l2h264enc (Raspberry Pi) encoder support and a signaller for Unreal Engine PixelStreaming
- webrtcsink, webrtcsource: make custom signalling protocol extendable
- Speech elements: implement support for non-synchronized output
- d3d12: Add support for hardware-accelerated decoding of VP9 with alpha
- androidmedia: New source element for Android assets
- filesink: Add support for Windows file sharing mode to allow reading of file while it's being written to
- tracing: custom spans and events API and new tracers that integrate with the Rust tracing ecosystem
- editing-services: auto-plug raw video converters from the registry based on compositor memory family and prepare for multi-threaded usage
- dots-viewer: General enhancement of the web app
- New viuersink video sink that plays video in the terminal, replacing aasink and cacasink
- cerbero: Added ccache support for MSVC
- Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements
gstreamer
Core:
- Add a GST_SEGMENT debug category
- cpuid: Add RISC-V Vector extension detection
- doc: Improve documentation of gst_debug_bin_to_dot_file()
- value: Add gst_value_take_structure() and use it where possible
- systemclock: Add gst_system_clock_new() to create a new instance of the system clock
- pluginfeature: export the rank as a property
- plugin: Fix typo in documentation comment
- preset: Support adaptive presets with resolution-dependent properties
- ReferenceTimestampMeta: add documentation for timestamp/x-system-monotonic
- tracer: Add a custom span API
- riscv: Add host_defines and ABI struct definitions
Core Libraries:
- aggregator: Improve locking, fix flushing deadlock
- aggregator: Don't clear the pad's segment on flush
- aggregator: Wake up src pad task on reconfigure event
- basesrc, basetransform: add a virtual method to prepare the pool & allocator
- ptp-helper: Fix copy&paste mistakes in error messages
Core Elements and Tracers:
- filesink: Add support for Windows file sharing mode
- inputselector several raciness fixes
- Pass a strong reference to the user_data to gst_pad_start_task()
- tracers: gst-dots: General enhancement of the web app
- tools: fix gst-inspect for nested caps
Backported into 1.28:
- aggregator: Fix documentation
- allocator: Use g_try_malloc() instead of g_malloc() for sysmem
- baseparse: Fix memory leak when subclass returns error
- bitwriter: Allow unsetting set bits when overwriting them
- bufferpool: avoid leaking partially preallocated buffers
- caps: fix multiple caps leaks
- check: Add API to run tests without fork(), adjust existing tests
- datetime: Improve correctness of ISO-8601 string parsing
- devicemonitor: Wait for start thread to finish when listing devices
- gstinfo: Don't use fwrite() on Windows for debug logging
- gstinfo: Use stack allocation for <=1KB messages
- gsttask: Fix racy tests by making unref deterministic
- gstvalue: fix crash when converting NULL G_TYPE_VALUE_ARRAY to G_TYPE_STRING
- pads: Fix sticky event raciness when linked mid-push
- queue: Fix potential use-after-free in log function
- registry: detect libgstreamer load from Android container and skip canonicalization
- streams: Add METADATA to the valid stream flags for serialization
- value: On buffer deserialization errors first unmap the buffer and then unref it
- gst-inspect-1.0: type for string caps fields should be 'string' not 'gchararray'
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
- Tests: Fix build with glib <= 2.67.2
gst-plugins-base
- allocators: round GstShmAllocator maxsize up to page size
- alsa: fix deadlock during shutdown
- audioaggregator: Add gst_audio_aggregator_has_current_output_buffer()
- audio/video base classes: add prepare_allocator virtual method
- audiovisualizer: copy metas to the output video buffer
- compositor: Fix caps negotiation for messy downstream caps
- exiftag: Use byte readers for parsing consistently
- glcolorbalance: Fix caps transformation in passthrough mode
- glcolorscale: fails to renegotiate when resolution changes, if it is a passthrough at some point
- glfilter: Fix regression from "fix not rangifying size caps when in passthrough"
- glfilter: fix not rangifying size caps when in passthrough
- videotimecode: Add timecode discont flag, bind it with pic_timing discontinuity in h264parse and drift resync in timecodestamper
- mikey: Allow disabling SRTP authentication via SP type 10
- opengl: Add new glalphacombine element for RGBA inputs
- codecutils: va, v4l2: Add shared H.264 level calculation helper and automatic level selection
- discoverer: add builder API for GstDiscovererInfo
- playsink: Ensure that pad-blocking waits for an in-progress reconfigure
- playsink: Fixes for reconfiguration to avoid deadlocks and out-of-lock accesses
- rtspsrc: add independent keepalive worker for non-live TCP-interleaved
- timecodestamper: Add scale property
- video: add missing classifications in scaler/colorspace/uploader/downloader elements
- video: Add Digitally Signed Content (DSC) buffer meta
- video: fix doc chunk for GST_VIDEO_DSC_VERIFICATION_META_INFO
- video-format: Add static assert to prevent list of formats mismatch
- videodecoder: send a new gap event with current position if the received gap event is cached
- videoencoder: Support adaptive presets with resolution-dependent properties
- wavparse: handle uppercase 'ID3 ' chunk fourcc for ReplayGain tags
- Pass a strong reference to the user_data to gst_pad_start_task()
- Use new gst_system_clock_new() which creates a new instance of the system clock
- Use gst_value_take_structure() where possible
Backported into 1.28:
- GstAudio/VideoDecoder: Fix different seqnum for eos event error
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
- Tag: Prevent ubsan and wrong fraction usage
- appsink, appsrc: Allow passing NULL callbacks
- appsink: Clear local sample storage when flushing
- appsrc: Uniformly handle EOS events being pushed
- appsrc: Fix dropped counting with bufferlist
- audio-resampler-neon: fix Thumb encoding and use Clang O2 calculation for strides
- audio-resampler-neon: fix accumulated stride
- audio-resampler-neon: re-increment address
- audio-resampler-neon: read array operand by hand
- audio-resampler-neon: read array operand by hand, part 2
- audioaggregator: Don't drop pending input buffers on sinkpads on srcpad caps changes
- audioaggregator: Don't reset samples_per_buffer unless sample rate / output-buffer-duration has changed
- audioaggregator: Don't try converting buffers on caps changes if impossible
- audioaggregator: Remove brittle conversion of in-progress buffers
- audioencoder: Remove fixed caps from srcpad
- audioresample: Fix extra samples produced at speech-to-silence transitions
- av1parse / typefind: Avoid signed 32 bit integer overflow and OOB reads when parsing LEB128 values
- decodebin2: fix leak of endpads list on shutdown while exposing
- discoverer: Lock the DISCO_LOCK whenever accessing the streams list
- discoverer: Take the DISCO_LOCK while parsing stream topology
- exiftag: Add missing bounds check and integer overflow protections in various places
- exiftag: Ignore invalid fractions with numerator/denominator G_MININT
- exiftag: Unmap buffer if parsing a rational number gives a zero denominator
- exiftag: Use a hashtable instead of a linked list for storing the pending tags
- gl: add GBRA swizzle support
- gl: egl: Set TRANSFER_NEED_DOWNLOAD flag
- glupload: fix memleak on failure path
- glwindow: Allow setting a NULL window handle
- id3v2: Add input validation and refactor id3v2_ununsync_data
- id3v2: Check valid frame sizes more
- id3v2: Don't modify const data and check for enough data when reading RVA2 tags
- id3v2: Don't unnecessarily assert on size==0 when unsyncing data
- libs: video: add precondition check on dma helpers
- opengl: Fix glcolorconvert vertical flip issue on crop
- pbutils: Add NULL check for tmpcaps parsing
- pbutils: Fix possible null dereferene when empty string is provided
- playback: Make sure to check for empty/any caps before getting the first structure
- rtcpbuffer: Add some missing bounds checks when parsing SDES
- sdp: keep level-asymmetry-allowed in the caps
- subparse / samiparse: Various robustness fixes and minor other fixes.
- subparse: Avoid NULL-pointer dereferences in mdvdsub parsing code
- subparse: Avoid zero and extreme fps when parsing mdvdsub subtitles
- subparse: Don't allow very small framerates for microdvd subtitles
- subparse: Fix integer overflow when calculating qttext timestamp
- subparse: Fix memory leakage for text colour and background colour
- subparse: Replace regex string matching / replacing with plain C string parsing
- uridecodebin3: Use PLAY_ITEMS_LOCK for URI-related getter
- uridecodebin3: deactivate input_item in erroneous ready->paused transition
- uridecodebin: Protect missing_plugin_errors list from concurrent access
- videodmabufpool: Break ref cycle between the pool and its thread
- videodmabufpool: Fix debug category
- vorbistag: Check for enough base64 data before trying to decode
- xmptag: Correctly initialize pointer to the end of the input array
- xmptag: Don't allocate -1 bytes of memory if there's only a single tag
- xmptag: Handle fractions with 0 denominator as invalid
gst-plugins-good
- aacparse: Overhaul PCE handling
- adaptivedemux2: Ensure we are preserving target time on non-snapping seeks
- cacasink, aasink: remove libcaca and libaa-based ASCII rendering plugins
- flv: Add support for enhanced-rtmp's support for av1
- matroskademux: Don't ignore encoded seek table
- matroskamux: HDMV PGS support (subpicture/x-pgs)
- matroskamux: TrueHD support (audio/x-true-hd)
- mpegaudioparse: Add channel mask to output caps
- pbutils, va, v4l2: Add shared H.264 level calculation helper and automatic level selection
- qtdemux: add 'max-atom-size' property
- qtdemux: add support for losslessly-compressed video
- rtspsrc: add independent keepalive worker for non-live TCP-interleaved
- rtspsrc: add mTLS file properties
- udpsrc: don't query downstream for Allocation / pool parameters
- v4l2: Fix empty name warning in dqbuf for M2M devices
- v4l2src: add v4l2_buffer timestamp to buffer
- v4l2videoenc: Add bitrate and gop-size GObject properties
- wavparse: handle uppercase 'ID3 ' chunk fourcc for ReplayGain tags
- Use gst_system_clock_new() to create a new instance of the system clock
- Pass a strong reference to the user_data to gst_pad_start_task()
Backported into 1.28:
- adaptivedemux/hlsdemux assertions / fixes
- applemedia: Require Xcode 12.4 for all builds
- audioinvert: fix float truncation in transform_float
- avidemux: Fix divide by zero if VPRP contains fields==0
- flacenc: Fix g_object_notify on loose-mid-side-stereo property
- flvdemux: Avoid assertions on corrupted streams
- flvmux: fix race condition on caps get and check
- gdkpixbufdec: remove Sun and Andrew raster formats
- isomp4: Fix memory leak when file is corrupted
- isomp4: qtdemux: Add bounds checks for ESDS descriptors
- qtdemux: push_buffer() should use global GstClockTime
- matroska-mux: Write ReferenceBlock for non-keyframe video in BlockGroups
- matroska: Fix wrong object type bug
- matroskademux: Add missing parenthesis when calculating bz2 buffer sizes
- matroskademux: Don't pass non-GstElement pointers to GST_ELEMENT_ERROR
- osxaudio: Fix stack overflow with >64ch audio devices
- qml6glsink: Fix redraw issues on buffer change
- qt6: remove an unneeded QOpenGLContext->makeCurrent()
- qt: Avoid parsing caps on every buffer (same fix for both qt5 and qt6)
- qtdemux: Add various integer overflow and bounds checks to uncompressed video handling
- qtdemux: Avoid a couple of integer overflows
- qtdemux: Check for minimum stride requirements and width/height constraints with uncompressed video
- qtdemux: Preserve Metas and Flags when doing row alignment
- qtdemux: Various fixes related to audio channel counts
- qtdemux: parse mastering luminance as u32 instead of u16
- rtph265depay: fix mem leak
- rtspsrc: Discard early data in ONVIF mode
- rtspsrc: Fix const-correctness issue around strchr() usage
- rtspsrc: include user-agent property in HTTP tunnel requests
- rtspsrc: mki is optional upon crypto update
- sbcparse: Add bounds checking to header parsing
- splitmuxsink: Fix some failure-to-shutdown race conditions
- splitmuxsink: Require buffers to have a valid PTS
- tests: mpegaudioparse: Fix raciness in the state change handling
- v4l2: Fix buffer leak on qbuf failure
- v4l2: object: Fix caps filtering in caps negotiation
- v4l2transform: release input buffers earlier
- wavpack: Various channel / channel-mask related fixes
- wavpackdec: Avoid integer overflow when calculating output buffer size and related fixes
- wavparse: Fix integer overflow when checking available buffer size for reading cues
- wavparse: Remove assertion about upstream file size
- wavparse: recover from invalid av_bps instead of failing
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
gst-plugins-bad
- adaptivedemux: Fix caps query
- alphacombine: support GLMemory, VulkanMemory and all applicable planar formats
- amfcodec: Fix a build error for gstamfbasefilter
- amfcodec: Fix a build error in amfencoder
- amfcodec: add super resolution hq-scaler component
- amfcodec: add High quality preset values to h264 and h265 encoders
- analytics: add semantic tag getter to GstAnalyticsGroupMtd
- analytics: move semantic tag from GstAnalyticsGroupMtd to generic GstAnalyticsMtd
- androidmedia: Add aassetsrc element for Android assets
- androidmedia: Read video codec details from VideoCapabilities
- applemedia: Add stable unique-id device selection
- applemedia: avf sources now honour downstream GstVideoMeta requests
- applemedia: add iosurface helper library and introduce memory:IOSurface
- av1parse: support T.35 UK country code (0xB4) for LCEVC detection
- avfvideosrc: Improve concurrent usage detection
- closedcaption: add h266seiinserter
- codecparser: expose publicly H265 bitwriter API
- codecparsers: h265bitwriter: implement gst_h265_bit_writer_filler()
- codecseiinserter: Add do-timestamp property
- cuda-appsrc: Fix missing sentinel in nvcodec example
- cuda: check CuMemFree/CuMemFreeAsync return values
- cuda: fix CONVET typo in format macro names
- cuda: fix typos in gstcudacontext
- d3d12: Add most-detailed-mip property
- d3d12: Add support for VP9 with alpha
- d3d12: Implement fast-path mipmap texture generation
- d3d12converter: Add src-roi properties for mipmap level selection
- errorignore: Add ignore-flushing property
- errorignore: post warning on first flow conversion
- examples: Fix nvcodec example build on Windows
- facedetector: Support model without built-in post-processing
- videotimecode: Add timecode discont flag, bind it with pic_timing discontinuity in h264parse and drift resync in timecodestamper
- h26456parse: Trigger caps update when HDR SEI expires
- h264parse: Ignore bitstream restrictions when it has out of bound values
- h266parse: add support to both read and parse Digitally Signed Content (DSC) SEI messages, and attach their metas to the buffers
- hlssink2: Add enable_program_date_time property
- mpegtsdemux: Add stats to mpegtsbase
- mpegtsmux: Accumulate audio packets for larger PES and a couple of small fixes
- mpegtsmux: Remove streamheader from caps
- mpegtssection: Write serializer for mpegts_sections
- msdkav1enc: Add intrabc and palette for scc encode
- nvcodec: add example for pushing cuda runtime api frames into appsrc
- onnxinference: Accept ranges with only one entry
- onnxinference: Add unit tests
- onnxinference: fix typo
- openjpeg: Add support for high bit depth formats
- openjpeg, jpeg200parse: Fix JPEG 2K for YUV input
- va, v4l2: use shared H.264 level calculation helper and automatic level selection
- play: Fix GstStream leaks
- shm: fix shmpipe lockup due to wrong buffer ack and fallback allocator
- shmsink: fix hang
- srtp: mikey: Allow disabling SRTP authentication via SP type 10
- ssdtensordecoder: Allow fixed and variable tensor dimensions
- tensordecoder: fix tensordecodebin classification
- tensordecoders: Add YOLO26 detection decoder
- tensordecoders: yolo-seg: fix mask stride metadata for ROI masks
- tfliteinference tests: Add missing model files
- tfliteinference: Accept ranges with one entry
- tfliteinference: Add GRAY8 input support
- tfliteinference: Add XNNPACK support
- tfliteinference: Add support for external delegate
- tfliteinference: Drop video meta API to avoid strided data
- tfliteinference: Fix caps negotiation with upstream element
- tfliteinference: fix compilation
- timecodestamper: Add scale property
- timecodestamper: Ignore upstream timecodes from corrupted frames
- tsdemux: define IGNORE_PCR_THRESHOLD constant, raise to 1000ms
- tsdemux: Add ignore-continuity-counter property for HLS
- tsmux: Don't write HDMV descriptor for H264 files
- ultralightfacedetectortensordec: Add caps for without-postproc
- va: Document CPU access to decoded frames
- va: add background-color property for vacompositor and vapostproc
- va: misc fixes for vaav1enc and vavp9enc
- validate: Reindent all validatetest files
- video: add missing classifications in scaler/colorspace/uploader/downloader elements
- videoencoder: Support adaptive presets with resolution-dependent properties
- videoparsers: Use parsed resolution instead of upstream one
- vkh264enc: enable a simple unit test
- vmaf: change "threads" property default to 0 for automatic number of CPUs determination
- vulkan: Assert encode query result offset is zero per spec
- vulkan: caps leaks
- vulkan: fix encode feedback query handling
- vulkan: fix planar VulkanImage download bookkeeping
- vulkan: h264encoder: base class miscelaneous improvements
- vulkan: merge plugin extension requirements into default instance/device setup
- vulkan: opt-in multi-planar YUV VkImage for image buffer pool
- vulkan: remove propose_allocation override in GstVulkanVideoFilter
- vulkan: requested-extensions - use-after-free on merged_req
- vulkanh264{enc,dec}: add missing profiles constrained-high and progressive-high
- Vulkan H.264 encoder base class updates
- wayland: Add sync_store to prevent callback errors
- wayland: Rework gstwayland render path
- wayland: fix crash due to double-destroy wl_callback
- wayland: handle padded buffers in wl_shm buffer creation
- webrtcbin: Drop late received data on bundled EOS branches
- Use gst_system_clock_new() to create a new instance of the system clock
- Pass a strong reference to the user_data to gst_pad_start_task()
Backported into 1.28:
- ahcsrc: Register exposure-mode property for GstPhotography interface
- ajasink: Correctly set reference source
- amc: Don't try printing NULL caps
- amcvideodec: Don't keep crop-rectangle uninitialized if not specified
- amcvideodec: Fix double-free happening when codec gets reconfigured
- analytics: fix meta transform function for copy cases
- android: trim tutorials by using fewer plugins, ensure that an AMC video decoder is always found, fix decoding of constrained-baseline files
- androidmedia: Add various new codec mime / profile mappings
- androidmedia: Don't print error logs if downstream returns flushing / EOS
- androidmedia: Fix typo in error message
- androidmedia: Free element name after use for logging
- androidmedia: support decoding flac
- applemedia: Fix MoltenVK usage with vtdec-imported textures
- applemedia: Fix test instability and nofork issues
- applemedia: Require Xcode 12.4 for all builds
- applemedia: fix planar CoreVideo buffer plane offsets
- av1parse / typefind: Avoid signed 32 bit integer overflow and OOB reads when parsing LEB128 values
- av1parse: Fix null pointer deference
- av1parser: Fix bytes/bits confusion when parsing tile data size
- avfassetsrc: Now supports vp9/av1, and able to read incompletely supported files
- avtp: Correct ptime generation from avtp timestamp
- bpmdetect: Fix calculation of number of samples for >1 channels
- camerabin: Fix caps negotiation when starting video capture
- cudaconvert: fix performance regression caused by double precision floating point constants
- d3d12decoder: Fix decoding on Qualcomm GPUs
- decklink: Fix various refcount issues and related leaks
- h263parse: Fix wrong ratio masking
- h263parse: Missing handling of reserved invalid EPAR_D value
- h264parse: Avoid NULL pointer dereferences when freeing partially parsed SPS/MVC data
- h264parse: Check for enough slice header data being available
- h264parse, h265parse: Unset GValue in every code path
- h265decoder: Fix HEVC with alpha decoding
- h265parser: use sub-layer 0 CPB count in buffering_period SEI loops
- h266parser: Add missing clearing function for H266 SEI message
- h266parser: Avoid integer overflow when parsing profile / tier / level
- h266parser: Avoid out-of-bounds write when parsing PPS tile slices
- h266parser: Check aspect ratio index against lookup table length
- h266parser: Use long bit skipping function for potentially large values
- interlace: Revert "Drop framerate from query caps of sinkpad"
- jp2kdecimator: Avoid integer overflows and divisions by zero on invalid tile configurations
- librfb: Validate framebuffer update rectangles against the framebuffer size
- mpegdemux: Add various bounds checks related to PES header parsing
- mpegtsdemux: Various fixes
- mpegtsdemux: Improve PTS rollover handling in ignore-pcr mode
- mpegtspacketizer: Avoid potential overflow
- mpegtspacketizer: Do not seek before the first PCR
- mpegtsmux: Always assign PTS to output buffers in CBR mode (regression fix)
- mse: Also disable the library if the option is disabled
- mxf: Fix multiple writing / parsing issues when handling VANC packets
- mxfdemux: Fix essence track offsets array population
- mxfdemux: Fix remaining offsets index entry insertion call site
- mxfdemux: Fix reverse temporal offsets array upper bounds check
- mxfdemux: Use unsigned integers in more places and don't truncate 64 bit integers
- mxfdemux: hardening
- mxfmux: aes-bwf: Use correct size when serializing user data / channel status mode
- netsim: Fix racy test failures
- nvcodec: Fix missing adapter-luid when loading decoders
- pcapparse: Add missing bounds checks to ensure packets are large enough
- pngparse: Fix Use-after-free bug
- pnmdec: Avoid overflows when calculating frame sizes
- qml6d3d11sink: Clear texture on Paused-to-Ready transition
- qroverlay: Fix use after free bug
- qt6d3d11: fix null check in SetForceAspectRatio()
- rtmp2: Remove socket timeout after handshake completes
- rtpsink: fix mutex not unlocked on invalid URI in set_property
- sctp: Set number of outgoing & incoming streams to the same value
- shm: fix shmsink exit code 1 on clean shutdown
- svtav1enc: Scale MDCV and CLL to SVT-AV1's expected units
- tfliteinference: Add unit tests
- tsdemux: Fix parsing of PES ESCR and following PES header fields
- tsdemux: Fix segfault when trying to handle SCTE-35 with incorrect program specified
- va: surfacecopy: get surface's image in
gst_va_surface_copy - va: do not post error message when push fails
- va: drm: Fix fd leak and return type in create_va_display
- vajpegdecoder: Validate that enough data is available for the current JPEG segment
- vaoverlaycompositor: Fix textoverlay transparency
- vkswapper/vksink: Don't advertise unsupported formats
- vkupload/vkdownload: Fix possible corrupted image due to mismatched stride/padding
- vmncdec: Set cursormask to NULL to prevent double free
- vmncdec: Avoid integer overflows when rectangle positions and sizes
- vtdec: Avoid locking up during a decoder reset
- vtdec: Do not hold the stream lock when pushing out frames
- vtdec: Prefer outputting VulkanImage instead of sysmem, fix some leaks, ensure vulkansink provides a window
- vtdec: Support decoding HEVC+alpha
- vtdec: fix deadlock when restarting pipeline
- vtdec: handle decoder error status for iOS, vtenc: restart if VTCompressionSessionCompleteFrames fails
- vulkan: Fix tests crashing on macOS due to fork() usage
- vulkanupload: Don't reallocate the pool when the framerate changes
- vulkanvp9dec: Fix case in device-specific factory name
- wasapi2: Don't reset process loopback capture client
- wasapi2: Log target device information
- wasapi2sink: Ignore device errors from default device
- waylandsink: Properly reset the tag orientation
- waylandsink: fix waylandsink crash when call window flush
- webrtc: nice: Fix leak of nice thread
- webrtc: take ownership of src_bin and sink_bin and don't leak error message
- wlwindow: fix viewport source outside buffer when play resolution change stream
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
- Tests: Fix build with glib <= 2.67.2
- meson: fix building -bad tests with disabled tflite, onnx and mse
- Fix a couple of const correctness bugs around strchr() usage
gst-plugins-ugly
- mpeg2dec: remove plugin
- x264enc: Add adaptive bitrate preset for YouTube
- x264enc: Refactor SEI handling
- Pass a strong reference to the user_data to gst_pad_start_task()
Backported into 1.28:
- mpegpsdemux: Release stream lock when seeking fails
- realmedia: Fixes for various out-of-bounds reads
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
GStreamer Rust plugins
- Add sofalizer element
- Add viuersink - a video sink that plays video in your terminal
- colorlut: Allow any keyword line before data table
- image: add imagersoverlay element
- isobmff: add support for lossless compression
- pcap_writer: Mark target-factory and pad-path props as construct
- quinn: Do not make source elements live by default
- quinn: Miscellaneous clean ups
- rsaudiofx: Add agingradio plugin
- rtp2: Add MPEG-1/2 video RTP payloader/depayloader
- rtp2: Add MPEG-1 Audio RTP payloader/depayloader
- rtp2: Add raw video RTP payloader/depayloader
- rtpbin2: By default use the same CNAME for all sessions created by the same rtprecv/rtpsend
- rtpbin2: Do NTP timestamp calculations with integers instead of floating point numbers
- rtpbin2: jitterbuffer: move deadline calculation where it's needed
- rtpbin2: Remove BYE / timeout SSRCs from sync context and add a signal for timeout SSRCs
- rtpbin2/rtpsend: calculate NTP capture time for packets
- rtpbin2/time: handle NTP rollovers
- speech elements: implement support for non-synchronized output
- tracers: add Rust tracing ecosystem integration
- udpsrc2: override prepare_allocator
- udpsrc2: set socket in NULL to READY
- validate: dump failing frame to PNG on QR code check failure
- video: Add D3D12-based color LUT element
- webrtcbin2: Add new scalable WebRTC bin with fewer threads
- webrtcbin2: require rice-proto for webrtcbin2 build
- webrtcbin2/example: wait for caps event before creating answer
- webrtcrecv: add threadshare-mode
- webrtcsend: add sink pad early-data-mode property
- webrtsend: move early-data-mode property to webrtcsend
- webrtc/signalling: make protocol extendable
- webrtcsink: add v4l2h264enc (Raspberry Pi) encoder support
- webrtcsink: don't forward duplicate timecode metas
- webrtcsink: Unreal Engine PixelStreaming Signalling
- Build: Don't build utils/validate by default
Backported into 0.15:
- fallbacksrc: Add fallback-source and enable-dummy properties
- fmp4mux: Fix draining in chunk mode after partial GOPs were drained
- gopbuffer: add support for H.266/VVC
- isobmff: Change caps updates in test to not be delayed
- isobmff/fmp4mux: Various fixes for splitting at fragment boundaries
- onvifmeta2relatiometa: fix inversion between width and height
- png: implement image repacking when buffer is padded
- quinn: Disable tests
- quinnwtsrc/sink: Fix session close
- Rtp2Session: add ParamSpec for property stats
- rtpbin2: examples: fix audio resyncs, stream offsets and frame drops
- rtpbin2: improve logs
- rtpbin2: jitterbuffer: fix deadline for re-ordered packets
- rtpbin2: more log improvements
- rtprecv: extend jitter accounted for
- rtprecv: fix buffer list split handling
- rtprecv: fix race conditions handling rapid FlushStart / FlushStop
- rtprecv: JitterBufferStream: avoid polling JitterBuffer when possible
- rtspsrc2: Add support for SET_PARAMETER and GET_PARAMETER using signals
- rtspsrc2: Add support for SRTP
- rtspsrc2: Add TLS support
- rtspsrc2: handle parse errors with tcp interleaved rtsp more gracefully
- rtspsrc2: Implement support for HTTP tunnelling
- rtspsrc2: Implement support for keep alive
- rtspsrc2: Implement support for streams
- rtspsrc2: Include user-agent property in HTTP tunnel requests
- rtspsrc2: Support latency configuration property
- rtspsrc2: Support TLS validation flags for server certificate
- rtspsrc2: Update README with implemented features
- rtspsrc2: Update sha2 and md-5 dependencies
- st2038combiner: only forward video pad segment
- Switch from
std::os::rawtostd::ffifor C types - threadshare: add leaky mode to dataqueue-based elements
- threadshare: add ts-clocksync (backported)
- tracers: feature gate remaining PluginAPIFlags makers behind doc
- transcriberbin: ignore flow errors from transcription branch
- webrtc: set level in negotiated caps only if level asymmetry not allowed
- webrtcsink: actually allow custom signaller to be set
- webrtcsink: Adding imx8mp vpuenc_hevc support for 265
- webrtcsink: handle payloader timestamp-offset prop type variants
- webrtcsink: read rav1enc bitrate as i32
- webrtcsink: add support for h264 profile constrained-high
- webrtcsink: allow change of interlace-mode in the input caps
- webrtcsink: allow renegotiation if caps is missing interlace-mode
- webrtcsink: fix negotiation for nvh264enc in the GLMemory case
- webrtc: tests: run signalling server with unique port number
- whisper: fix compiling on ARM
- Clippy: address clippy 1.95.0 suggestions
- Clippy: Fix new 1.95 clippy warnings
- Update dependencies
- Update dependencies
- Update dependencies
- Update dependencies
- Add script to convert git sourced dependencies to crates.io packages
- gst-plugin-version-helper: Relax version requirements and update to 0.8.4
gst-libav
- avcodecmap: Take the dual mono case into account
- avcodecmap: Declare undeclared loop iterator variable
- Pass a strong reference to the user_data to gst_pad_start_task()
Backported into 1.28:
- avdemux: Always free AVIOContext and open failure and don't dereference NULL AVFormatContext
- avprotocol: Don't free GstFFMpegPipe when closing the AVIOContext
- avviddec: Refcount codec frame associated with video frame
- Require C std gnu11 or c11, remove custom 'restrict' definition
gst-rtsp-server
Backported into 1.28:
- RTSPMediaFactory: make create_pipeline introspectable
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
- gst: Fix a couple of const correctness bugs around strchr() usage
gstreamer-sharp
gst-python
- analytics: add semantic tag getter to GstAnalyticsGroupMtd
- analytics: move semantic tag from GstAnalyticsGroupMtd to generic GstAnalyticsMtd
gst-editing-services
- ges: add internal locking to enable multi-threaded GES usage
- ges: auto-plug raw-video converters from the registry based on compositor memory family
- ges: make ges:+clip URIs work out of the box
- nle: ghostpad: Replace gst_pad_get_element_private with NleGhostPad subclass
- validate: Reindent all validatetest files
- validate: flow: compare expectations live as lines are produced
- test: updat efor compositor: Fix caps negotiation for messy downstream caps
Backported into 1.28:
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
- ges: fix use-after-free in GESUriSource decodebin callbacks
- ges: fix use-after-free in structured-interface and asset cache
- gst: Fix a couple of const correctness bugs around strchr() usage
gst-devtools, gst-validate + gst-integration-testsuites
- dots-viewer: General enhancement of the web app
- dots-viewer: Update dependencies
- modelinfo-helper: Use shape_signature for tflite when available
- validateflow: Compare expectations live as lines are produced
- validateflow: Wait for all async calls when stopping
- validate: Reindent all validatetest files
- Use gst_value_take_structure() where possible
Backported into 1.28:
- validate: use relative paths in the printed validate command, fix flaky tests due to non-deterministic pad task unref
- Require C std gnu11 or c11, remove custom 'restrict' definition, fixing build with Qt 6.11
gstreamer-docs
- docs: Update iOS tutorials to use the new .xcframework package, add tvOS target
- documentation: misc improvements made while building on Windows
Backported into 1.28:
Development build environment
- Update wraps: expat, flac, gdk-pixbuf, jpeg-turbo, png, srtp, xml, opus, proxy-intl, soundtouch, sqlite3, theora, zlib, wayland-protocols, drm, glib-networking
- Move many wrap files from wrap-git to wrap-file, ban new ones with a check in pre-commit
Backported into 1.28:
Cerbero build tool and packaging changes in 1.29.2
- Add ccache support for MSVC
- cmake: support LibraryType.BOTH under MSVC on all remaining recipes
- ffmpeg: update to 8.1.2
- gst-plugins-bad: Package libgstiosurface on Apple targets
- gst-plugins-good: update for removal of cacasink and aasink
- gst-plugins-rs.recipe: Add colorlut
- gst-plugins-rs: also build webrtcbin2 plugin
- gst-plugins-rs: fix webrtcbin2 build for MinGW
- openssl: Add parallel build support for MSVC with Jom
- pyproject.toml: fix version after 1.29.1 release
- tinyalsa: switch to AOSP source
- Cannot link rust plugins with Xcode 26
- docs: Copy AI policy from the monorepo
Backported into 1.28:
- Adjust CI for xcframework iOS tutorials
- Fixes for cross-compiling to android on macOS and consuming the built binaries
- Update to Rust 1.95 / rustup 1.29.0 / cargo-c 0.10.22
- Update to Rust 1.96 / cargo-c 0.10.23
- bindgen-cli: Update to 0.72.1
- bundlesource: Output xz tarballs instead of gzip, fix pkg-config-dist packaging
- cerbero: Fix entering into the build environment, add explicit non-interactive mode
- cerbero: Fix invalid target_subsystem when targeting Android on macOS
- cerbero: Read recipe files as UTF-8
- cerbero: fixes for background mode on macOS
- cerbero: support differently named Xcode for iOS and tvOS builds
- cerbero: Reenable deps cache for gst-libav and pkg-config
- cerbero: Use capi command for cargo-c
- cmake: Fix destination for the Java plugin initializers
- glib-networking: Backport various OpenSSL backend fixes
- gst-plugins-rs: Extend melding to Darwin platforms
- gst-plugins-rs: fix MSVC link errors for cargo binary consumers
- inno: allow setting User or Admin-level install via command line
- inno: do not automatically create envvars or Registry keys with portable mode enabled
- ios: Execute postinstall template copy only with user level installs
- ios: fix syntax error in postinstall script
- libffi.recipe: Update to latest 3.2.9999.5 release, update proxy-libintl to 0.5
- libpng: update to 1.6.56
- libproxy: add backend, gio module and add to gstreamer-1.0-net.package
- m4: Update to 1.4.21
- osx: Add uninstaller script via osascript
- osxrelocator: relocate absolute paths to Python.framework
- pkg-config.recipe: Never enable --define-prefix
- pkg-config.recipe: Fix pcfiledir substitution with whitespace
- soundtouch: update to 2.4.1
- source: serialize tarball extracts that share an unpack path
- srt: update to 1.5.5
- vvdec: upgrade to 3.1.0
- vvdev: silence -Werror=nontrivial-memcall on macos and friends
- wheel: rename and placehold the msvc runtime wheel
Contributors to 1.29.2
Albert Sjölund, Alicia Boya García, Anders Hellerup Madsen, Andreas Frisch, Andrew Yooeun Chun, Arthur Chan, Azat Nurgaliev, Batalev Ilya, Benoît Mauduit, Cameron O'Neal, Carlos Falgueras García, Carlos Bentzen, Christoph Seitz, Cole Richardson, Corentin Noël, Daniel Morin, David Maseda Neira, dec05eba, Dennis Han, Diego Nieto, Dino Spiller, Dominique Leroux, Edward Hervey, Elliot Chen, Emil Ljungdahl, Emmanuel Madrigal, Fabian Orccon, Fabien Danieau, François Laignel, Felix Gong, Frédéric Chanal, Gordon Smith, Guillaume Desmottes, Haihua Hu, Havard Graff, He Junyan, Hou Qi, Ilya Batalev, Jakub Adam, Jan Alexander Steffens (heftig), Jan Schmidt, Jeehyun Lee, Jeongmin Kwak, Jeremy Whiting, Jerome Colle, Jochen Henneberg, Johan Sternerup, Jordan Petridis, László Károlyi, Leonardo Salvatore, L. E. Segovia, Marcus Hanestad, Mathieu Duponchelle, Matthew Waters, Michael Olbrich, Michiel Westerbeek, MilkClouds, Monty C, Niclas Götting, Nicolas Dufresne, Nirbheek Chauhan, nitroxis, Ognyan Tonchev, Olivier Crête, Oscar Carter, Oskar Fiedot, Pablo García, Pavel Guzenfeld, Per Enstedt, Philippe Normand, Philipp Wallrich, Pieter Willem Jordaan, Piotr Brzeziński, Qian Hu (胡骞), Rares Branici, Robert Mader, Rolf Eike Beer, romain, RSWilli, Ruben Gonzalez, Sanchayan Maity, Santiago Carot-Nemesio, Sebastian Dröge, Seungha Yang, Seungmin Lee, Shengqi Yu, Shigeharu Kamiya, Stéphane Cerveau, Taruntej Kanakamalla, Thibault Saunier, Thomas Devoogdt, Tim-Philipp Müller, Tjitte, Tobias Koenig, Tomas Granath, Tomasz Andrzejak, Tomasz Bujewski, Tulio Beloqui, Tushar Darote, Vadym Markov, Víctor Manuel Jáquez Leal, Vincent Beng Keat Cheah, Vivia Nikolaidou, Walisiewicz, Xabier Rodriguez Calvar, Xavier Claessens, Zeeshan Ali Khan,
... and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all!
List of merge requests and issues fixed in 1.29.2
Schedule for 1.30
Our next major feature release will be 1.30, and 1.29.x is the unstable
development series leading up to the stable 1.30 release. The development
of 1.29/1.30 will happen in the git main branch of the GStreamer mono
repository.
The schedule for 1.30 is yet to be decided, but we're targetting Q4/2026.
1.30 will be backwards-compatible to the stable 1.28, 1.26, 1.24, 1.22, 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
These release notes have been prepared by Tim-Philipp Müller.
License: CC BY-SA 4.0