GStreamer 1.27.x Release Notes

GStreamer 1.27.x is an API/ABI-unstable development series leading up to the stable 1.28 series.

GStreamer 1.28.0 has not been released yet. It will be released in late 2025.

The current stable series is 1.26.

The latest development release towards the upcoming 1.28 stable series is 1.27.2 and was released on 07 September 2025.

1.27.2

The second API/ABI-unstable 1.27.x development snapshot release (1.27.2) was released on 07 September 2025.

Any newly-added API in the 1.27.x series may still change or be removed again before 1.28 and should be considered unstable
until 1.28 is released.

The 1.27.x release series is for testing and development purposes, and distros should probably not package it.

Highlighted changes in 1.27.2

-   Add more 10bit RGB formats in GStreamer Video, OpenGL and Wayland, as well as in deinterlace and gdkpixbufoverlay
-   analytics: new analytics combiner and splitter elements plus batch meta to batch buffers from one or more streams
-   analyticsoverlay: Add expire-overlay property
-   onnx: Add Verisilicon provider support
-   awstranscriber2: add property for setting show_speaker_labels
-   awstranslate: expose property for turning brevity on
-   speechmatics: expose mask-profanities property
-   textaccumulate: new element for speech synthesis or translation preprocessing
-   tttocea608: expose speaker-prefix property
-   cea708mux: expose “discarded-services” property on sink pads
-   cuda crop meta support
-   hlssink3, hlscmafsink: Support the use of a single media file
-   s302mparse: Add new S302M audio parser
-   webrtc: add WHEP client signaller; sdp and stats-related improvements
-   threadshare: many improvements to the various elements, plus examples and a new benchmark program; relicense to MPL-2.0
-   gtk4paintablesink: Add YCbCr memory texture formats and improve color-state fallbacks
-   OpenGL: Add support for the NV24 pixel format; support changing caps and get_gl_context() in glbasesrc
-   rtspsrc: Send RTSP keepalives also in TCP/interleaved modes
-   nvencoder: interlaced video handling improvements
-   vaav1enc: Enable intrablock copy and palette mode
-   videopool: support parsing dma_drm caps
-   Vulkan VP9 video decode support and many other video encode and decode improvements
-   waylandsink: Parse and set the HDR10 metadata and other color management improvements
-   LCEVC: Add autoplugging decoding support for LCEVC H265 and H266 video streams and LCEVC H.265 encoder
-   GstMiniObject: Add missing take() and steal() functions and convert is_writable() and make_writable() macros to inline
    functions
-   alsa: Improve PCM sink enumeration
-   d3d12: various d3d12swapchainsink enhancements and bug fixes; fisheye image dewarping support
-   wasapi2: add support for dynamic device switching, exclusive mode and format negotiation; device provider and latency
    enhancements
-   windows: Disable all audio device providers except wasapi2
-   dots-viewer: Improve dot file generation and interactivity
-   gst-editing-services: Make framepositioner zorder controllable and expose it
-   Various introspection fixes and bindings updates
-   Cerbero: Update to Android API level 24; add config for number of cargo jobs; ship unixfd plugin
-   Cerbero: Implement library melding for smaller binary sizes of Rust plugins
-   Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements

Possibly breaking behavioural changes

-   Previously it was guaranteed that there is only ever up to one GstTensorMeta per buffer. This is no longer true and code
    working with GstTensorMeta must be able to handle multiple GstTensorMeta now (after this Merge Request).

gstreamer

-   Remove outdated documentation files
-   aggregator: implement start-time-selection=now
-   baseparse: Try harder to fixate caps based on upstream in default negotiation (backported into 1.26)
-   baseparse: don’t clear most sticky events after a FLUSH_STOP event (backported into 1.26)
-   buffer: Add gst_buffer_take and gst_buffer_steal
-   buffer: Add test for _memset() & _memcmp() with various offsets
-   buffer: Find initial memory block without unnecessary mapping
-   buffer: Fix gst_buffer_memcmp() / gst_buffer_memset() using wrong memory index
-   caps: fix nested caps
-   caps: Mark out parameter of gst_structure_get_caps() as transfer none
-   debug: Category init should happen in class_init when possible
-   element: Deprecate gst_element_state_*() API and provide replacement
-   meta: Add GstMetaFactory to dynamically register GstMetaInfo
-   miniobjects: Add missing _take() and _steal() functions
-   miniobjects: Convert is_writable() / make_writable() macros to inline functions
-   value: Consider NULL caps in array a fixed value
-   Make sure to zero-initialize the GValue before G_VALUE_COLLECT_INIT (backported into 1.26)
-   introspection: Disable miniobject inline functions for gobject-introspection for non-subprojects too (backported into 1.26)
-   Various introspection fixes
-   ptp: Fix a new Rust 1.89 compiler warning on Windows (backported into 1.26)
-   ptp: Fix new compiler warning with Rust 1.89 (backported into 1.26)
-   Build: Disable C5287 warning on MSVC (backported into 1.26)
-   gst-launch-1.0: clean up unused local variable

gst-plugins-base

-   Add more 10bit RGB formats in GStreamer Video, OpenGL and Wayland
-   alsa, oss: Check for element types when reconfiguring
-   alsa: Improve PCM sink enumeration
-   audioconvert: Fix regression when using a mix matrix (backported into 1.26)
-   debug: Category init should happen in class_init when possible
-   decodebin3: Don’t error on an incoming ONVIF metadata stream (backported into 1.26)
-   decodebin3: Update stream tags (backported into 1.26)
-   device-monitor: Use gst_print instead of g_print (backported into 1.26)
-   gl: Add support for the NV24 pixel format
-   gl: detect the correct context_api on MacOS
-   gl/basesrc: support changing caps and add get_gl_context()
-   glcolorconvert:: Revert “should copy metadatas from the incoming buffer”
-   gloverlay: Two small fixes (backported into 1.26)
-   glupload: fix the issue of printing critical log for some cases
-   gstreamer: Misc memory cleanups (backported into 1.26)
-   rtpbasedepayload: Avoid potential use-after free (backported into 1.26)
-   rtspconnection: Add get_url and get_ip return value annotation (backported into 1.26)
-   uridecodebin3: Add missing locking and NULL checks when adding URIs to messages (backported into 1.26)
-   video: dma-drm: Add P016_LE format map (backported into 1.26)
-   video: pool: Fix pool size configuration for DMA DRM
-   videometa: Fix valgrind warning when deserializing video meta (backported into 1.26)
-   videopool: support parsing dma_drm caps
-   videorate: don’t hold the reference to the buffer in drop-only mode (backported into 1.26)
-   videorate: Fix several videorate issues in ges when using time control (setting the rate property)
-   Remove outdated documentation files
-   gst-device-monitor-1.0: Fix device monitor criticals, and also accept utf8 in launch lines (backported into 1.26)
-   gst-device-monitor-1.0: Add shell quoting for launch lines (backported into 1.26)
-   gst-device-monitor-1.0: Add quoting for powershell and cmd (backported into 1.26)

gst-plugins-good

-   deinterlace, gdkpixbufoverlay: Add more 10bit RGB formats
-   adaptivedemux2: fix crash due to log (backported into 1.26)
-   alsa, oss: Check for element types when reconfiguring
-   hlsdemux2: Fix parsing of byterange and init map directives (backported into 1.26)
-   rtspsrc: Send RTSP keepalives in TCP/interleaved modes
-   soup: Disable range requests when talking to Python’s http.server (backported into 1.26)
-   v4l2: Fix memory leak for dynamic resolution change (backported into 1.26)
-   v4l2videodec: Add protection when acquiring drm caps
-   v4l2videodec: Need to replace acquired_caps on set_format success (backported into 1.26)
-   windows: Disable all audio device providers except wasapi2 (directsoundsink deviceprovider)
-   Debug category init should happen in class_init when possible
-   Remove outdated documentation files

gst-plugins-bad

-   Add autoplugging decoding support for LCEVC H265 and H266 video streams
-   Add more 10bit RGB formats in GStreamer Video, OpenGL and Wayland
-   analytics: Add GstAnalyticsBatchMeta for batches of buffers from one or more streams
-   analytics: Add unit test for copying GstAnalyticsRelationMeta
-   analytics: Include new batch meta in the single-include header
-   analytics: always add GstTensorMeta (backported into 1.26)
-   analyticsmeta: Remove incorrect check
-   analyticsoverlay: Add expire-overlay property
-   av1parse: Set CLL and MDI caps
-   av1parse: Set mastering-display-info into the final caps
-   av1parser: Don’t error out on “currently” undefined seq-level indices (backported into 1.26)
-   avtp: Use the DTS as the AVTP base time … and other small improvements
-   avtp: crf: Setup socket during state change to ensure we handle failure (backported into 1.26)
-   cccombiner: Crash fixes (backported into 1.26)
-   cuda: Add support for crop meta
-   curlsmtpsink: adapt to date formatting issue (backported into 1.26)
-   d3d12: Add support for dewarping fisheye images
-   d3d12screencapturedevice: Avoid false device removal on monitor reconfiguration (backported into 1.26)
-   d3d12swapchainsink: Add last-rendered-sample action signal
-   d3d12swapchainsink: Fix force-aspect-ratio change in playing state
-   d3d12swapchainsink: Update uv-remap signal to support background color
-   decklinkvideosrc: fix decklinkvideosrc becomes unrecoverable if it fails to start streaming (backported into 1.26)
-   debug: Category init should happen in class_init when possible
-   dtls: Use ECDSA private key for default certificate
-   gstreamer: Misc memory cleanups (backported into 1.26)
-   h265parse: Parse and attach LCEVC metadata to buffers if present
-   h266parse: Parse SEI registered user data and attach LCEVC metadata to buffers if present
-   hlsdemux2: Fix parsing of byterange and init map directives (backported into 1.26)
-   inter: Move intertest example to tests/examples/inter
-   lcevcdec improvements
-   lcevcdec: Set LCEVCdec min version to 4.0.1 and fix build
-   lcevcdecodebin: Update the base decoder when setting base-decoder property
-   lcevcencoder: Add lcevch265enc element
-   lcevcencoder: Add ldconfig and install steps to the readme
-   meson: d3d12: Add support for MinGW DirectXMath package (backported into 1.26)
-   mpegtsmux: Caps event fails with stream type change error
-   nvcodec: Add emit-frame-stats signal
-   nvdsdewarp: Output resize support and performance optimizations
-   nvencoder: Always allow interlaced stream
-   objectdetectionoverlay: Print tracking id
-   onnx: Add Verisilicon provider
-   rtmp2src: various fixes to make it play back AWS medialive streams (backported into 1.26)
-   ssdtensordecoder: Use tensor ids from the registry
-   tensor decoders: Use utility function and other cleanups
-   tensor: Clarify meaning of the dimensions array in the docs
-   tensordecoder: rename facedetector element
-   tensormeta: Fix the api to check the tensor type
-   tests: add vulkan av1 encode support
-   tests: fix queues for vulkan h26x encoders
-   tests: vkh26xenc: use vkvideoencodebase
-   tflite: Add support for VSI delegate
-   transcoder: Various fixes
-   unixfd: fix and improve the example pipelines in the documentation
-   va: Re-negotiate after FLUSH (backported into 1.26)
-   vaXXXenc: calculate latency with corrected framerate (backported into 1.26)
-   vaXXXenc: fix potential race condition (backported into 1.26)
-   vaav1enc: Enable intrablock copy and palette mode
-   vkdownload: implement decide_allocation DownloadMethod
-   vkimagebufferpool: don’t use independent profile flag for some usage
-   vkimagebufferpool: fix regression from !9492
-   vkimagebufferpool: support video profile independent images
-   vkphysicaldevice: enable sampler ycbcr conversion, synchronization2 and timeline semaphore features (backported into 1.26)
-   vkphysicaldevice: silence validation for features
-   vkupload: fix the refactored frame copy
-   vkvideoutils-private: make it private
-   vkvideoutils: fix typo in vp9 profile map
-   vtenc: Fix negotiation failure with profile=main-422-10 (backported into 1.26)
-   Vulkan Video: VP9 decode support
-   vulkan: Refactor common library in the video parts
-   vulkan: enable video maintenance2 for inline session parameters
-   vulkan: fix validation layer complains
-   vulkan: fixes previous mistakes
-   vulkan: video encode and decoder cleanups
-   vulkanh24xdec: couple of fixes (backported into 1.26)
-   vulkanh264enc: calculate latency with corrected framerate
-   vulkanh26xdec: fix discont state handling (backported into 1.26)
-   vulkan: enable vulkan tests in validate on the CI
-   wasapi2: Add support for dynamic device switch
-   wasapi2: Add support for exclusive mode and format negotiation
-   wasapi2: Device provider enhancements
-   wasapi2: Fix default render device probing
-   wasapi2: Handle device init error on acquire()
-   wasapi2: Pass correct data flow value to GetDefaultAudioEndpoint()
-   wasapi2sink: Do not push too large preroll buffer to endpoint
-   wayland: display: Scale whitepoint the same as the primaries
-   wayland: window: Name the color management queue
-   waylandsink: Parse and set the HDR10 metadata
-   waylandsink: add some error handler for event dispatch (backported into 1.26)
-   webrtc: Misc sdp and stats-related improvements
-   windows: Disable all audio device providers except wasapi2
-   x265enc: Fix duplicate SEI at startup IDR frame problem
-   zbar: tests: Handle symbol-bytes as not null-terminated (backported into 1.26)
-   Remove outdated documentation files

gst-plugins-ugly

-   Remove outdated documentation files

GStreamer Rust plugins

-   Add rtpbin2 examples (backported into 1.26)
-   analytics: Add new analyticscombiner / analyticssplitter elements
-   analyticscombiner: Use NULL caps instead of EMPTY caps in the array for streams with no caps (backported into 1.26)
-   aws: Ensure task stopping on paused-to-ready state change (backported into 1.26)
-   awspolly: some improvements ported over from 11labs synthesizer
-   awstranscriber2: add property for setting show_speaker_labels
-   awstranscriber2,awstranslate: Handle multiple stream-start event (backported into 1.26)
-   awstranslate: expose property for turning brevity on
-   cea708mux: expose “discarded-services” property on sink pads
-   cea708mux: fix clipping function (backported into 1.26)
-   ceaX08overlay: support ANY caps features (backported into 1.26)
-   dav1ddec: Use video decoder base class latency reporting API (backported into 1.26)
-   elevenlabssynthesizer: improve gap handling in non-clip overflow modes
-   fallbacksrc: Don’t panic during retries if the element was shut down in parallel (backported into 1.26)
-   fallbacksrc: Don’t restart source if the element is just being shut down (backported into 1.26)
-   fallbacksrc: Fix some custom source deadlocks (backported into 1.26)
-   Fix various new clippy 1.89 warnings (backported into 1.26)
-   gtk4: Add 10/12/16bit SW decoder formats (backported into 1.26)
-   gtk4: Try importing dmabufs withouth DMA_DRM caps (backported into 1.26)
-   hlsmultivariantsink: Fix master playlist version (backported into 1.26)
-   hlssink3/hlscmafsink: Support the use of a single media file
-   mccparse: Convert “U” to the correct byte representation (backported into 1.26)
-   mpegtslivesrc: Remove leftover debug message (backported into 1.26)
-   net/webrtc: Drop the use of a separate tls-utils crate (backported into 1.26)
-   net/webrtc: Fix tokio-rustls dependency and leftover tls-utils (backported into 1.26)
-   net/webrtc: Fix tokio-rustls using aws_lc_rs by default
-   mp4: Skip tests using x264enc if it does not exist (backported into 1.26)
-   net/webrtc/whep: add WHEP client signaller
-   reqwest: switch to rustls (backported into 1.26)
-   rtpbin2: Fix handling of unknown PTs and don’t warn about incomplete RTP caps to allow for bundling (backported into 1.26)
-   rtpbin2: Improve rtcp-mux support (backported into 1.26)
-   rtpgccbwe: avoid clamp() panic when min_bitrate > max_bitrate (backported into 1.26)
-   rtpmp4apay2: fix payload size prefix (backported into 1.26)
-   rtpmp4gdepay2: allow only constantduration with neither constantsize nor sizelength set (backported into 1.26)
-   rtprecv: Drop state lock before chaining RTCP packets from the RTP chain function (backported into 1.26)
-   rtprecv: fix race condition on first buffer (backported into 1.26)
-   rtprecv optimize src pad scheduling
-   rtpsend: Don’t configure a zero min RTCP interval for senders (backported into 1.26)
-   rtp: threadshare: fix some property ranges (backported into 1.26)
-   rtp: Update to rtcp-types 0.2 (backported into 1.26)
-   s302mparse: Add new S302M audio parser
-   speechmatics: expose mask-profanities property
-   speechmatics: Specify rustls as an explicit dependency (backported into 1.26)
-   spotify: update to librespot 0.7 (backported into 1.26)
-   text: implement new textaccumulate element
-   textaccumulate: misc fixes
-   threadshare: add a blocking adapter element (backported into 1.26)
-   threadshare: Also enable windows Win32_Networking_WinSock feature (backported into 1.26)
-   threadshare: always use block_on_or_add_subtask (backported into 1.26)
-   threadshare: audiotestsrc: fix setting samples-per-buffer… (backported into 1.26)
-   threadshare: blocking_adapter: fix Since marker in docs (backported into 1.26)
-   threadshare: Enable windows Win32_Networking feature (backported into 1.26)
-   threadshare: examples: add a new benchmark program
-   threadshare: fix flush for ts-queue ts-proxy & ts-intersrc (backported into 1.26)
-   threadshare: fix regression in ts-proxysrc (backported into 1.26)
-   threadshare: fix resources not available when preparing asynchronously (backported into 1.26)
-   threadshare: fix ts-inter test one_to_one_up_first (backported into 1.26)
-   threadshare: have Task log its obj (backported into 1.26)
-   threadshare: improvements to some elements (backported into 1.26)
-   threadshare: intersink: return from blocking tasks when stopping (backported into 1.26)
-   threadshare: inter: update doc example (backported into 1.26)
-   threadshare: queue & proxy: fix race condition stopping (backported into 1.26)
-   threadshare: runtime/pad: lower log level pushing Buffer to flushing pad (backported into 1.26)
-   threadshare: re-licensing to MPL-2.0
-   threadshare: separate blocking & throttling schedulers (backported into 1.26)
-   threadshare: src elements: don’t pause the task in downward state transitions
-   threadshare: standalone examples: improvements & a deadlock fix
-   threadshare: standalone examples: log stats on EOS
-   threadshare: ts-audiotestsrc fixes (backported into 1.26)
-   threadshare: ts-intersrc: handle dynamic inter-ctx changes
-   threadshare: Bump up getiffaddrs to 0.1.5 and revert “threadshare: udp: avoid getifaddrs in android” (backported into 1.26)
-   threadshare: update examples (backported into 1.26)
-   threadshare: Update to getifaddrs 0.5 (backported into 1.26)
-   threadshare: Fix macOS build post getifaddrs 0.5 update (backported into 1.26)
-   tracers: pipeline-snapshot: reduce WebSocket connection log level (backported into 1.26)
-   tracers: queue-levels: add support for threadshare DataQueue related elements (backported into 1.26)
-   tracers: Update to etherparse 0.19 (backported into 1.26)
-   transcriberbin: Fix handling of upstream latency query (backported into 1.26)
-   transcriberbin: Fix some deadlocks (backported into 1.26)
-   tttocea608: expose speaker-prefix property
-   tttocea{6,7}08: Disallow pango markup from input caps (backported into 1.26)
-   video/gtk4: Add YCbCr memory texture formats
-   video/gtk4: Improve color-state fallbacks for unknown values
-   webrtc: android example: fix media handling initialization sequence
-   webrtc: Migrate to warp 0.4 and switch to tokio-rustls (backported into 1.26)
-   webrtc-api: Set default bundle policy to max-bundle
-   webrtc/signalling: Fix setting of host address (backported into 1.26)
-   webrtcsink: Move videorate before videoconvert and videoscale (backported into 1.26)
-   webrtcsrc: Clean up EOS and session handling
-   WHIP client: emit shutdown after DELETE request
-   Update Cargo.lock
-   Update Cargo.lock
-   Update dependencies (backported into 1.26)
-   Update dependencies (backported into 1.26)
-   Update dependencies
-   Update to async-tungstenite 0.30
-   README: Don’t suggest running cargo cinstall after cargo cbuild (backported into 1.26)
-   cargo_wrapper: Fix depfile generation and stale dependency handling
-   cargo_wrapper: Fix mismatched quotes causing SyntaxError
-   deny: Update
-   meson: Isolate built plugins from cargo target directory (backported into 1.26)

gst-libav

-   Remove outdated documentation files

gst-rtsp-server

-   rtspclientsink: error out on RTCP timeout
-   Remove outdated documentation files
-   Tests: Switch to fixtures to ensure pool shutdown (backported into 1.26)

gstreamer-sharp

-   Remove outdated documentation files
-   Update C# bindings for new 1.28 API

gst-python

-   Handle buffer PTS/DTS/duration/offset/offset-end as unsigned long long (backported into 1.26)
-   Meson: add convenience target gst-python-extensions to build the Python extension modules
-   Various introspection fixes

gst-editing-services

-   docs: fix enum value extraction for enums with gaps
-   framepositioner: Make zorder controllable and expose it
-   Fix several videorate issue when using time control (setting the rate property)
-   Fix various memory leaks (backported into 1.26)
-   Make sure to zero-initialize the GValue before G_VALUE_COLLECT_INIT (backported into 1.26)
-   Some minor validate fixes

gst-devtools, gst-validate + gst-integration-testsuites

-   devtools: Fix memory leak and use of incorrect context (backported into 1.26)
-   dots-viewer: Improve dot file generation and interactivity
-   h265parse: Parse and attach LCEVC metadata to buffers if present
-   validate: http-actions: Replace GUri with GstURI for GLib 2.64 compatibility (backported into 1.26)
-   validate: ges: Fix race condition in deeply nested timeline test
-   videorate: ges: Fix several videorate issue when using time control (setting the rate property)
-   Update various Rust dependencies (backported into 1.26)

gst-examples

-   Update various Rust dependencies (backported into 1.26)

gstreamer-docs

-   docs: Fix negotiation documentation

Development build environment

-   ci: Don’t forward default variables to downstream cerbero pipeline (backported into 1.26)
-   ci: Fix gst-full breakage due to a typo (backported into 1.26)
-   ci: Fix the abi-check image building
-   ci: Update the kernel version we use with fluster
-   ci: Update to Rust 1.89 and cargo-c 0.10.15
-   ci: Work around PowerShell broken argument parsing (backported into 1.26)
-   ci: add rtsp-server valgrind job
-   debug: Category init should happen in class_init when possible
-   framepositioner: Make zorder controllable and expose it
-   gitattributes: Mark dots-viewer dist files as binary
-   glib: update to 2.82.5 and backport shebangs patch (backported into 1.26)
-   gl/basesrc: support changing caps and add get_gl_context()
-   gst-env: only-environment: only dump added and updated vars (backported into 1.26)
-   gst-full: Fix detection of duplicate plugin entries (backported into 1.26)
-   ignore: Exclude build artifacts and minified files from ripgrep
-   win-pkgconfig: Bump to 0.29.2
-   svtjpegxs: Update wrap file
-   Can’t build recent GStreamer on GN/Linux because gobject-introspection subproject insists on searching for privative
    compiler
-   gobject-introspection: Fix introspection failing on Linux with subproject GLib (backported into 1.26)
-   python: Fix compatibility of pygobject patch with 3.42
-   Fix build on windows due to proxy-libintl not being invoked, reduce build size on windows by disabling plugins (backported
    into 1.26)

Cerbero build tool and packaging changes in 1.27.2

-   Library update preliminaries for visionOS (backported into 1.26)
-   android: Update API level to 24 (version 7)
-   build: Fix passing multiple steps (backported into 1.26)
-   build: disable LTO on MSVC
-   cache: Fix detection of build tools prefix when using a cache (backported into 1.26)
-   ci: Update windows image
-   cmake: Do not rely on the CERBERO_PREFIX environment variable (backported into 1.26)
-   config: Add property for setting specifically the number of Cargo jobs
-   config: Also apply Cargo properties to the build tools configuration
-   curl: specify OPENSSL_INCLUDE_DIR directly
-   enums: Add is_mobile, is_apple and is_apple_mobile helpers (backported into 1.26)
-   ffmpeg: enable filters needed by avvideocompare (backported into 1.26)
-   git: Normalize all file endings to LF (backported into 1.26)
-   glib-networking: Add missing pkg-config file
-   gst-plugins-bad: Add unixfd to recipe
-   gst-plugins-rs: Fixes for Rust + MSVC build
-   gst-plugins-rs: Implement library melding for smaller binary sizes of Rust plugins
-   gst-plugins-rs: Update version to 0.15.0-alpha.1
-   libxml2: update to 2.14.5
-   msvc: Add static libraries following the Meson convention
-   osx: Update pkgbuild compression algorithms (backported into 1.26)
-   package: Dump cerbero and recipe versions into datadir (backported into 1.26)
-   package: fix –tarball –compress-method=none (backported into 1.26)
-   packaging: Assorted fixes in preparation for deploying split symbols
-   rust: Update to Rust 1.89 and cargo-c 0.10.15
-   tar: Refactor in preparation for xcframework support (backported into 1.26)
-   wavpack: Fix CMake 4.1+ MSVC build breakage

Contributors to 1.27.2

Adrian Perez de Castro, Amotz Terem, Andrey Khamukhin, Daniel Morin, Derek Foreman, Doug Nazar, Elliot Chen, François Laignel,
Haihua Hu, Havard Graff, Hou Qi, Ian Napier, Jan Alexander Steffens (heftig), Jan Schmidt, Jaslo Ziska, Jonathan Lui, Jordan
Petridis, Julian Bouzas, L. E. Segovia, Marc-André Lureau, Mathieu Duponchelle, Matthew Waters, Marko Kohtala, Monty C, Nicolas
Dufresne, Nirbheek Chauhan, Ola Fornander, Olivier Crête, Philippe Normand, Piotr Brzeziński, Qian Hu (胡骞), Raghavendra Rao,
Rick Ye, Robert Mader, Ruben Gonzalez, Sanchayan Maity, Sebastian Dröge, Seungha Yang, Slava Sokolovsky, Stéphane Cerveau,
Taruntej Kanakamalla, Thibault Saunier, Tim-Philipp Müller, Tomasz Mikolajczyk, Víctor Manuel Jáquez Leal, Vivia Nikolaidou,
Vivian Lee, Vivienne Watermeier, Xavier Claessens,

… 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.27.2

-   List of Merge Requests applied in 1.27.2
-   List of Issues fixed in 1.27.2

1.27.1

The first API/ABI-unstable 1.27.x development snapshot release (1.27.1) was released on 8 July 2025.

Any newly-added API in the 1.27.x series may still change or be removed again before 1.28 and should be considered unstable
until 1.28 is released.

The 1.27.x release series is for testing and development purposes, and distros should probably not package it.

Highlighted changes in 1.27.1

-   Add AMD HIP plugin
-   Add Vulkan H.264 encoder and add 10-bit support to Vulkan H.265 decoder
-   Add LiteRT inference element
-   Aggregator: expose current-level-* properties on sink pads
-   Analytics: add general classifier tensor-decoder, facedetector, and more convenience API
-   alsa: Support enumerating virtual PCM sinks
-   d3d12: Add d3d12remap element
-   Wayland: Add basic colorimetrie support
-   Webkit: New wpe2 plugin making use of the “WPE Platform API”
-   MPEG-TS demuxer: Add property to disable skew corrections
-   qml6gloverlay: support directly passing a QQuickItem for QML the render tree
-   unifxfdsink: Add a property to allow copying to make sink usable with more upstream elements
-   videorate: Revive “new-pref” property for better control in case of caps changes
-   wasapi2: Port to IMMDevice based device selection
-   GstReferenceTimestampMeta can carry additional per-timestamp information now
-   Added GstLogContext API that allows to fix log spam in several components
-   New tracer hook to track when buffers are queued/dequeued in buffer pools
-   gst-inspect-1.0: Prints type info for caps fields now
-   Pipeline graph dot files now contain information about active tracers
-   Python bindings: add Gst.Float wrapper, Gst.ValueArray.append_value(), analytics API improvements
-   cerbero packages: ship vvdec and curl plugins; ship wasapi2 on MingW builds
-   Removed the gstreamer-vaapi module which has now been superseded by the va plugin
-   Countless bug fixes, build fixes, memory leak fixes, and other stability and reliability improvements

gstreamer

-   aggregator: add sub_latency_min to pad queue size
-   aggregator: expose current-level-* properties on sink pads
-   baseparse: Add disable-clip property
-   buffer: Add optional info structure to GstReferenceTimestampMeta
-   core changes needed for tensor negotiation
-   core: gstvalue: fix ANY/EMPTY caps (features) hash
-   general: Stop checking G_HAVE_GNUC_VARARGS now that we require on c99
-   Add information about active tracers in dot files
-   gst: info: Add a GstLogContext API
-   gstmessage: Debug error message is nullable
-   gstvalue: add hashing
-   gstvalue: fix gst_value_is_subset_array_array()
-   meta: Add g_return_val_if_fail() for NULL valid_tags in gst_meta_api_type_tags_contain_only()
-   tracer: Add a hook to track when buffers are queued/dequeued in pools
-   tracer: Make it compile when tracer hooks are disabled
-   Fix log spam in several components
-   Misc changes to avoid build failures with fedora 42
-   meson: rename meson_options.txt to meson.options
-   tests: More valgrind and test fixes
-   gst-inspect-1.0: Added type info for caps fields

gst-plugins-base

-   Fix log spam in several components using the new log context API
-   alsa: Support enumerating virtual PCM sinks
-   appsink, appsrc: Only notify drop property and not in/out
-   appsink, appsrc: Add some more stats
-   decodebin, pbutils: use new GstLogContext API
-   discoverer: Make gst_discoverer_info_from_variant nullable
-   discoverer: Enhance debug logging
-   elements: use set_static_metadata when it’s allowed
-   general: Stop checking G_HAVE_GNUC_VARARGS now that we require on c99
-   gl/window: add support for configuring whether a backing surface is needed
-   gl/x11: need to check display type
-   gl: Fix support for dmabuf using a DRM format that we can’t emulate with shaders
-   gl: cocoa: Add navigation event support
-   gldmabufferpool: disable “free cache” workaround in GstGLBufferPool
-   gldownload: improve logging of gl-dmabuf pool usage
-   glupload: Promote fixate caps results print to info
-   glvideomixer, compositor: fix mouse event handling to return wether upstream handled the events or not.
-   glwindow_cocoa: fix window not closing (w/o user window handle)
-   opengl: VA / glimagesink broke in some cases (regression)
-   opengl: Fix DRM format and modifier negotiation regressions
-   orc: Update pregenerated files
-   unifxfdsink: Add an property to allow copying
-   unixfdsrc: fix allocating FD memory with nonzero offsets
-   video formats: Add DRM equivalents for 10/12/16 bit SW-decoders formats
-   video: Add 10bit 422 NV16_10LE40 format
-   videorate, imagefreeze: add support for JPEG XS
-   videorate: Revive ‘new-pref’ property
-   webrtcbin: Include all accepted media formats in SDP answers
-   gst-device-monitor-1.0: Deinitialize GStreamer before exiting
-   GStreamer with OpenGL creates an empty “OpenGL Renderer” window on Wayland
-   meson: rename meson_options.txt to meson.options
-   tests: More valgrind and test fixes

gst-plugins-good

-   gldownload: improve logging of gl-dmabuf pool usage
-   imagefreeze: Handle EOS from send_event()
-   matroskademux: Add support for relative position cues
-   orc: Update pregenerated files
-   qml6gloverlay: support directly passing a QQuickItem for QML the render tree
-   rtph265depay: output profile, tier, level in output caps
-   rtpjpeg: fix copying of quant data if it spans memory segments
-   v4l2object: Make extra-controls property mutable in playing state
-   v4l2object: Provide padding requirements during propose allocation
-   video: Add 10bit 422 NV16_10LE40 format
-   videorate, imagefreeze: add support for JPEG XS
-   y4m: move y4mdec to good to have a single y4m plugin
-   Fix build with -DGST_REMOVE_DEPRECATED
-   Name buffer pools for new buffer pool enqueue/dequeue tracer
-   meson: rename meson_options.txt to meson.options
-   elements: use set_static_metadata when it’s allowed
-   tests: More valgrind and test fixes

gst-plugins-bad

-   Fix build with -DGST_REMOVE_DEPRECATED
-   Misc changes to avoid build failures with fedora 42
-   analytics: Add transform function to copy the tensor meta
-   analytics: Fix docs of gst_tensor_check_type()
-   analytics: Fix transfer annotations of gst_tensor_check_type()
-   analytics: add a convenient API to retrieve tensor
-   analytics: add more convenient API to retrieve tensor
-   analytics: classifier tensor decoder
-   analytics: Move IoU calculation to gstanalytics lib
-   analyticsoverlay: add filled-box mode
-   cuda: Lower debug log level on nvrtc compilation failure
-   curl: Fix wrong format specifier for macOS
-   curl: Recover missing comment
-   d3d12: Add d3d12remap element
-   d3d12screencapturesrc: Fix OS handle leaks/random crash in WGC mode
-   d3d12swapchainsink: Add uv-remap and redraw action signal
-   elements: use set_static_metadata when it’s allowed
-   general: Stop checking G_HAVE_GNUC_VARARGS now that we require on c99
-   h264parse: Drop NAL units that can’t be parsed using AU alignment
-   h264parse: Forward LCEVC caps
-   h265parser: Make gst_h265_parser_link_slice_hdr public
-   hip: Add AMD HIP plugin
-   hip: Add missing #ifdef
-   hip: stream and event integration
-   motioncells: fix typo in header comment
-   mpegtsdemux: Add property to disable skew corrections
-   mpegtsmux: Read prog-map[PMT_ORDER_<PID>] for PMT order key
-   nice: Don’t modify struct borrowed by signal
-   nvjpegenc: Add autogpu mode element
-   onnx: Cleanup the session creation
-   onnx: Use system installed Eigen to avoid hash mismatch failure
-   onnx: produce tensor caps
-   opengl: Fix DRM format and modifier negotiation regressions
-   orc: Update pregenerated files
-   parser: fix spelling of GstAV1SegmentationParams
-   tensordecoder: facedetector: Detect tensor output from the inference of Ultra Light Face Detection
-   test: analytics: add more test on tracking mtd
-   tfliteinference: Add LiteRT inference element
-   tfliteinference: initialize means and stddevs arrays appropriately
-   unifxfdsink: Add an property to allow copying
-   unixfdsrc: fix allocating FD memory with nonzero offsets
-   v4l2codecs: Fix typos in the documentation
-   v4l2codecs: Use prop_offset in gst_v4l2_decoder_install_properties
-   va: remove unused headers
-   video: Add 10bit 422 NV16_10LE40 format
-   videorate: Revive ‘new-pref’ property
-   vkerror: add invalid_video_std_parameters message
-   vkh264enc: add Vulkan H264 encoder
-   vkh265dec: add 10 bits support
-   vkvideoencodeh26x: don’t leak queues and ensure we call teardown() for each test
-   vtenc: Use strlcpy instead of strncpy
-   vulkan: use VK_EXT_debug_utils if available
-   vulkan: Fix drawing too many triangles in fullscreenquad
-   waylandsink: some property handling fixes
-   webrtc: Fix compatibility with LiveKit
-   webrtc: Fix hangup when duplicate sctp association IDs chosen
-   vulkanupload: refactor frame copy
-   wasapi2: Log buffer QPC position and status flags
-   wasapi2: Port to IMMDevice based device selection
-   wayland: Add basic colorimetrie support
-   wayland: Add support for local protocols
-   wayland: Remove custom format mapping
-   waylandsink: Add force-aspect-ratio property
-   waylandsink: some property handling fixes
-   webrtc: Partial revert of !8698
-   webrtc: stats: Fill data-channel transport stats and increase spec compliance for ICE candidate stats
-   webrtc: stats: Improve spec compliance for ICE candidate stats
-   webrtc: Fix compatibility with LiveKit
-   webrtcbin: Include all accepted media formats in SDP answers
-   webrtcbin: Make mid optional in offers and answers
-   webrtcdsp: Respect disabled feature option
-   wpe2: New WPE plugin making use of the “WPE Platform API”
-   svtjpegxs: print message for architectures unsupported by SVT-JPEG-XS
-   x265enc: Add bitrate tags to the output
-   y4m: move y4mdec to good to have a single y4m plugin
-   Name buffer pools for new buffer pool enqueue/dequeue tracer
-   meson: rename meson_options.txt to meson.options
-   tests: More valgrind and test fixes

gst-plugins-ugly

-   Name buffer pools for new buffer pool enqueue/dequeue tracer
-   meson: rename meson_options.txt to meson.options

GStreamer Rust plugins

Changes compared to the current stable release (1.26.3) which both track gst-plugins-rs main branch for the time being:

-   aws: s3hlssink: Write to S3 on OutputStream flush
-   gopbuffer: Push GOPs in order of time on EOS
-   gtk4: Promote set_caps debug log to info
-   hlssink3: Use closed fragment location in playlist generation
-   livekit: add room-timeout
-   mp4mux: add TAI timestamp muxing
-   rtpbin2: fix race condition on serialized Queries
-   rtpbin2: sync: fix race condition
-   rtprecv: fix SSRC collision event sent in wrong direction
-   webrtc: sink: avoid recursive locking of the session
-   webrtc: fix Safari addIceCandidate crash
-   webrtcsink: fix deadlock on error setting remote description
-   webrtcsink: add signal to configure mitigation modes

gst-libav

-   Name buffer pools for new buffer pool enqueue/dequeue tracer
-   meson: rename meson_options.txt to meson.options

gst-rtsp-server

-   meson: rename meson_options.txt to meson.options

gstreamer-vaapi

-   Remove gstreamer-vaapi module which has now been superseded by the va plugin

gstreamer-sharp

-   meson: rename meson_options.txt to meson.options

gst-python

-   analytics: Add python API to iterate over specific Mtd types.
-   analytics: Add python API to get relation path
-   analytics: Add API iter_direct_related to GstAnalyticsMeta
-   Add Gst.Float wrapper
-   Override Gst.ValueArray.append_value()
-   meson: rename meson_options.txt to meson.options

gst-editing-services

-   Enhance debug logging
-   Handle add_control_binding failures
-   meson: rename meson_options.txt to meson.options

gst-devtools, gst-validate + gst-integration-testsuites

-   devtools: dots-viewer: Add a button to download the SVG file
-   devtools: dots-viewer: sort static files
-   elements: use set_static_metadata when it’s allowed
-   validate: Do not list test files that are not autogenerated in .testlist
-   validate: Minor launcher improvements
-   validate: baseclasses: Reset Test.extra_logfiles when copying to start an iteration
-   validate: launcher: Downgrade non-critical log messages from ERROR to INFO
-   validate: Add a set of tests for checking if videooverlaycomposition reaches the sink
-   meson: rename meson_options.txt to meson.options

gstreamer-docs

-   android tutorials: Update provided projects to Gradle 8.11 and API level 24

Development build environment

-   Add devcontainer manifest for our CI image!
-   Some subproject fixes on Windows
-   general: Stop checking G_HAVE_GNUC_VARARGS now that we require on c99
-   meson: rename meson_options.txt to meson.options
-   cairo: update wrap to 1.18.4
-   ffmpeg: update wrap to 7.1.1
-   librsvg: Add wrap
-   svtjpegxs: Add wrap
-   wayland-protocols: Update wrap
-   webrtc-audio-processing: Add patches to wrap to fix compilation with gcc 15

Cerbero build tool and packaging changes in 1.27.1

-   Add override_build_tools property
-   Add vvdec recipe and build/ship vvdec plugin
-   Fix gensdkshell command
-   Fix librsvg recipe FatalError for usupported RUST arch/platform
-   Fixes for MinGW builds with Meson master
-   Local source
-   UX: improve error msg
-   a52dec: update to 0.8.0 and port to Meson
-   bootstrap: linux: Install libatomic on RedHat-based distros
-   build-tools: Update bison and flex
-   build: honor library_type for autotools recipes
-   build: use a list instead of a string for configure options
-   cargo-c: Update to 0.10.13
-   cdparanoia: port to Meson
-   cerbero: Add bindgen for Cargo recipes
-   cerbero: Fix bundle-source bugs
-   cerbero: Handle rust variant on Linux for old binutils versions
-   cmake: respect the configured output library type
-   curl: Add missing payloads
-   curl: add curl support
-   curl: fix install step in Windows when target file exists
-   dvdread: update to 6.1.3 and switch to Meson
-   expat: update to 2.7.1
-   glib, gobject-introspection: Update for MSVC patches
-   gst-devtools, bindgen-cli: Fix install_name_tool relocation error
-   gst-plugins-bad: Ship wasapi2 plugin in MinGW build as well
-   gst-plugins-rs: Force preset LIBCLANG_PATH for bindgen
-   gst-plugins-rs: Update recipe to simplify inheriting
-   libdvdnav: Fix missing build type
-   libdvdnav: Update to 6.1.1 and port to Meson
-   libdvdread: Fix incomplete MSVC compatibility
-   librsvg: Update to 2.60.0
-   libxml2: update to 2.14.2
-   meson: check if Rust variant to configure rustc bin
-   osxrelocator: Add .so to the allowed dylib extensions
-   pixman: update to 0.46.0
-   rust: Update to Rust 1.88 and cargo-c 0.10.14
-   rustup: Implement installer status caching, inplace target installs and upgrades
-   rustup: Work around broken symlink support in CI
-   spandsp: Fix signature compatibility with MSVC x86
-   spandsp: port to Meson
-   svt-av1: fix compatibility with CMake 4
-   y4m: update recipes for the fusion of both plugins

Contributors to 1.27.1

Adrian Perez de Castro, Aleix Pol, Alexander Slobodeniuk, Alicia Boya García, Alyssa Ross, Andoni Morales Alastruey, Andrew
Yooeun Chun, Arnout Engelen, Artem Martus, Arun Raghavan, Ben Butterworth, Biswapriyo Nath, Brad Hards, Branko Subasic, Carlos
Bentzen, Carlos Rafael Giani, César Alejandro Torrealba Vázquez, Changyong Ahn, Daniel Morin, David Maseda Neira, David Monge,
David Smitmanis, Denis Shimizu, Detlev Casanova, Diego Nieto, Dongyun Seo, Doug Nazar, Devon Sookhoo, Edward Hervey, Eli Mallon,
Elliot Chen, Enock Gomes Neto, Enrique Ocaña González, Eric, F. Duncanh, François Laignel, Gang Zhao, Glyn Davies, Guillaume
Desmottes, Gustav Fahlen, He Junyan, Hou Qi, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), Jan Schmidt, Jan
Tojnar, Jan Vermaete, Jerome Colle, Jochen Henneberg, Johan Sternerup, Jordan Petridis, Jordan Yelloz, Jorge Zapata, Julian
Bouzas, L. E. Segovia, Loïc Le Page, Marc Leeman, Marek Olejnik, Mathieu Duponchelle, Matteo Bruni, Matthew Waters, Michael
Grzeschik, Michael Olbrich, Nicolas Dufresne, Nirbheek Chauhan, Ognyan Tonchev, Olivier Blin, Olivier Crête, Pablo García,
Philippe Normand, Piotr Brzeziński, Pratik Pachange, Qian Hu (胡骞), Raghavendra Rao, Razvan Grigore, Robert Ayrapetyan, Robert
Mader, Ruben Gonzalez, Santosh Mahto, Sebastian Dröge, Seungha Yang, Shengqi Yu (喻盛琪), Stefan Andersson, Stéphane Cerveau,
Taruntej Kanakamalla, Théo Maillart, Thibault Saunier, Tim-Philipp Müller, Vasiliy Doylov, Víctor Manuel Jáquez Leal, Vineet
Suryan, Wim Taymans, Xavier Claessens,

… 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.27.1

-   List of Merge Requests applied in 1.27.1
-   List of Issues fixed in 1.27.1

Schedule for 1.28

Our next major feature release will be 1.28, and 1.27.x is the unstable development series leading up to the stable 1.28
release. The development of 1.27/1.28 will happen in the git main branch of the GStreamer mono repository.

The schedule for 1.28 is yet to be decided, but we’re targetting late 2025.

1.28 will be backwards-compatible to the stable 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
