1316 lines
		
	
	
		
			66 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1316 lines
		
	
	
		
			66 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| GStreamer 1.26 Release Notes
 | ||
| 
 | ||
| GStreamer 1.26.0 was originally released on 11 March 2025.
 | ||
| 
 | ||
| See https://gstreamer.freedesktop.org/releases/1.26/ for the latest version of this document.
 | ||
| 
 | ||
| Last updated: Tuesday 11 March 2025, 20:00 UTC (log)
 | ||
| 
 | ||
| ## Introduction
 | ||
| 
 | ||
| The GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite
 | ||
| cross-platform multimedia framework!
 | ||
| 
 | ||
| As always, this release is again packed with many new features, bug fixes, and other improvements.
 | ||
| 
 | ||
| ## Highlights
 | ||
| 
 | ||
| -   H.266 Versatile Video Coding (VVC) codec support
 | ||
| -   Low Complexity Enhancement Video Coding (LCEVC) support
 | ||
| -   Closed captions: H.264/H.265 extractor/inserter, cea708overlay, cea708mux, tttocea708 and more
 | ||
| -   New hlscmafsink, hlssink3, and hlsmultivariantsink; HLS/DASH client and dashsink improvements
 | ||
| -   New AWS and Speechmatics transcription, translation and TTS services elements, plus translationbin
 | ||
| -   Splitmux lazy loading and dynamic fragment addition support
 | ||
| -   Matroska: H.266 video and rotation tag support, defined latency muxing
 | ||
| -   MPEG-TS: support for H.266, JPEG XS, AV1, VP9 codecs and SMPTE ST-2038 and ID3 meta; mpegtslivesrc
 | ||
| -   ISO MP4: support for H.266, Hap, Lagarith lossless codecs; raw video support; rotation tags
 | ||
| -   SMPTE 2038 ancillary data streams support
 | ||
| -   JPEG XS image codec support
 | ||
| -   Analytics: New TensorMeta; N-to-N relationships; Mtd to carry segmentation masks
 | ||
| -   ONVIF metadata extractor and conversion to/from relation metas
 | ||
| -   New originalbuffer element that can restore buffers again after transformation steps for analytics
 | ||
| -   Improved Python bindings for analytics API
 | ||
| -   Lots of Vulkan integration and Vulkan Video decoder/encoder improvements
 | ||
| -   OpenGL integration improvements, esp. in glcolorconvert, gldownload, glupload
 | ||
| -   Qt5/Qt6 QML GL sinks now support direct DMABuf import from hardware decoders
 | ||
| -   CUDA: New compositor, Jetson NVMM memory support, stream-ordered allocator
 | ||
| -   NVCODEC AV1 video encoder element, and ndsdewarp
 | ||
| -   New Direct3D12 integration support library
 | ||
| -   New d3d12swapchainsink and d3d12deinterlace elements and D3D12 sink/source for zero-copy IPC
 | ||
| -   Decklink HDR support (PQ + HLG) and frame scheduling enhancements
 | ||
| -   AJA capture source clock handling and signal loss recovery improvements
 | ||
| -   RTP and RTSP: New rtpbin sync modes, client-side MIKEY support in rtspsrc
 | ||
| -   New Rust rtpbin2, rtprecv, rtpsend, and many new Rust RTP payloaders and depayloaders
 | ||
| -   webrtcbin support for basic rollbacks and other improvements
 | ||
| -   webrtcsink: support for more encoders, SDP munging, and a built-in web/signalling server
 | ||
| -   webrtcsrc/sink: support for uncompressed audio/video and NTP & PTP clock signalling and synchronization
 | ||
| -   rtmp2: server authentication improvements incl. Limelight CDN (llnw) authentication
 | ||
| -   New Microsoft WebView2 based web browser source element
 | ||
| -   The GTK3 plugin has gained support for OpenGL/WGL on Windows
 | ||
| -   Many GTK4 paintable sink improvements
 | ||
| -   GstPlay: id-based stream selection and message API improvements
 | ||
| -   Real-time pipeline visualization in a browser using a new dots tracer and viewer
 | ||
| -   New tracers for tracking memory usage, pad push timings, and buffer flow as pcap files
 | ||
| -   VA hardware-acclerated H.266/VVC decoder, VP8 and JPEG encoders, VP9/VP8 alpha decodebins
 | ||
| -   Video4Linux2 elements support DMA_DRM caps negotiation now
 | ||
| -   V4L2 stateless decoders implement inter-frame resolution changes for AV1 and VP9
 | ||
| -   Editing services: support for reverse playback and audio channel reordering
 | ||
| -   New QUIC-based elements for working with raw QUIC streams, RTP-over-QUIC (RoQ) and WebTransport
 | ||
| -   Apple AAC audio encoder and multi-channel support for the Apple audio decoders
 | ||
| -   cerbero: Python bindings and introspection support; improved Windows installer based on WiX5
 | ||
| -   Lots of new plugins, features, performance improvements and bug fixes
 | ||
| 
 | ||
| ## Major new features and changes
 | ||
| 
 | ||
| ### H.266 Versatile Video Coding (VVC) codec support
 | ||
| 
 | ||
| -   The H.266 / VVC video codec is a successor to H.265 / HEVC and is standardised in ISO/IEC 23090-3.
 | ||
| 
 | ||
| -   A new h266parse element was added, along with parsing API, typefinding support and some codec utility functions in the
 | ||
|     gst-plugins-base utility library.
 | ||
| 
 | ||
| -   A H.266 decoder base class for hardware-accelerated decoders was added and used to implement a VA-API-based
 | ||
|     hardware-accelerated H.266 decoder.
 | ||
| 
 | ||
| -   The FFmpeg H.266 decoder is exposed now (from FFmpeg 7.0 onwards).
 | ||
| 
 | ||
| -   H.266 / VVC muxing and demuxing support was implemented for MP4, Matroska and MPEG-TS containers.
 | ||
| 
 | ||
| -   A VVdeC-based H.266 decoder element was added to the Rust plugins, based on the Fraunhofer Versatile Video Decoder library.
 | ||
| 
 | ||
| ### JPEG XS image codec support
 | ||
| 
 | ||
| -   JPEG XS is a visually lossless, low-latency, intra-only video codec for video production workflows, standardised in ISO/IEC
 | ||
|     21122.
 | ||
| 
 | ||
| -   JPEG XS encoder and decoder elements based on the SVT JPEG XS library were added, including support for muxing JPEG XS into
 | ||
|     MPEG-TS and demuxing it. Both interlaced and progressive modes are supported.
 | ||
| 
 | ||
| ### Low Complexity Enhancement Video Coding (LCEVC) support
 | ||
| 
 | ||
| -   LCEVC is a codec that provides an enhancement layer on top of another codec such as H.264 for example. It is standardised as
 | ||
|     MPEG-5 Part 2.
 | ||
| 
 | ||
| -   LCEVC encoder and decoder elements based on V-Nova’s SDK libraries were added, including support in h264parse for extracting
 | ||
|     the enhancement layer from H.264 and decoding it via a lcevch264decodebin element.
 | ||
| 
 | ||
| ### Closed captions improvements
 | ||
| 
 | ||
| -   New H.264 and H.265 closed captions extractor and inserter elements.
 | ||
| 
 | ||
|     -   These extractor elements don’t actually extract captions from the bitstream, but rely on parser elements to do that and
 | ||
|         add them to buffers in form of caption metas. The problem is that streams might contain B-frames, in which case the
 | ||
|         captions in the bitstream will not be in presentation order and extracting them requires frame-reordering in the same
 | ||
|         way that a decoder would do. These new elements will do exactly that and allow you to extract captions in presentation
 | ||
|         order without having to decode the stream.
 | ||
| 
 | ||
|     -   The inserter elements do something similar and insert caption SEIs into the H.264 or H.265 bitstream, taking into
 | ||
|         account frame ordering.
 | ||
| 
 | ||
|     -   This is useful if one wants to extract, process and re-insert captions into an existing video bitstream without decoding
 | ||
|         and re-encoding it (in which case the decoder and encoder would handle the caption reordering).
 | ||
| 
 | ||
| -   cdpserviceinject: New element for injecting a CDP service descriptor into closed caption CDP packets
 | ||
| 
 | ||
| -   cea708overlay: New element for overlaying CEA608 / CEA708 closed captions over video streams.
 | ||
| 
 | ||
| -   The cc708overlay element has been deprecated in favour of the cea708overlay element from the Rust plugins set.
 | ||
| 
 | ||
| -   cea608mux gained a "force-live" property to make it always in live mode and aggregate on timeout regardless of whether any
 | ||
|     live sources are linked upstream.
 | ||
| 
 | ||
| -   cea708mux: New element that allows to mux multiple CEA708 services into a single stream.
 | ||
| 
 | ||
| -   cccombiner has two new properties:
 | ||
| 
 | ||
|     -   "input-meta-processing" controls how input closed caption metas are processed and can be used to e.g. discard closed
 | ||
|         captions from the input pad if the matching video buffer already has closed caption on it.
 | ||
| 
 | ||
|     -   "schedule-timeout" to support timing out captions without EOS
 | ||
| 
 | ||
| -   tttocea708: New element for converting timed-text to CEA708 closed captions
 | ||
| 
 | ||
| -   Miscellaneous improvements and spec compliance fixes
 | ||
| 
 | ||
| ### Speech to Text, Translation and Speech Synthesis
 | ||
| 
 | ||
| -   awstranscriber2, awstranslate: New elements around the AWS transcription and translation services.
 | ||
| 
 | ||
| -   polly: New element around the AWS text-to-speech polly services
 | ||
| 
 | ||
| -   speechmatics: New transcriber / speech-to-text and translation element
 | ||
| 
 | ||
| -   translationbin: Helper bin around translation elements, similar to the already existing transcriberbin for transcriptions.
 | ||
| 
 | ||
| ### HLS DASH adaptive streaming improvements
 | ||
| 
 | ||
| -   The adaptivedemux2 client implementation gained support for file:// URIs and as such the ability to play HLS and DASH from
 | ||
|     local files. It also no longer sends spurious flush events when it loses sync in live streams, as that is unexpected and
 | ||
|     will be handled poorly in non-playback scenarios. Lastly, support for HTTP request retries was added via the "max-retries"
 | ||
|     property, along with some exponential backoff logic which can be fine-tuned via properties.
 | ||
| 
 | ||
| -   dashsink has received period duration fixes for dynamic MPDs and some memory leak fixes.
 | ||
| 
 | ||
| -   hlscmafsink, hlssink3: New single-variant HLS sink elements that can output CMAF (fMP4) or MPEG-TS fragments.
 | ||
| 
 | ||
| -   hlsmultivariantsink: New sink element that can output an HLS stream with multiple variants
 | ||
| 
 | ||
| ### splitmuxsrc, splitmuxsink: lazy loading and dynamic fragment addition
 | ||
| 
 | ||
| -   splitmuxsrc and splitmuxsink were originally designed to handle a small number of large file fragments, e.g. for situations
 | ||
|     where one doesn’t want to exceed a certain file size when recording to legacy file systems. It was also designed for playing
 | ||
|     back a static set of file fragments that have been created by an earlier recording session and no longer changes. Over time
 | ||
|     people have found more applications and use cases for the splitmux elements and have been deploying them in different
 | ||
|     scenarios, exposing the limits of the current implementation.
 | ||
| 
 | ||
| -   In this release, splitmuxsink and splitmuxsrc gained new abilities aimed at improving support for recordings with a large
 | ||
|     number of files, and for adding fragments on the fly to allow playback of ongoing recordings:
 | ||
| 
 | ||
|     -   You can now add fragments directly to splitmuxsrc and provide the offset and duration in the stream:
 | ||
| 
 | ||
|         -   Providing offset and duration means splitmuxsrc doesn’t need to scan the file to measure it and calculate it. That
 | ||
|             makes for much faster startup.
 | ||
| 
 | ||
|         -   The new "add-fragment" signal can be used to add files to the set dynamically - allowing to be playing an ongoing
 | ||
|             recording and adding files to the playback set as they are finished.
 | ||
| 
 | ||
|     -   splitmuxsrc no longer keeps all files open, but instead only keeps 100 files open by default, configurable with the
 | ||
|         "num-open-fragments" property.
 | ||
| 
 | ||
|     -   There is a new "num-lookahead" property on splitmuxsrc to trigger (re)opening files a certain distance ahead of the play
 | ||
|         position.
 | ||
| 
 | ||
|     -   splitmuxsink will report fragment offset and fragment duration via a message on the bus when closing a file. This
 | ||
|         information can then be used to add the new fragment to a splitmuxsrc.
 | ||
| 
 | ||
| ### MPEG-TS container format improvements
 | ||
| 
 | ||
| -   The MPEG-TS muxer and demuxer gained support for
 | ||
| 
 | ||
|     -   H.266 / VVC video muxing and demuxing
 | ||
|     -   JPEG-XS video muxing and demuxing
 | ||
|     -   VP9 video muxing and demuxing (using a custom mapping)
 | ||
|     -   AV1 video muxing and demuxing (using a custom mapping, since the work-in-progress specification effort doesn’t seem to
 | ||
|         be going anywhere anytime soon)
 | ||
|     -   SMPTE ST-2038 ancillary metadata streams (see section above)
 | ||
| 
 | ||
| -   mpegtsmux gained support for muxing ID3 metadata into the TS stream, as well as SMPTE 302M audio.
 | ||
| 
 | ||
| -   It’s also possible to disable sending SCTE-35 null (heartbeat) packets now in mpegtsmux by setting the
 | ||
|     "scte-35-null-interval" to 0.
 | ||
| 
 | ||
| -   tsparse now handles 192-byte M2TS packets
 | ||
| 
 | ||
| -   mpegtslivesrc: New source element that can wrap a live MPEG-TS source (e.g. SRT or UDP source) and provides a clock based on
 | ||
|     the PCR.
 | ||
| 
 | ||
| ### Matroska container format improvements
 | ||
| 
 | ||
| -   H.266 / VVC video muxing and demuxing support
 | ||
| 
 | ||
| -   matroskamux
 | ||
| 
 | ||
|     -   was ported to the GstAggregator base class, ensuring defined-latency muxing in live streaming pipelines.
 | ||
|     -   gained rotation tag support
 | ||
| 
 | ||
| -   matroskademux now also supports seeks with a stop position in push mode.
 | ||
| 
 | ||
| ### ISO MP4 container format improvements
 | ||
| 
 | ||
| -   can mux and demux H.266 / VVC in MP4 now
 | ||
| 
 | ||
| -   can demux Hap video now, as well as Lagarith lossless video and ISO/IEC 23003-5 raw PCM audio.
 | ||
| 
 | ||
| -   qtdemux handles keyunit-only trick mode also in push mode now
 | ||
| 
 | ||
| -   support for ISO/IEC 23001-17 raw video in MP4 in qtdemux and isomp4mux.
 | ||
| 
 | ||
| -   support for rotation tags in the muxers and demuxers was improved to correctly handle per-media and per-track rotations, and
 | ||
|     support for flips was added as well.
 | ||
| 
 | ||
| SMPTE 2038 ancillary data streams
 | ||
| 
 | ||
| -   SMPTE 2038 (pdf) is a generic system to put VBI-style ancillary data into an MPEG-TS container. This could include all kinds
 | ||
|     of metadata such as scoreboard data or game clocks, and of course also closed captions, in this case in form of a distinct
 | ||
|     stream completely separate from any video bitstream.
 | ||
| 
 | ||
| -   A number of new elements in the GStreamer Rust closedcaption plugin add support for this, along with mappings for it in the
 | ||
|     MPEG-TS muxer and demuxer. The new elements are:
 | ||
| 
 | ||
|     -   st2038ancdemux: splits SMPTE ST-2038 ancillary metadata (as received from tsdemux) into separate streams per DID/SDID
 | ||
|         and line/horizontal_offset. Will add a sometimes pad with details for each ancillary stream. Also has an always source
 | ||
|         pad that just outputs all ancillary streams for easy forwarding or remuxing, in case none of the ancillary streams need
 | ||
|         to be modified or dropped.
 | ||
| 
 | ||
|     -   st2038ancmux: muxes SMPTE ST-2038 ancillary metadata streams into a single stream for muxing into MPEG-TS with
 | ||
|         mpegtsmux. Combines ancillary data on the same line if needed, as is required for MPEG-TS muxing. Can accept individual
 | ||
|         ancillary metadata streams as inputs and/or the combined stream from st2038ancdemux.
 | ||
| 
 | ||
|         If the video framerate is known, it can be signalled to the ancillary data muxer via the output caps by adding a
 | ||
|         capsfilter behind it, with e.g. meta/x-st-2038,framerate=30/1.
 | ||
| 
 | ||
|         This allows the muxer to bundle all packets belonging to the same frame (with the same timestamp), but that is not
 | ||
|         required. In case there are multiple streams with the same DID/SDID that have an ST-2038 packet for the same frame, it
 | ||
|         will prioritise the one from more recently created request pads over those from earlier created request pads (which
 | ||
|         might contain a combined stream for example if that’s fed first).
 | ||
| 
 | ||
|     -   st2038anctocc: extracts closed captions (CEA-608 and/or CEA-708) from SMPTE ST-2038 ancillary metadata streams and
 | ||
|         outputs them on the respective sometimes source pad (src_cea608 or src_cea708). The data is output as a closed caption
 | ||
|         stream with caps closedcaption/x-cea-608,format=s334-1a or closedcaption/x-cea-708,format=cdp for further processing by
 | ||
|         other GStreamer closed caption processing elements.
 | ||
| 
 | ||
|     -   cctost2038anc: takes closed captions (CEA-608 and/or CEA-708) as produced by other GStreamer closed caption processing
 | ||
|         elements and converts them into SMPTE ST-2038 ancillary data that can be fed to st2038ancmux and then to mpegtsmux for
 | ||
|         splicing/muxing into an MPEG-TS container. The line-number and horizontal-offset properties should be set to the desired
 | ||
|         line number and horizontal offset.
 | ||
| 
 | ||
| ### Analytics
 | ||
| 
 | ||
| -   Added a GstTensorMeta: This meta is designed to carry tensors from the inference element to the model-specific tensor
 | ||
|     decoder. This also includes a basic GstTensor class containing a single tensor. The actual tensor data is a GstBuffer.
 | ||
| 
 | ||
| -   Add N_TO_N relationship to GstAnalyticsRelationMeta: This makes it possible to describe N-to-N relationships. For example,
 | ||
|     between classes and regions in an instance segmentation.
 | ||
| 
 | ||
| -   Add a new analytics Mtd to carry segmentation masks: Being part of the GstAnalyticsMeta, it can be in relationship with the
 | ||
|     other Mtd, such as the classification and object detection bounding boxes.
 | ||
| 
 | ||
| -   onvifmetadataextractor: New element that can extract ONVIF metadata from GstMetas into a separate stream
 | ||
| 
 | ||
| -   originalbuffer: New plugin with originalbuffersave / originalbufferrestore elements that allow saving an original buffer,
 | ||
|     modifying it for analytics, and then restoring the original buffer content while keeping any additional metadata that was
 | ||
|     added.
 | ||
| 
 | ||
| -   relationmeta: New plugin with elements converting between GstRelationMeta and ONVIF XML metadata.
 | ||
| 
 | ||
| -   Improved Python bindings for a more Pythonic interface when iterating over GstRelationMeta’s mtd
 | ||
| 
 | ||
| ### Vulkan integration enhancements
 | ||
| 
 | ||
| -   Vulkan Integration Improvements:
 | ||
| 
 | ||
|     -   Memory Management: Non-coherent memory is now invalidated when mapping for read in vkmemory.
 | ||
| 
 | ||
|     -   Color Space Selection: The vkswapper component now chooses the correct color space based on the format.
 | ||
| 
 | ||
|     -   Vulkan Plugin Compatibility: Support added for cases where glslc is not available for building Vulkan plugins, along
 | ||
|         with GLSL compiler support for glslang.
 | ||
| 
 | ||
|     -   Fullscreen Quad Updates: Improved support for setting NULL input/output buffers and added checks for unset video info.
 | ||
| 
 | ||
|     -   Vulkan Buffer Pool Enhancements: Buffer pool access flags and usage configurations have been refined, offering better
 | ||
|         performance for video decoding and encoding.
 | ||
| 
 | ||
| -   Decoder/Encoder Improvements:
 | ||
| 
 | ||
|     -   H264 Decoder: Enhancements to the vkh264dec component for better support of extended profiles and interlaced content
 | ||
|         decoding.
 | ||
| 
 | ||
|     -   H265 Decoder fixes: vkh265dec updated for proper handling of VPS/SPS on demand, along with fixes to PicOrderCntVal.
 | ||
| 
 | ||
|     -   Encoder Performance: Various internal optimizations to the Vulkan encoder, including removal of redundant references and
 | ||
|         better management of the DPB view.
 | ||
| 
 | ||
| -   Vulkan Instance and Device Management:
 | ||
| 
 | ||
|     -   Device Handling: Added new utility functions for managing Vulkan device instances, including
 | ||
|         gst_vulkan_instance_create_device_with_index and gst_vulkan_ensure_element_device.
 | ||
| 
 | ||
|     -   Device Context Management: Updates to manage Vulkan context handling more effectively within the application.
 | ||
| 
 | ||
| ### OpenGL integration enhancements
 | ||
| 
 | ||
| -   glcolorconvert gained support for more formats and conversions:
 | ||
| 
 | ||
|     -   Planar YUV <-> planar YUV conversions
 | ||
|     -   Converting to and from v210 in general
 | ||
|     -   v210 <-> planar YUV
 | ||
|     -   UYVY and YUY2 <-> planar YUV
 | ||
|     -   v210 <-> UYVY and YUY2
 | ||
|     -   Support for Y444_10, Y444_16, I422_10, I422_12 pixel formats (both little endian and big endian variants)
 | ||
| 
 | ||
| -   gldownload can import DMABufs from a downstream pool
 | ||
| 
 | ||
| -   glupload gained a DRM raw uploader
 | ||
| 
 | ||
| ### Qt5 + Qt6 QML integration improvements
 | ||
| 
 | ||
| -   qmlglsink, qml6glsink now support external-oes textures, which allows direct DMABuf import from hardware decoders. Both also
 | ||
|     support NV12 as an input format now.
 | ||
| 
 | ||
| -   qmlglsink gained support for RGB16/BGR16 as input format
 | ||
| 
 | ||
| -   qmlgl6src can now use a downstream buffer pool when available
 | ||
| 
 | ||
| -   qmlgloverlay make the depth/stencil buffer optional, which reduces memory bandwidth on Windows.
 | ||
| 
 | ||
| ### CUDA / NVCODEC integration and feature additions
 | ||
| 
 | ||
| -   Added AV1 video encoder nvav1enc
 | ||
| 
 | ||
| -   CUDA mode nvcuda{CODEC}enc encode elements are renamed to nv{CODEC}enc and old nv{CODEC}enc implementations are removed
 | ||
| 
 | ||
| -   Added support for CUDA Stream-Ordered allocator
 | ||
| 
 | ||
| -   Added cudacompositor element which is equivalent to the software compositor element but uses CUDA
 | ||
| 
 | ||
| -   Added support for CUDA kernel precompile at plugin build time using nvcc and NVCODEC plugin can cache/reuse compiled CUDA
 | ||
|     CUBIN/PTX
 | ||
| 
 | ||
| -   cudaupload and cudadownload elements can support Jetson platform’s NVMM memory in addition to already supported desktop NVMM
 | ||
|     memory
 | ||
| 
 | ||
| -   Introduced nvdswrapper plugin which uses NVIDIA DeepStream SDK APIs with gst-cuda in an integrated way:
 | ||
| 
 | ||
|     -   nvdsdewarp: NVIDIA NVWarp360 API based dewarping element
 | ||
| 
 | ||
| ### GStreamer Direct3D12 integration
 | ||
| 
 | ||
| -   New gst-d3d12 public library. The following elements are integrated with the gst-d3d12 library:
 | ||
| 
 | ||
|     -   NVIDIA NVCODEC decoders and encoders can support D3D12 memory
 | ||
|     -   Intel QSV encoders can accept D3D12 memory
 | ||
|     -   All elements in dwrite plugin can support D3D12 memory
 | ||
| 
 | ||
| -   The d3d12 library and plugin can be built with MinGW toolchain now (in addition to MSVC)
 | ||
| 
 | ||
| -   D3D12 video decoders and d3d12videosink are promoted to have higher rank than D3D11 elements
 | ||
| 
 | ||
| -   Added support for multiple mip-levels D3D12 textures:
 | ||
| 
 | ||
|     -   Newly added d3d12mipmapping element can generate D3D12 textures with multiple mip-levels
 | ||
| 
 | ||
|     -   max-mip-levels property is added to d3d12convert, d3d12videosink, and d3d12swapchainsink element, so that the elements
 | ||
|         can generate an intermediate texture with multiple mip-levels in order to reduce downscale aliasing artifacts
 | ||
| 
 | ||
| -   d3d12convert, d3d12videosink, and d3d12swapchainsink support the GstColorBalanceInterface to offer color balancing functions
 | ||
|     such as hue, saturation, and brightness adjustment
 | ||
| 
 | ||
| -   Added d3d12ipcsink and d3d12ipcsrc elements for zero-copy GPU memory sharing between processes
 | ||
| 
 | ||
| -   d3d12upload and d3d12download support direct GPU memory copy between D3D12 and D3D12 resources
 | ||
| 
 | ||
| -   Added d3d12swapchainsink element to support DirectComposition or UWP/WinUI3 SwapChainPanel based applications
 | ||
| 
 | ||
| -   Added d3d12deinterlace element which performs deinterlacing using a GPU vendor agnostic compute shader.
 | ||
| 
 | ||
| -   d3d12screencapturesrc element can capture HDR enabled desktop correctly in DDA mode (DXGI Desktop Duplication API)
 | ||
| 
 | ||
| ### Capture and playout cards support
 | ||
| 
 | ||
| -   ajasrc: Improve clock handling, frame counting, capture timestamping, and signal loss recovery
 | ||
| 
 | ||
| -   The Blackmagic Decklink plugin gained support
 | ||
| 
 | ||
|     -   for HDR output and input (PQ + HLG static metadata)
 | ||
| 
 | ||
|     -   all modes of Quad HDMI recorder
 | ||
| 
 | ||
|     -   scheduling frames before they need to be displayed in decklinkvideosink
 | ||
| 
 | ||
| ### RTP and RTSP stack improvements
 | ||
| 
 | ||
| -   rtspsrc now supports client-managed MIKEY key management. Some RTSP servers (e.g. Axis cameras) expect the client to propose
 | ||
|     the encryption key(s) to be used for SRTP / SRTCP. This is required to allow re-keying. This mode can be enabled by enabling
 | ||
|     the "client-managed-mikey-mode" property and comes with a number of new signals ("request-rtp-key" and "request-rtcp-key"),
 | ||
|     action signals ("set-mikey-parameter" and "remove-key") and properties ("hard-limit" and "soft-limit").
 | ||
| 
 | ||
| -   rtpbin: Add new “never” and “ntp” RTCP sync modes
 | ||
| 
 | ||
|     -   Never is useful for some RTSP servers that report plain garbage both via RTCP SR and RTP-Info, for example.
 | ||
|     -   NTP is useful if synchronization should only ever happen based on RTCP SR or NTP-64 RTP header extensions.
 | ||
| 
 | ||
|     This is part of a bigger refactoring of the synchronization / offsetting code in rtpbin, which also makes it regularly emit
 | ||
|     the sync signal even if no new synchronisation information is available, controlled by the new "min-sync-interval" property.
 | ||
| 
 | ||
| -   rtpjitterbuffer: add RFC7273 active status to jitterbuffer stats so applications can easily check whether RFC7273 sync is
 | ||
|     active.
 | ||
| 
 | ||
| -   rtph265depay: Add "wait-for-keyframe" "request-keyframe" properties and improve request keyframe logic
 | ||
| 
 | ||
| -   rtppassthroughpay gained the ability to regenerate RTP timestamps from buffer timestamps via the new "retimestamp-mode"
 | ||
|     property. This is useful in a relay RTSP server if one wants to do full drift compensation and ensure that the stream coming
 | ||
|     out of gst-rtsp-server is not drifting compared to the pipeline clock and also not compared to the RTCP NTP times.
 | ||
| 
 | ||
| -   New Rust RTP payloaders and depayloaders for AC3, AMR, JPEG, KLV, MPEG-TS (MP2T), MPEG-4 (MP4A, MP4G), Opus, PCMU (uLaw),
 | ||
|     PCMA (aLaw), VP8, VP9.
 | ||
| 
 | ||
| -   New rtpbin2 based on separate rtprecv and rtpsend elements
 | ||
| 
 | ||
| ### WebRTC improvements
 | ||
| 
 | ||
| -   webrtcbin improvements
 | ||
| 
 | ||
|     -   Make basic rollbacks work
 | ||
| 
 | ||
|     -   Add "reuse-source-pads" property: When set to FALSE, if a transceiver becomes send-only or inactive then pre-existing
 | ||
|         source pads will receive an EOS event and no further traffic even after further renegotiation. When TRUE, pads will
 | ||
|         simply not receive any output when the negotiated transceiver state doesn’t have incoming traffic. If renegotiated
 | ||
|         later, the pad will receive data again.
 | ||
| 
 | ||
|     -   Early CNAME support (RFC5576): Have CNAME available to the jitterbuffer before the the first RTCP SR is received, for
 | ||
|         rapid synchronization.
 | ||
| 
 | ||
|     -   New "post-rtp-aux-sender" signal to allow for placement of an object after rtpbin, before sendbin. This is useful for
 | ||
|         objects such as congestion control elements, that don’t want to be burdened by the synchronization requirements of
 | ||
|         rtpsession.
 | ||
| 
 | ||
|     -   Create and associate transceivers earlier in negotiation, and other spec compliance improvements
 | ||
| 
 | ||
|     -   Statistics generation improvements for bundled streams
 | ||
| 
 | ||
| -   webrtcsink improvements:
 | ||
| 
 | ||
|     -   Support for more encoders: nvv4l2av1enc, vpuenc_h264 (for imx8mp), nvav1enc, av1enc, rav1enc and nvh265enc.
 | ||
| 
 | ||
|     -   The new "define-encoder-bitrates" signal allows applications to fine-tune the bitrate allocation for individual streams
 | ||
|         in cases where there are multiple encoders. By default the bitrate is split equally between encoders.
 | ||
| 
 | ||
|     -   A generic mechanism was implemented to forward metas over the control channel.
 | ||
| 
 | ||
|     -   Added a mechanism for SDP munging to handle server-specific quirks.
 | ||
| 
 | ||
|     -   Can expose a built-in web server and signalling server for prototyping and debugging purposes.
 | ||
| 
 | ||
| -   webrtcsink and webrtcsrc enhancements:
 | ||
| 
 | ||
|     -   Support for raw payloads, i.e. uncompressed audio and video
 | ||
| 
 | ||
|     -   NTP & PTP clock signalling and synchronization support (RFC 7273)
 | ||
| 
 | ||
|     -   Generic data channel control mechanism for sending upstream events back to the sender (webrtcsink)
 | ||
| 
 | ||
| -   webrtcsrc now has support for multiple producers
 | ||
| 
 | ||
| ## New elements and plugins
 | ||
| 
 | ||
| -   Many exciting new Rust elements, see Rust section below.
 | ||
| 
 | ||
| -   webview2src: new Microsoft WebView2 based web browser source element
 | ||
| 
 | ||
| -   h264ccextractor, h264ccinserter: H.264 closed caption extractor / inserter
 | ||
| 
 | ||
| -   h265ccextractor, h265ccinserter: H.265 closed caption extractor / inserter
 | ||
| 
 | ||
| -   h266parse
 | ||
| 
 | ||
| -   lcevch264decodebin
 | ||
| 
 | ||
| -   New VA elements (see below): vah266dec, vavp8enc, vajpegenc, vavp8alphadecodebin, vavp9alphadecodebin
 | ||
| 
 | ||
| -   svtjpegxsdec, svtjpegxsenc: SVT JPEG XS decoder/encoder
 | ||
| 
 | ||
| -   Many other new elements mentioned in other sections (e.g. CUDA, NVCODEC, etc.)
 | ||
| 
 | ||
| ## New element features and additions
 | ||
| 
 | ||
| -   audioconvert enhancements:
 | ||
| 
 | ||
|     -   Add possibility to reorder input channels when audioconvert has unpositionned audio channels as input. It can now use
 | ||
|         reordering configurations to automatically position those channels via the new "input-channels-reorder" and
 | ||
|         "input-channels-reorder-mode" properties.
 | ||
| 
 | ||
|     -   Better handling of setting of the mix matrix at run time
 | ||
| 
 | ||
|     -   handles new GstRequestMixMatrix custom upstream event
 | ||
| 
 | ||
| -   audiorate: Take the tolerance into account when filling gaps; better accounting of the number of samples added or dropped.
 | ||
| 
 | ||
| -   av1enc: Add "timebase" property to allow configuring a specific time base, in line with what exists for vp8enc and vp9enc
 | ||
|     already.
 | ||
| 
 | ||
| -   av1parse can parse annexb streams now, and typefinding support has been added for annexb streams as well.
 | ||
| 
 | ||
| -   The GTK3 plugin has gained support for OpenGL/WGL on Windows
 | ||
| 
 | ||
| -   fdsrc has a new "is-live" property to make it act like a live source and timestamp the received data with the clock running
 | ||
|     time.
 | ||
| 
 | ||
| -   imagefreeze: Add support for JPEG and PNG
 | ||
| 
 | ||
| -   kmssink: Extended the functionality to support buffers with DRM formats along with non-linear buffers
 | ||
| 
 | ||
| -   pitch now supports reverse playback
 | ||
| 
 | ||
| -   queue can emit the notify signal on queue level changes if the "notify-levels" property has been set.
 | ||
| 
 | ||
| -   qroverlay: the "pixel-size" property has been removed in favour of a new "size" property with slightly different semantics,
 | ||
|     where the size of the square is expressed in percent of the smallest of width and height.
 | ||
| 
 | ||
| -   rsvgdec: Negotiate resolution with downstream and scale accordingly
 | ||
| 
 | ||
| -   rtmp2: server authentication improvements
 | ||
| 
 | ||
|     -   Mimic librtmp’s behaviour and support additional connection parameters for the connect packet, which are commonly used
 | ||
|         for authentication, via the new "extra-connect-args" property.
 | ||
| 
 | ||
|     -   Add support for Limelight CDN (llnw) authentication
 | ||
| 
 | ||
| -   scaletempo has gained support for a “fit-down” mode: In fit-down mode only 1.0 rates are supported, and the element will fit
 | ||
|     audio data in buffers to their advertised duration. This is useful in speech synthesis cases, where elements such as
 | ||
|     awspolly will generate audio data from text, and assign the duration of the input text buffers to their output buffers.
 | ||
|     Translated or synthesised audio might be longer than the original inputs, so this makes sure the audio will be sped up to
 | ||
|     fit the original duration, so it doesn’t go out of sync.
 | ||
| 
 | ||
| -   souphttpsrc: Add the notion of "retry-backoff" and retry on 503 (service unavailable) and 500 (internal server error) http
 | ||
|     errors.
 | ||
| 
 | ||
| -   taginject now modifies existing tag events of the selected scope, with the new "merge-mode" property allowing finer control.
 | ||
| 
 | ||
| -   timecodestamper gained a new running-time source mode that converts the buffer running time into timecodes.
 | ||
| 
 | ||
| -   playbin3, uridecodebin3, parsebin
 | ||
| 
 | ||
|     -   lots of stream-collection handling and stability/reliability fixes
 | ||
|     -   error/warning/info message now include the URI (if known) and stream-id
 | ||
|     -   missing plugin messages include the stream-id
 | ||
| 
 | ||
| -   videocodectestsink gained support for GBR_10LE, GRAY8 and GRAY10_LE{16,32} pixel formats
 | ||
| 
 | ||
| -   videoflip gained support for the Y444_16LE and Y444_16BE pixel formats
 | ||
| 
 | ||
| -   videoconvertscale:
 | ||
| 
 | ||
|     -   Handle pixel aspect ratios with large numerators or denominators
 | ||
|     -   Explicitly handle the overlaycomposition meta caps feature, so it doesn’t get dropped unnecessarily
 | ||
| 
 | ||
| -   waylandsink prefers DMABuf over system memory now
 | ||
| 
 | ||
| -   x264enc has a new "nal-hrd" property to make the encoder signal HRD information, which is required for Blu-ray streams,
 | ||
|     television broadcast and a few other specialist areas. It can also be used to force true CBR, and will cause the encoder to
 | ||
|     output null padding packets.
 | ||
| 
 | ||
| -   zbar: add support for binary mode and getting symbols as raw bytes instead of a text string.
 | ||
| 
 | ||
| ## Plugin and library moves
 | ||
| 
 | ||
| -   macOS: atdec was moved from the applemedia plugin in -bad to the osxaudio plugin in -good, in order to be able to share
 | ||
|     audio-related helper methods.
 | ||
| 
 | ||
| ## Plugin and element removals
 | ||
| 
 | ||
| -   None in this cycle
 | ||
| 
 | ||
| ## Miscellaneous API additions
 | ||
| 
 | ||
| ### GStreamer Core
 | ||
| 
 | ||
| -   gst_meta_api_type_set_params_aggregator() allows setting an GstAllocationMetaParamsAggregator function for metas, which has
 | ||
|     been implemented for GstVideoMeta and is used to aggregate alignment requirements of multiple tee branches.
 | ||
| 
 | ||
| -   gst_debug_print_object() and gst_debug_print_segment() have been made public API. The can be used to easily get string
 | ||
|     representations of various types of (mini)objects in custom log handlers.
 | ||
| 
 | ||
| -   Added gst_aggregator_push_src_event(), so subclasses don’t just push events directly onto the source pad bypassing the base
 | ||
|     class without giving it the chance to send out any pending serialised events that should be sent out before.
 | ||
| 
 | ||
| -   GstMessage has gained APIs to generically add “details” to messages:
 | ||
| 
 | ||
|     -   gst_message_set_details()
 | ||
|     -   gst_message_get_details()
 | ||
|     -   gst_message_writable_details()
 | ||
|     -   gst_message_parse_error_writable_details()
 | ||
|     -   gst_message_parse_warning_writable_details()
 | ||
|     -   gst_message_parse_info_writable_details() This is used in uridecodebin3 to add the triggering URI to any INFO, WARNING
 | ||
|         or ERROR messages posted on the bus, and in decodebin3 to add the stream ID to any missing plugin messages posted on the
 | ||
|         bus.
 | ||
| 
 | ||
| -   gst_util_floor_log2() returns smallest integral value not bigger than log2(v).
 | ||
| 
 | ||
| -   gst_util_fraction_multiply_int64() is a 64-bit variant of gst_util_fraction_multiply().
 | ||
| 
 | ||
| #### GstIdStr replaces GQuark in structure and caps APIs
 | ||
| 
 | ||
| -   GQuarks are integer identifiers for strings that are inserted into a global hash table, allowing in theory for cheap
 | ||
|     equality comparisons. In GStreamer they have been used to represent GstStructure names and field names. The problem is that
 | ||
|     these strings once added to the global string table can never be freed again, which can lead to ever-increasing memory usage
 | ||
|     for processes where such name identifiers are created based on external input or on locally-created random identifiers.
 | ||
| 
 | ||
| -   GstIdStr is a new data structure made to replace quarks in our APIs. It can hold a short string inline, a static string, or
 | ||
|     a reference to a heap-allocated longer string, and allows for cheap storage of short strings and cheap comparisons. It does
 | ||
|     not involve access to a global hash table protected by a global lock, and as most strings used in GStreamer structures are
 | ||
|     very short, it is actually more performant than quarks in many scenarios.
 | ||
| 
 | ||
| -   GQuark-using APIs in GstStructure or GstCaps have been deprecated and equivalent APIs using GstIdStr have been added
 | ||
|     instead. For more details about this change watch Sebastian’s GStreamer Conference presentation “GQuark in GStreamer
 | ||
|     structures - what nonsense!”.
 | ||
| 
 | ||
| -   Most applications and plugins will have been using the plain string-based APIs which are not affected by this change.
 | ||
| 
 | ||
| #### GstVecDeque
 | ||
| 
 | ||
| -   Moved GstQueueArray as GstVecDeque into core for use in GstBus, the ringbuffer logger and in GstBufferPool, where an overly
 | ||
|     complicated signaling mechanism using GstAtomicQueue and GstPoll was replaced with GstVecDeque and a simple mutex/cond.
 | ||
| 
 | ||
| -   GstQueueArray in libgstbase was deprecated in favour of GstVecDeque.
 | ||
| 
 | ||
| -   GstAtomicQueue will be deprecated once all users in GStreamer have been moved over to GstVecDeque.
 | ||
| 
 | ||
| ### Audio Library
 | ||
| 
 | ||
| -   Added gst_audio_reorder_channels_with_reorder_map() which allows reordering the samples with a pre-calculated reorder map
 | ||
|     instead of re-calculating the reorder map every time.
 | ||
| 
 | ||
| -   Add top-surround-left and top-surround-right channel positions
 | ||
| 
 | ||
| -   GstAudioConverter now supports more numerical types for the mix matrix, namely double, int, int64, uint, and uint64 in
 | ||
|     addition to plain floats.
 | ||
| 
 | ||
| ### Plugins Base Utils Library
 | ||
| 
 | ||
| -   New AV1 caps utility functions for AV1 Codec Configuration Record codec_data handling
 | ||
| 
 | ||
| -   The GstEncodingProfile (de)serialization functions are now public
 | ||
| 
 | ||
| -   GstEncodingProfile gained a way to specify a factory-name when specifying caps. In some cases you want to ensure that a
 | ||
|     specific element factory is used while requiring some specific caps, but this was not possible so far. You can now do
 | ||
|     e.g. qtmux:video/x-prores,variant=standard|factory-name=avenc_prores_ks to ensure that the avenc_prores_ks factory is used
 | ||
|     to produce the variant of prores video stream.
 | ||
| 
 | ||
| ### Tag Library
 | ||
| 
 | ||
| -   EXIF handling now support the CAPTURING_LIGHT_SOURCE tag
 | ||
| 
 | ||
| -   Vorbis tag handling gained support for the LYRICS tag
 | ||
| 
 | ||
| ### Video Library and OpenGL Library
 | ||
| 
 | ||
| -   gst_video_convert_sample(), gst_video_convert_sample_async() gained support for D3D12 conversion.
 | ||
| 
 | ||
| -   GstVideoEncoder: gst_video_encoder_release_frame() and gst_video_encoder_drop_frame() have been made available as public
 | ||
|     API.
 | ||
| 
 | ||
| -   Navigation: gained mouse double click event support
 | ||
| 
 | ||
| -   Video element QoS handling was improved so as to not overshoot the QoS earliest time by a factor of 2. This was fixed in the
 | ||
|     video decoder, encoder, aggregator and audiovisualizer base classes, as well as in the adaptivedemux, deinterlace,
 | ||
|     monoscope, shapewipe, and (old) videomixer elements.
 | ||
| 
 | ||
| -   GstVideoConverter gained fast paths for v210 to/from I420_10 / I422_10
 | ||
| 
 | ||
| -   New gst_video_dma_drm_format_from_gst_format() helper function that converts a video format into a dma drm fourcc / modifier
 | ||
|     pair, plus gst_video_dma_drm_format_to_gst_format() which will do the reverse.
 | ||
| 
 | ||
| -   In the same vein gst_gl_dma_buf_transform_gst_formats_to_drm_formats() and
 | ||
|     gst_gl_dma_buf_transform_drm_formats_to_gst_formats() have been added to the GStreamer OpenGL support library.
 | ||
| 
 | ||
| -   GLDisplay/EGL: Add API (gst_gl_display_egl_set_foreign()) for overriding foreign-ness of the EGLDisplay in order to control
 | ||
|     whether GStreamer should call eglTerminate() or not.
 | ||
| 
 | ||
| -   Additional DMA DRM format definitions/mappings:
 | ||
| 
 | ||
|     -   NV15, NV20, NV30
 | ||
|     -   NV12_16L32S, MT2110T, MT2110R as used on Meditek SoCs
 | ||
|     -   NV12_10LE40
 | ||
|     -   RGB15, GRAY8, GRAY16_LE, GRAY16_BE
 | ||
|     -   plus support for big endian DRM formats and DRM vendor modifiers
 | ||
| 
 | ||
| New Raw Video Formats
 | ||
| 
 | ||
| -   Packed 4:2:2 YUV with 16 bits per channel:
 | ||
|     -   Y216_LE, Y216_BE
 | ||
| -   Packed 4:4:4:4 YUV with alpha, with 16 bits per channel:
 | ||
|     -   Y416_LE, Y416_BE
 | ||
| -   10-bit grayscale, packed into 16-bit words with left padding:
 | ||
|     -   GRAY10_LE16
 | ||
| 
 | ||
| ### GstPlay Library
 | ||
| 
 | ||
| -   Add stream-id based selection of streams to better match playbin3’s API:
 | ||
|     -   Add accessors for the stream ID and selection API based on the stream ID:
 | ||
|         -   gst_play_stream_info_get_stream_id()
 | ||
|         -   gst_play_set_audio_track_id()
 | ||
|         -   gst_play_set_video_track_id()
 | ||
|         -   gst_play_set_subtitle_track_id()
 | ||
|         -   gst_play_set_track_ids()
 | ||
|     -   Deprecate the old index-based APIs:
 | ||
|         -   gst_play_stream_info_get_index()
 | ||
|         -   gst_play_set_audio_track()
 | ||
|         -   gst_play_set_video_track()
 | ||
|         -   gst_play_set_subtitle_track()
 | ||
|     -   Remove old playbin support
 | ||
|     -   Implement the track enable API based on stream selection
 | ||
| -   Distinguish missing plugin errors and include more details (uri, and stream-id if available) in error/warning messages:
 | ||
|     -   gst_play_message_get_uri()
 | ||
|     -   gst_play_message_get_stream_id()
 | ||
|     -   GST_PLAY_ERROR_MISSING_PLUGIN
 | ||
|     -   gst_play_message_parse_error_missing_plugin()
 | ||
|     -   gst_play_message_parse_warning_missing_plugin()
 | ||
| -   Improve play message API inconsistencies:
 | ||
|     -   Consistently name parse functions according to their message type:
 | ||
|         -   gst_play_message_parse_duration_changed()
 | ||
|         -   gst_play_message_parse_buffering()
 | ||
|     -   Deprecate the misnamed functions:
 | ||
|         -   gst_play_message_parse_duration_updated()
 | ||
|         -   gst_play_message_parse_buffering_percent()
 | ||
|     -   Add missing parse functions:
 | ||
|         -   gst_play_message_parse_uri_loaded()
 | ||
|         -   gst_play_message_parse_seek_done()
 | ||
| -   Support disabling the selected track at startup
 | ||
| 
 | ||
| ## Miscellaneous performance, latency and memory optimisations
 | ||
| 
 | ||
| -   dvdspu: use multiple minimal sized PGS overlay rectangles instead of a single large one to minimise the total blitting
 | ||
|     surface in case of disjointed rectangles.
 | ||
| 
 | ||
| -   video-frame: reduce number of memcpy() calls on frame copies if possible
 | ||
| 
 | ||
| -   video-converter: added fast path conversions between v210 and I420_10 / I422_10
 | ||
| 
 | ||
| -   As always there have been plenty of performance, latency and memory optimisations all over the place.
 | ||
| 
 | ||
| ## Miscellaneous other changes and enhancements
 | ||
| 
 | ||
| -   netclientclock: now also emits the clock synced signal when corrupted to signal that sync has been lost.
 | ||
| 
 | ||
| -   GstValue, GstStructure: can now (de)serialize string arrays (G_TYPE_STRV)
 | ||
| 
 | ||
| ## Tracing framework and debugging improvements
 | ||
| 
 | ||
| -   dot files (pipeline graph dumps) are now written to disk atomically
 | ||
| 
 | ||
| -   tracing: add hooks for gst_pad_send_event_unchecked() and GstMemory init/free
 | ||
| 
 | ||
| -   tracers: Simplify params handling using GstStructure and object properties and move tracers over to property-based
 | ||
|     configuration (leaks, latency).
 | ||
| 
 | ||
| -   textoverlay, clockoverlay, timeoverlay: new "response-time-compensation" property that makes the element render the text or
 | ||
|     timestamp twice: Once in the normal location and once in a different sequentially predictable location for every frame. This
 | ||
|     is useful when measuring video latency by taking a photo with a camera of two screens showing the test video overlayed with
 | ||
|     timeoverlay or clockoverlay. In these cases, you will often see ghosting if the display’s pixel response time is not great,
 | ||
|     which makes it difficult to discern what the current timestamp being shown is. Rendering in a different location for each
 | ||
|     frame makes it easy to tell what the latest timestamp is. In addition, you can also use the fade-time of the previous frame
 | ||
|     to measure with sub-framerate accuracy when the photo was taken, not just clamped to the framerate, giving you a higher
 | ||
|     precision latency value.
 | ||
| 
 | ||
| New tracers
 | ||
| 
 | ||
| -   memory-tracer: New tracer that can track memory usage over time
 | ||
| 
 | ||
| -   pad-push-timings: New tracer for tracing pad push timings
 | ||
| 
 | ||
| -   pcap-writer: New tracer that can store the buffers flowing through a pad as PCAP file
 | ||
| 
 | ||
| Dot tracer/viewer
 | ||
| 
 | ||
| -   New dots tracer that simplifies the pipeline visualization workflow:
 | ||
|     -   Automatically configures dot file directory and cleanup
 | ||
|     -   Integrates with the pipeline-snapshotS tracer to allow dumping pipeline on demand from the gst-dots-viewer web interface
 | ||
|     -   Uses GST_DEBUG_DUMP_DOT_DIR or falls back to $XDG_CACHE_HOME/gstreamer-dots
 | ||
| -   New gst-dots-viewer web tool for real-time pipeline visualization
 | ||
|     -   Provides interface to browse and visualize pipeline dot files
 | ||
|     -   Features on-demand pipeline snapshots via “Dump Pipelines” button
 | ||
|     -   WebSocket integration for live updates
 | ||
|     -   Uses GST_DEBUG_DUMP_DOT_DIR or falls back to $XDG_CACHE_HOME/gstreamer-dots
 | ||
| -   Simple usage:
 | ||
|     -   gst-dots-viewer (starts server)
 | ||
|     -   GST_TRACERS=dots gst-launch-1.0 videotestsrc ! autovideosink (runs with tracer)
 | ||
|     -   View at http://localhost:3000
 | ||
| 
 | ||
| Debug logging system improvements
 | ||
| 
 | ||
| -   Nothing major in this cycle.
 | ||
| 
 | ||
| ## Tools
 | ||
| 
 | ||
| -   gst-inspect-1.0 documents tracer properties now and shows element flags
 | ||
| 
 | ||
| -   gst-launch-1.0 will show error messages posted during pipeline construction
 | ||
| 
 | ||
| ## GStreamer FFmpeg wrapper
 | ||
| 
 | ||
| -   Add support for H.266/VVC decoder
 | ||
| 
 | ||
| -   Add mappings for the Hap video codec, the Quite OK Image codec (QOI) and the M101 Matrox uncompressed SD video codec.
 | ||
| 
 | ||
| -   Don’t register elements for which we have no caps and which were non-functional as a result (showing unknown/unknown caps).
 | ||
| 
 | ||
| -   The S302M audio encoder now supports up to 8 channels.
 | ||
| 
 | ||
| -   Various tag handling improvements in the avdemux wrappers, especially when there are both upstream tags and additional local
 | ||
|     tags.
 | ||
| 
 | ||
| -   Support for 10-bit grayscale formats
 | ||
| 
 | ||
| ## GStreamer RTSP server
 | ||
| 
 | ||
| -   GstRTSPOnvifMediaFactoryClass gained a ::create_backchannel_stream() vfunc. This allows subclasses to delay creation of the
 | ||
|     backchannel to later in the sequence, which is useful in scenarios where the RTSP server acts as a relay and the supported
 | ||
|     caps depend on the upstream camera, for example.
 | ||
| 
 | ||
| -   The ONVIF backchannel example now features support for different codecs, including AAC.
 | ||
| 
 | ||
| ## VA-API integration
 | ||
| 
 | ||
| VA plugin
 | ||
| 
 | ||
| -   New VA elements:
 | ||
| 
 | ||
|     -   H.266 / VVC video decoder
 | ||
|     -   VP8 video encoder
 | ||
|     -   JPEG encoder
 | ||
|     -   VP9 + VP8 alpha decodebin
 | ||
| 
 | ||
|     Remember that the availability of these elements depends on your platform and driver.
 | ||
| 
 | ||
| -   There are a lot of improvements and bug fixes, to hightlight some of them:
 | ||
| 
 | ||
|     -   Improved B pyramid mode for both H264 and HEVC encoding when reference frame count exceeds 2, optimizing pyramid level
 | ||
|         handling.
 | ||
|     -   Enabled ICQ and QVBR modes for several encoders, including H264, H265, VP9 and AV1.
 | ||
|     -   Updated rate control features by setting the quality factor parameter, while improving bitrate change handling.
 | ||
|     -   Improved VP9 encoder’s ability to avoid reopening or renegotiating encoder settings when parameters remain stable.
 | ||
|     -   Added functionality to adjust the trellis parameter in encoders.
 | ||
|     -   Optimize encoders throughput with the introduction of output delay.
 | ||
|     -   Added support for new interpolation methods for scaling and improvements for handling interlace modes.
 | ||
| 
 | ||
| GStreamer-VAAPI is now deprecated
 | ||
| 
 | ||
| -   gstreamer-vaapi has been deprecated and is no longer actively maintained. Users who rely on gstreamer-vaapi are encouraged
 | ||
|     to migrate to the va plugin’s elements at the earliest opportunity.
 | ||
| 
 | ||
| -   vaapi*enc encoders have been demoted to a rank of None, so will no longer be autoplugged in encodebin. They have also no
 | ||
|     longer advertise dmabuf caps or unusual pixel formats on their input pad template caps.
 | ||
| 
 | ||
| ## GStreamer Video4Linux2 support
 | ||
| 
 | ||
| -   Implemented DMA_DRM caps negotiation
 | ||
| 
 | ||
| -   Framerate negotiation improvements
 | ||
| 
 | ||
| -   Support for P010 and BGR10A2_LE pixel formats
 | ||
| 
 | ||
| -   The V4L2 stateless decoders now support inter-frame resolution changes for AV1 and VP9
 | ||
| 
 | ||
| -   The V4L2 stateful encoders can now handle dynamic frame rates (0/1), and colorimetry negotiation was also improved.
 | ||
| 
 | ||
| ## GStreamer Editing Services and NLE
 | ||
| 
 | ||
| -   Added support for reverse playback with a new reverse property on nlesource which is exposed child property on GESClip
 | ||
| 
 | ||
| -   Input channels reordering for flexible audio channel mapping
 | ||
| 
 | ||
| -   Added support for transition in the ges-launch-1.0 timeline description format
 | ||
| 
 | ||
| -   Added support for GstContext sharing in GESTimeline
 | ||
| 
 | ||
| -   Added basic support for duplicated children property in GESTimelineElement
 | ||
| 
 | ||
| -   validate: Add an action type to group clips
 | ||
| 
 | ||
| ## GStreamer validate
 | ||
| 
 | ||
| -   Added new action types:
 | ||
| 
 | ||
|     -   start-http-server: Start a new instance of our HTTP test server
 | ||
|     -   http-requests: Send an HTTP request to a server, designed to work with our test http server
 | ||
| 
 | ||
| -   HTTP server control endpoints to allow scenarios to control the server behavior, allowing simulating server failures from
 | ||
|     tests
 | ||
| 
 | ||
| -   Improved the select-streams action type, adding support for selecting the same streams several times
 | ||
| 
 | ||
| -   Added support for forcing monitoring of all pipelines in validatetest files
 | ||
| 
 | ||
| -   Enhanced support for expected Error messages on the bus
 | ||
| 
 | ||
| -   Added ways to retrieve HTTP server port in .validatetest files
 | ||
| 
 | ||
| -   Added support for lldb in the gst-validate-launcher
 | ||
| 
 | ||
| ## GStreamer Python Bindings
 | ||
| 
 | ||
| gst-python is an extension of the regular GStreamer Python bindings based on gobject-introspection information and PyGObject,
 | ||
| and provides “syntactic sugar” in form of overrides for various GStreamer APIs that makes them easier to use in Python and more
 | ||
| pythonic; as well as support for APIs that aren’t available through the regular gobject-introspection based bindings, such as
 | ||
| e.g. GStreamer’s fundamental GLib types such as Gst.Fraction, Gst.IntRange etc.
 | ||
| 
 | ||
| -   The python Meson build option has been renamed to python-exe (and will yield to the monorepo build option of the same name
 | ||
|     if set, in a monorepo build context).
 | ||
| 
 | ||
| -   Added an iterator for AnalyticsRelationMeta
 | ||
| 
 | ||
| -   Implement __eq__ for Mtd classes
 | ||
| 
 | ||
| -   Various build fixes and Windows-related fixes.
 | ||
| 
 | ||
| ## GStreamer C# Bindings
 | ||
| 
 | ||
| -   The C# bindings have been updated for the latest GStreamer 1.26 API
 | ||
| 
 | ||
| ## GStreamer Rust Bindings and Rust Plugins
 | ||
| 
 | ||
| The GStreamer Rust bindings and plugins are released separately with a different release cadence that’s tied to the gtk-rs
 | ||
| release cycle.
 | ||
| 
 | ||
| The latest release of the bindings (0.23) has already been updated for the new GStreamer 1.26 APIs, and works with any GStreamer
 | ||
| version starting at 1.14.
 | ||
| 
 | ||
| gst-plugins-rs, the module containing GStreamer plugins written in Rust, has also seen lots of activity with many new elements
 | ||
| and plugins. The GStreamer 1.26 binaries will be tracking the main branch of gst-plugins-rs for starters and then track the 0.14
 | ||
| branch once that has been released (around summer 2025). After that, fixes from newer versions will be backported as needed to
 | ||
| the 0.14 branch for future 1.26.x bugfix releases.
 | ||
| 
 | ||
| Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++.
 | ||
| 
 | ||
| ### New Rust elements
 | ||
| 
 | ||
| -   awstranscriber2, awstranslate: New elements around the AWS transcription and translation services.
 | ||
| 
 | ||
| -   cea708mux: New element that allows to mux multiple CEA708 services into a single stream.
 | ||
| 
 | ||
| -   cdpserviceinject: New element for injecting a CDP service descriptor into closed caption CDP packets
 | ||
| 
 | ||
| -   cea708overlay: New element for overlaying CEA608 / CEA708 closed captions over video streams.
 | ||
| 
 | ||
| -   gopbuffer: New element that can buffer a minimum duration of data delimited by discrete GOPs (Group of Picture)
 | ||
| 
 | ||
| -   hlscmafsink, hlssink3: New single-variant HLS sink elements that can output CMAF (fMP4) or MPEG-TS fragments.
 | ||
| 
 | ||
| -   hlsmultivariantsink: New sink element that can output an HLS stream with multiple variants
 | ||
| 
 | ||
| -   mpegtslivesrc: New source element that can wrap a live MPEG-TS source (e.g. SRT or UDP source) and provides a clock based on
 | ||
|     the PCR.
 | ||
| 
 | ||
| -   onvifmetadataextractor: New element that can extract ONVIF metadata from GstMetas into a separate stream
 | ||
| 
 | ||
| -   originalbuffer: New plugin with originalbuffersave / originalbufferrestore elements that allow saving an original buffer,
 | ||
|     modifying it for analytics, and then restoring the original buffer content while keeping any additional metadata that was
 | ||
|     added.
 | ||
| 
 | ||
| -   polly: New element around the AWS text-to-speech polly services
 | ||
| 
 | ||
| -   quinn: New plugin that contains various QUIC-based elements for working with raw QUIC streams, RTP-over-QUIC (RoQ) and
 | ||
|     WebTransport.
 | ||
| 
 | ||
| -   relationmeta: New plugin with elements converting between GstRelationMeta and ONVIF XML metadata.
 | ||
| 
 | ||
| -   New Rust RTP payloaders and depayloaders for AC3, AMR, JPEG, KLV, MPEG-TS (MP2T), MPEG-4 (MP4A, MP4G), Opus, PCMU (uLaw),
 | ||
|     PCMA (aLaw), VP8, VP9.
 | ||
| 
 | ||
| -   New rtpbin2 based on rtprecv / rtpsend elements
 | ||
| 
 | ||
| -   speechmatics: New transcriber / speech-to-text and translation element
 | ||
| 
 | ||
| -   New spotifylyricssrc element for grabbing lyrics from Spotify.
 | ||
| 
 | ||
| -   streamgrouper: New element that takes any number of streams as input and adjusts their stream-start events in such a way
 | ||
|     that they all belong to the same stream group.
 | ||
| 
 | ||
| -   translationbin: Helper bin around translation elements, similar to the already existing transcriberbin for transcriptions.
 | ||
| 
 | ||
| -   tttocea708: New element for converting timed-text to CEA708 closed captions
 | ||
| 
 | ||
| -   A VVdeC-based H.266 decoder element was added to the Rust plugins, based on the Fraunhofer Versatile Video Decoder library.
 | ||
| 
 | ||
| For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.12 (shipped with GStreamer
 | ||
| 1.24) and 0.14.x (shipped with GStreamer 1.26).
 | ||
| 
 | ||
| Note that at the time of GStreamer 1.26.0 gst-plugins-rs 0.14 was not released yet and the git main branch was included instead
 | ||
| (see above). As such, the ChangeLog also did not contain the changes between the latest 0.13 release and 0.14.0.
 | ||
| 
 | ||
| ## Build and Dependencies
 | ||
| 
 | ||
| -   Meson >= 1.4 is now required for all modules
 | ||
| 
 | ||
| -   liborc >= 0.4.41 is strongly recommended
 | ||
| 
 | ||
| -   libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675).
 | ||
| 
 | ||
| -   The ASIO plugin dropped its external SDK header dependency, so it can always be built and shipped more easily.
 | ||
| 
 | ||
| -   Require tinyalsa >= 1.1.0 when building the tinyalsa plugin
 | ||
| 
 | ||
| -   The srtp plugin now requires libsrtp2, support for libsrtp1 was dropped.
 | ||
| 
 | ||
| Monorepo build
 | ||
| 
 | ||
| -   The FFmpeg subproject wrap was updated to 7.1
 | ||
| 
 | ||
| -   Many other wrap updates
 | ||
| 
 | ||
| gstreamer-full
 | ||
| 
 | ||
| -   No major changes
 | ||
| 
 | ||
| Development environment
 | ||
| 
 | ||
| -   Local pre-commit checks via git hooks have been moved over to pre-commit, including the code indentation check.
 | ||
| 
 | ||
| -   Code indentation checking no longer relies on a locally installed copy of GNU indent (which had different outcomes depending
 | ||
|     on the exact version installed). Instead pre-commit will automatically install the gst-indent-1.0 indentation tool through
 | ||
|     pip, which also works on Windows and macOS.
 | ||
| 
 | ||
| -   A pre-commit hook has been added to check documentation cache updates and since tags.
 | ||
| 
 | ||
| -   Many meson wrap updates, including to FFmpeg 7.1
 | ||
| 
 | ||
| -   The uninstalled development environment should work better on macOS now, also in combination with homebrew (e.g. when
 | ||
|     libsoup comes from homebrew).
 | ||
| 
 | ||
| -   New python-exe Meson build option to override the target Python installation to use. This will be picked up by the
 | ||
|     gst-python and gst-editing-sevices subprojects.
 | ||
| 
 | ||
| ## Platform-specific changes and improvements
 | ||
| 
 | ||
| ### Android
 | ||
| 
 | ||
| -   The recommended mechanism to build Android apps has changed from Android.mk to CMake-in-Gradle using
 | ||
|     FindGStreamerMobile.cmake. Android.mk support has been deprecated and will be removed in the next stable release. For more
 | ||
|     information, see below, in the Cerbero section.
 | ||
| -   More H.264/H.265 profiles and levels have been added to the androidmedia hardware-accelerated video encoder and decoder
 | ||
|     elements, along with mappings for a number of additional pixel formats for P010, packed 4:2:0 variants and RGBA layouts,
 | ||
|     which fixes problems with android decoders refusing to output raw video frames with decoders that announce support for these
 | ||
|     common pixel formats and only allow the ‘hardware surfaces output’ path.
 | ||
| 
 | ||
| ### Apple macOS and iOS
 | ||
| 
 | ||
| -   atenc: added an Apple AAC audio encoder
 | ||
| 
 | ||
| -   atdec can now decode audio with more than two channels
 | ||
| 
 | ||
| -   vtenc has received various bug fixes as well as a number of new features:
 | ||
| 
 | ||
|     -   Support for HEVC with alpha encoding via the new vtenc_h265a element
 | ||
|     -   additional rate control options for constant bitrate encoding (only supported on macOS 13.0+ and iOS 16.0+ on Apple
 | ||
|         Silicon), setting data rate limits, and emulating CBR mode via data rate limits where CBR is not supported.
 | ||
|     -   HLG color transfer support
 | ||
|     -   new "max-frame-delay" property (for ProRes)
 | ||
| 
 | ||
| -   Better macOS support for gst-validate tools which now use gst_macos_main() and support lldb
 | ||
| 
 | ||
| -   The osxaudio device provider exposes more properties including a unique id
 | ||
| 
 | ||
| -   osxaudio will automatically set up AVAudioSession on iOS and always expose the maximum number of channels a device supports
 | ||
|     with an unpositioned layout.
 | ||
| 
 | ||
| -   The monorepo development environment should work better on macOS now
 | ||
| 
 | ||
| -   CMake apps that build macOS and iOS apps can consume GStreamer more easily now, using FindGStreamer.cmake or
 | ||
|     FindGStreamerMobile.cmake respectively.
 | ||
| 
 | ||
| -   In the near future, CMake in Xcode will be the preferred way of building the iOS tutorials. See below, in the Cerbero
 | ||
|     section.
 | ||
| 
 | ||
| ### Windows
 | ||
| 
 | ||
| -   webview2src: new Microsoft WebView2 based web browser source element
 | ||
| 
 | ||
| -   The mediafoundation plugin can also be built with MinGW now.
 | ||
| 
 | ||
| -   The GTK3 plugin has gained support for OpenGL/WGL on Windows
 | ||
| 
 | ||
| -   qsv: Add support for d3d12 interop in encoder, via D3D11 textures
 | ||
| 
 | ||
| ### Cerbero
 | ||
| 
 | ||
| Cerbero is a meta build system used to build GStreamer plus dependencies on platforms where dependencies are not readily
 | ||
| available, such as Windows, Android, iOS, and macOS.
 | ||
| 
 | ||
| General improvements
 | ||
| 
 | ||
| -   New features:
 | ||
| 
 | ||
|     -   Python bindings support has been re-introduced and now supports Linux, Windows (MSVC) and macOS. Simply downloading the
 | ||
|         official binaries and setting PYTHONPATH to the appropriate directory is sufficient.
 | ||
| 
 | ||
|         -   This should make it easier for macOS and Windows users to use Python libraries, frameworks, and projects that use
 | ||
|             GStreamer such as Pitivi and gst-python-ml.
 | ||
| 
 | ||
|     -   Introspection support has been re-introduced on Linux, Windows (MSVC), and macOS.
 | ||
| 
 | ||
|     -   New variants assert and checks to disable GLib assertions and runtime checks for performance reasons. Please note that
 | ||
|         these are not recommended because they have significant behavioural side-effects, make debugging harder, and should only
 | ||
|         be enabled when targeting extremely resource-constrained platforms.
 | ||
| 
 | ||
| -   API/ABI changes:
 | ||
| 
 | ||
|     -   Libsoup has been upgraded from 2.74 to 3.6, which is an API and ABI breaking change. The soup and adaptivedemux2 plugins
 | ||
|         are unchanged, but your applications may need updating since libsoup-2.4 and libsoup-3.0 cannot co-exist in the same
 | ||
|         process.
 | ||
| 
 | ||
|     -   OpenSSL has been updated from 1.1.1 to 3.4, which is an ABI and API breaking change. Plugins are unchanged, but your
 | ||
|         applications may need updating.
 | ||
| 
 | ||
| -   Plugins added:
 | ||
| 
 | ||
|     -   The svt-av1 plugin is now shipped in the binary releases for all platforms.
 | ||
| 
 | ||
|     -   The svt-jpeg-xs plugin is now shipped in the binary releases for all platforms.
 | ||
| 
 | ||
|     -   The x265 plugin is now shipped in the binary releases for all platforms.
 | ||
| 
 | ||
|     -   All gst-plugins-rs elements are now shipped in the binary releases for all platforms, except those that have C/C++
 | ||
|         system-deps like GTK4. For a full list, see the Rust section above.
 | ||
| 
 | ||
| -   Plugins changed:
 | ||
| 
 | ||
|     -   The rsvg plugin now uses librsvg written in Rust. The only side-effects of this should be better SVG rendering and
 | ||
|         slightly larger plugin size.
 | ||
| 
 | ||
|     -   The webrtc Rust plugin now also supports aws and livekit integrations .
 | ||
| 
 | ||
| -   Plugins removed:
 | ||
| 
 | ||
|     -   webrtc-audio-processing has been updated to 2.0, which means the isac plugin is no longer shipped.
 | ||
| 
 | ||
| -   Development improvements:
 | ||
| 
 | ||
|     -   Support for the shell command has been added to cross-macos-universal, since the prefix is executable despite being a
 | ||
|         cross-compile target
 | ||
| 
 | ||
|     -   More recipes have been ported away from Autotools to Meson and CMake, speeding up the build and increasing platform
 | ||
|         support.
 | ||
| 
 | ||
| #### macOS
 | ||
| 
 | ||
| -   Python bindings support on macOS only supports using the Xcode-provided Python 3
 | ||
| 
 | ||
| -   MoltenVK support in the applemedia plugin now also works on arm64 when doing a cross-universal build.
 | ||
| 
 | ||
| #### iOS
 | ||
| 
 | ||
| -   CMake inside Xcode will soon be the recommended way to consume GStreamer when building iOS apps, similar to Android apps.
 | ||
| 
 | ||
|     -   FindGStreamerMobile.cmake is the recommended way to consume GStreamer now
 | ||
| 
 | ||
|     -   Tutorials and examples still use Xcode project files, but CMake support will be the active focus going forward
 | ||
| 
 | ||
| #### Windows
 | ||
| 
 | ||
| -   The minimum supported OS version is now Windows 10.
 | ||
| 
 | ||
|     -   GStreamer itself can still be built for an older Windows, so if your project is majorly impacted by this, please open an
 | ||
|         issue with details.
 | ||
| 
 | ||
| -   The Windows MSI installers are now based on WiX v5, with several improvements including a much faster MSI creation process,
 | ||
|     improved naming in Add/Remove Programs, and more.
 | ||
| 
 | ||
|     -   Windows installer packages: Starting with 1.26, due to security reasons, the default installation directory has changed
 | ||
|         from C:\gstreamer to the Program Files folder, e.g. C:\Program Files (x86)\gstreamer for the 32-bit package on 64-bit
 | ||
|         Windows. If you upgrade from 1.24 or older versions, the 1.26 installers will NOT keep using the existing folder.
 | ||
|         Nevertheless if you were using C:\gstreamer we strongly recommend you double-check the install location.
 | ||
| 
 | ||
|     -   Note for MSI packagers: Starting with 1.26, the installers were ported to WiX 5.0. As part of this, the property for
 | ||
|         setting the installation directory has been changed to INSTALLDIR, and it now requires a full path to the desired
 | ||
|         directory, e.g. C:\gstreamer instead of C:\.
 | ||
| 
 | ||
|     -   Cross-MinGW build no longer supports the creation of MSIs. Please use tarballs.
 | ||
| 
 | ||
| -   MinGW:
 | ||
| 
 | ||
|     -   MinGW toolchain has been updated from GCC 8.2 → 14.2 and MinGW 6.0 → 12.0
 | ||
| 
 | ||
|     -   The mediafoundation plugin is also shipped in the MinGW packages now.
 | ||
| 
 | ||
|     -   The d3d12 plugin is also shipped in the MinGW packages now.
 | ||
| 
 | ||
|     -   Rust support has been enabled on MinGW 64-bit. Rust support cannot work on 32-bit MinGW due to differences in exception
 | ||
|         handling between our 32-bit MinGW toolchain and that used by the Rust project
 | ||
| 
 | ||
| -   The asio plugin is shipped now, since it no longer has a build-time dependency on the ASIO SDK.
 | ||
| 
 | ||
| -   The new plugin webview2 is shipped with MSVC. It requires the relevant component shipped with Windows.
 | ||
| 
 | ||
| #### Linux
 | ||
| 
 | ||
| -   Preliminary support for Alma Linux has been added.
 | ||
| 
 | ||
| -   RHEL distro support has been improved.
 | ||
| 
 | ||
| -   Cerbero CI now tests the build on Ubuntu 24.04 LTS.
 | ||
| 
 | ||
| -   curl is used for downloading sources on Fedora instead of wget, since they have moved to wget2 despite show-stopper
 | ||
|     regressions such as returning a success error code on download failure.
 | ||
| 
 | ||
| #### Android
 | ||
| 
 | ||
| -   CMake inside Gradle is now the recommended way to consume GStreamer when building Android apps
 | ||
| 
 | ||
|     -   FindGStreamerMobile.cmake is the recommended way to consume GStreamer now
 | ||
| 
 | ||
|     -   1.26 will support both CMake and Make inside Gradle, but the Make support will likely be removed in 1.28
 | ||
| 
 | ||
|     -   Documentation updates are still a work-in-progress, help is appreciated
 | ||
| 
 | ||
| -   Android tutorials and examples are now built with gradle + cmake instead of gradle + make on the CI
 | ||
| 
 | ||
| ## Documentation improvements
 | ||
| 
 | ||
| -   Tracer objects information is now included in the documentation
 | ||
| 
 | ||
| ## Possibly Breaking Changes
 | ||
| 
 | ||
| -   qroverlay: the "pixel-size" property has been removed in favour of a new "size" property with slightly different semantics,
 | ||
|     where the size of the square is expressed in percent of the smallest of width and height.
 | ||
| 
 | ||
| -   svtav1enc: The SVT-AV1 3.0.0 API exposes a different mechanism to configure the level of parallelism when encoding, which
 | ||
|     has been exposed as a new "level-of-parallelism" property. The old "logical-processors" property is no longer functional if
 | ||
|     the plugin has been compiled against the new API, which might affect encoder performance if application code setting it is
 | ||
|     not updated.
 | ||
| 
 | ||
| -   udpsrc: now disables allocated port reuse for unicast to avoid unexpected side-effects of SO_REUSEADDR where the kernel
 | ||
|     allocates the same listening port for multiple udpsrc.
 | ||
| 
 | ||
| -   uridecodebin3 remove non-functional "source" property that doesn’t make sense and always returned NULL anyway.
 | ||
| 
 | ||
| ## Known Issues
 | ||
| 
 | ||
| -   GstBuffer now uses C11 atomics for 64 bit atomic operations if available, which may require linking to libatomic on some
 | ||
|     systems, but this is not done automatically yet, see issue #4177.
 | ||
| 
 | ||
| Contributors
 | ||
| 
 | ||
| Aaron Boxer, Adrian Perez de Castro, Adrien De Coninck, Alan Coopersmith, Albert Sjolund, Alexander Slobodeniuk, Alex Ashley,
 | ||
| Alicia Boya García, Andoni Morales Alastruey, Andreas Wittmann, Andrew Yooeun Chun, Angelo Verlain, Aniket Hande, Antonio
 | ||
| Larrosa, Antonio Morales, Armin Begovic, Arnaud Vrac, Artem Martus, Arun Raghavan, Benjamin Gaignard, Benjamin Gräf, Bill
 | ||
| Nottingham, Brad Hards, Brad Reitmeyer, Branko Subasic, Carlo Caione, Carlos Bentzen, Carlos Falgueras García, cdelguercio, Chao
 | ||
| Guo, Cheah, Cheung Yik Pang, chitao1234, Chris Bainbridge, Chris Spencer, Chris Spoelstra, Christian Meissl, Christopher Degawa,
 | ||
| Chun-wei Fan, Colin Kinloch, Corentin Damman, Daniel Morin, Daniel Pendse, Daniel Stone, Dan Yeaw, Dave Lucia, David Rosca, Dean
 | ||
| Zhang (张安迪), Denis Yuji Shimizu, Detlev Casanova, Devon Sookhoo, Diego Nieto, Dongyun Seo, dukesook, Edward Hervey, eipachte,
 | ||
| Eli Mallon, Elizabeth Figura, Elliot Chen, Emil Ljungdahl, Emil Pettersson, eri, F. Duncanh, Fotis Xenakis, Francisco Javier
 | ||
| Velázquez-García, Francis Quiers, François Laignel, George Hazan, Glyn Davies, Guillaume Desmottes, Guillermo E. Martinez,
 | ||
| Haihua Hu, Håvard Graff, He Junyan, Hosang Lee, Hou Qi, Hugues Fruchet, Hyunwoo, iodar, jadarve, Jakub Adam, Jakub Vaněk, James
 | ||
| Cowgill, James Oliver, Jan Alexander Steffens (heftig), Jan Schmidt, Jeffery Wilson, Jendrik Weise, Jerome Colle, Jesper Jensen,
 | ||
| Jimmy Ohn, Jochen Henneberg, Johan Sternerup, Jonas K Danielsson, Jonas Rebmann, Jordan Petridis, Jordan Petridіs, Jordan
 | ||
| Yelloz, Jorge Zapata, Joshua Breeden, Julian Bouzas, Jurijs Satcs, Kévin Commaille, Kevin Wang, Khem Raj, kingosticks, Leonardo
 | ||
| Salvatore, L. E. Segovia, Liam, Lim, Loïc Le Page, Loïc Yhuel, Lyra McMillan, Maksym Khomenko, Marc-André Lureau, Marek Olejnik,
 | ||
| Marek Vasut, Marianna Smidth Buschle, Marijn Suijten, Mark-André Schadow, Mark Nauwelaerts, Markus Ebner, Martin Nordholts, Mart
 | ||
| Raudsepp, Mathieu Duponchelle, Matthew Waters, Maxim P. DEMENTYEV, Max Romanov, Mengkejiergeli Ba, Michael Grzeschik, Michael
 | ||
| Olbrich, Michael Scherle, Michael Tretter, Michiel Westerbeek, Mikhail Rudenko, Nacho Garcia, Nick Steel, Nicolas Dufresne,
 | ||
| Niklas Jang, Nirbheek Chauhan, Ognyan Tonchev, Olivier Crête, Oskar Fiedot, Pablo García, Pablo Sun, Patricia Muscalu, Paweł
 | ||
| Kotiuk, Peter Kjellerstedt, Peter Stensson, pgarciasancho, Philippe Normand, Philipp Zabel, Piotr Brzeziński, Qian Hu (胡骞),
 | ||
| Rafael Caricio, Randy Li (ayaka), Rares Branici, Ray Tiley, Robert Ayrapetyan, Robert Guziolowski, Robert Mader, Roberto Viola,
 | ||
| Robert Rosengren, RSWilli,Ruben González, Ruijing Dong, Sachin Gadag, Sam James, Samuel Thibault, Sanchayan Maity, Scott Moreau,
 | ||
| Sebastian Dröge, Sebastian Gross, Sebastien Cote, Sergey Krivohatskiy, Sergey Radionov, Seungha Yang, Seungmin Kim, Shengqi Yu,
 | ||
| Sid Sethupathi, Silvio Lazzeretti, Simonas Kazlauskas, Stefan Riedmüller, Stéphane Cerveau, Tamas Levai, Taruntej Kanakamalla,
 | ||
| Théo Maillart, Thibault Saunier, Thomas Goodwin, Thomas Klausner, Tihran Katolikian, Tim Blechmann, Tim-Philipp Müller, Tjitte
 | ||
| de Wert, Tomas Granath, Tomáš Polomský, tomaszmi, Tom Schuring, U. Artie Eoff, valadaptive, Víctor Manuel Jáquez Leal, Vivia
 | ||
| Nikolaidou, W. Bartel, Weijian Pan, William Wedler, Will Miller, Wim Taymans, Wojciech Kapsa, Xavier Claessens, Xi Ruoyao,
 | ||
| Xizhen, Yaakov Selkowitz, Yacine Bandou, Zach van Rijn, Zeno Endemann, Zhao, Zhong Hongcheng,
 | ||
| 
 | ||
| … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all!
 | ||
| 
 | ||
| Stable 1.26 branch
 | ||
| 
 | ||
| After the 1.26.0 release there will be several 1.26.x bug-fix releases which will contain bug fixes which have been deemed
 | ||
| suitable for a stable branch, but no new features or intrusive changes will be added to a bug-fix release usually. The 1.26.x
 | ||
| bug-fix releases will be made from the git 1.26 branch, which is a stable release series branch.
 | ||
| 
 | ||
| Schedule for 1.28
 | ||
| 
 | ||
| Our next major feature release will be 1.28, and 1.27 will be the unstable development version 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.
 | ||
| 
 | ||
| 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 with contributions from Arun Raghavan, Daniel Morin, Nirbheek
 | ||
| Chauhan, Olivier Crête, Philippe Normand, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal.
 | ||
| 
 | ||
| License: CC BY-SA 4.0
 |