diff --git a/girs/GES-1.0.gir b/girs/GES-1.0.gir index 559d1ea3ff..a45af68ad1 100644 --- a/girs/GES-1.0.gir +++ b/girs/GES-1.0.gir @@ -15629,7 +15629,7 @@ contains one frame) - + @@ -15637,7 +15637,7 @@ contains one frame) - + diff --git a/girs/Gst-1.0.gir b/girs/Gst-1.0.gir index 8c94e2252e..6d05bcdacd 100644 --- a/girs/Gst-1.0.gir +++ b/girs/Gst-1.0.gir @@ -51705,7 +51705,7 @@ determine a order for the two provided values. - + The micro version of GStreamer at compile time: @@ -51715,7 +51715,7 @@ determine a order for the two provided values. - + The nano version of GStreamer at compile time: Actual releases have 0, GIT versions have 1, prerelease versions have 2-... diff --git a/girs/GstPbutils-1.0.gir b/girs/GstPbutils-1.0.gir index 473259b73a..21898c41e1 100644 --- a/girs/GstPbutils-1.0.gir +++ b/girs/GstPbutils-1.0.gir @@ -2950,7 +2950,7 @@ in debugging. - + The micro version of GStreamer's gst-plugins-base libraries at compile time. @@ -2960,7 +2960,7 @@ in debugging. - + The nano version of GStreamer's gst-plugins-base libraries at compile time. Actual releases have 0, GIT versions have 1, prerelease versions have 2-... diff --git a/meson.build b/meson.build index 4b216d92ff..225f850a9b 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gstreamer-full', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : ['buildtype=debugoptimized', # Needed due to https://github.com/mesonbuild/meson/issues/1889, diff --git a/subprojects/gst-devtools/NEWS b/subprojects/gst-devtools/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-devtools/NEWS +++ b/subprojects/gst-devtools/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-devtools/RELEASE b/subprojects/gst-devtools/RELEASE index 8b3560839f..0d7ff193c1 100644 --- a/subprojects/gst-devtools/RELEASE +++ b/subprojects/gst-devtools/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-devtools 1.25.0.1. +This is GStreamer gst-devtools 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-devtools/gst-devtools.doap b/subprojects/gst-devtools/gst-devtools.doap index 5180e43ae4..c613513d06 100644 --- a/subprojects/gst-devtools/gst-devtools.doap +++ b/subprojects/gst-devtools/gst-devtools.doap @@ -53,6 +53,16 @@ + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-devtools/meson.build b/subprojects/gst-devtools/meson.build index 5fa2b2895f..035e68b040 100644 --- a/subprojects/gst-devtools/meson.build +++ b/subprojects/gst-devtools/meson.build @@ -1,5 +1,5 @@ project('gst-devtools', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-docs/meson.build b/subprojects/gst-docs/meson.build index 1d8205d2b5..e5cf4ad3dc 100644 --- a/subprojects/gst-docs/meson.build +++ b/subprojects/gst-docs/meson.build @@ -1,5 +1,5 @@ project('GStreamer manuals and tutorials', 'c', - version: '1.25.0.1', + version: '1.25.1', meson_version : '>= 1.3') hotdoc_p = find_program('hotdoc') diff --git a/subprojects/gst-docs/symbols/symbol_index.json b/subprojects/gst-docs/symbols/symbol_index.json index 034f47ea56..dbc68680fd 100644 --- a/subprojects/gst-docs/symbols/symbol_index.json +++ b/subprojects/gst-docs/symbols/symbol_index.json @@ -880,6 +880,7 @@ "GST_ANALYTICS_REL_TYPE_IS_PART_OF", "GST_ANALYTICS_REL_TYPE_LAST", "GST_ANALYTICS_REL_TYPE_NONE", + "GST_ANALYTICS_REL_TYPE_N_TO_N", "GST_ANALYTICS_REL_TYPE_RELATE_TO", "GST_ANCILLARY_META_API_TYPE", "GST_ANCILLARY_META_FIELD_INTERLACED_FIRST", @@ -967,6 +968,8 @@ "GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT", "GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT", "GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT", + "GST_AUDIO_CHANNEL_POSITION_TOP_SURROUND_LEFT", + "GST_AUDIO_CHANNEL_POSITION_TOP_SURROUND_RIGHT", "GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT", "GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT", "GST_AUDIO_CLIPPING_META_API_TYPE", @@ -1045,6 +1048,7 @@ "GST_AUDIO_FORMAT_INFO_IS_VALID_RAW", "GST_AUDIO_FORMAT_INFO_NAME", "GST_AUDIO_FORMAT_INFO_WIDTH", + "GST_AUDIO_FORMAT_LAST", "GST_AUDIO_FORMAT_S16", "GST_AUDIO_FORMAT_S16BE", "GST_AUDIO_FORMAT_S16LE", @@ -1351,15 +1355,15 @@ "GST_AV1_WARP_MODEL_ROTZOOM", "GST_AV1_WARP_MODEL_TRANSLATION", "GST_BASE_API", - "GST_BASE_DEPRECATED", - "GST_BASE_DEPRECATED_FOR", - "GST_BASE_DEPRECATED_TYPE", - "GST_BASE_DEPRECATED_TYPE_FOR", "GST_BASE_CAMERA_SRC_CAST", "GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME", "GST_BASE_CAMERA_SRC_PREVIEW_MESSAGE_NAME", "GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME", "GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME", + "GST_BASE_DEPRECATED", + "GST_BASE_DEPRECATED_FOR", + "GST_BASE_DEPRECATED_TYPE", + "GST_BASE_DEPRECATED_TYPE_FOR", "GST_BASE_PARSE_CAST", "GST_BASE_PARSE_DRAINING", "GST_BASE_PARSE_FLAG_DRAINING", @@ -1620,6 +1624,7 @@ "GST_CORE_ERROR_THREAD", "GST_CORE_ERROR_TOO_LAZY", "GST_CUDA_ALLOCATOR_CAST", + "GST_CUDA_ALLOCATOR_OPT_STREAM_ORDERED", "GST_CUDA_BUFFER_COPY_CUDA", "GST_CUDA_BUFFER_COPY_D3D11", "GST_CUDA_BUFFER_COPY_GL", @@ -1629,6 +1634,7 @@ "GST_CUDA_CONTEXT_CAST", "GST_CUDA_CONTEXT_TYPE", "GST_CUDA_GRAPHICS_RESOURCE_D3D11_RESOURCE", + "GST_CUDA_GRAPHICS_RESOURCE_EGL_RESOURCE", "GST_CUDA_GRAPHICS_RESOURCE_GL_BUFFER", "GST_CUDA_GRAPHICS_RESOURCE_NONE", "GST_CUDA_MEMORY_ALLOC_MALLOC", @@ -2082,6 +2088,9 @@ "GST_GL_DISPLAY_TYPE_X11", "GST_GL_DISPLAY_WAYLAND_CAST", "GST_GL_DISPLAY_X11_CAST", + "GST_GL_DRM_FORMAT_INCLUDE_EMULATED", + "GST_GL_DRM_FORMAT_INCLUDE_EXTERNAL", + "GST_GL_DRM_FORMAT_LINEAR_ONLY", "GST_GL_FRAMEBUFFER_CAST", "GST_GL_LUMINANCE", "GST_GL_LUMINANCE_ALPHA", @@ -2204,6 +2213,8 @@ "GST_H264_NAL_FILLER_DATA", "GST_H264_NAL_PPS", "GST_H264_NAL_PREFIX_UNIT", + "GST_H264_NAL_RSV_1", + "GST_H264_NAL_RSV_2", "GST_H264_NAL_SEI", "GST_H264_NAL_SEQ_END", "GST_H264_NAL_SLICE", @@ -2243,6 +2254,7 @@ "GST_H264_PROFILE_HIGH10", "GST_H264_PROFILE_HIGH_422", "GST_H264_PROFILE_HIGH_444", + "GST_H264_PROFILE_INVALID", "GST_H264_PROFILE_MAIN", "GST_H264_PROFILE_MULTIVIEW_HIGH", "GST_H264_PROFILE_SCALABLE_BASELINE", @@ -2413,6 +2425,87 @@ "GST_H265_SEI_RECOVERY_POINT", "GST_H265_SEI_REGISTERED_USER_DATA", "GST_H265_SEI_TIME_CODE", + "GST_H265_SEI_USER_DATA_UNREGISTERED", + "GST_H266_ALF_APS", + "GST_H266_APS_TYPE_MAX", + "GST_H266_B_SLICE", + "GST_H266_I_SLICE", + "GST_H266_LEVEL_L1_0", + "GST_H266_LEVEL_L2_0", + "GST_H266_LEVEL_L2_1", + "GST_H266_LEVEL_L3_0", + "GST_H266_LEVEL_L3_1", + "GST_H266_LEVEL_L4_0", + "GST_H266_LEVEL_L4_1", + "GST_H266_LEVEL_L5_0", + "GST_H266_LEVEL_L5_1", + "GST_H266_LEVEL_L5_2", + "GST_H266_LEVEL_L6_0", + "GST_H266_LEVEL_L6_1", + "GST_H266_LEVEL_L6_2", + "GST_H266_LEVEL_L6_3", + "GST_H266_LMCS_APS", + "GST_H266_NAL_AUD", + "GST_H266_NAL_DCI", + "GST_H266_NAL_EOB", + "GST_H266_NAL_EOS", + "GST_H266_NAL_FD", + "GST_H266_NAL_OPI", + "GST_H266_NAL_PH", + "GST_H266_NAL_PPS", + "GST_H266_NAL_PREFIX_APS", + "GST_H266_NAL_PREFIX_SEI", + "GST_H266_NAL_SLICE_CRA", + "GST_H266_NAL_SLICE_GDR", + "GST_H266_NAL_SLICE_IDR_N_LP", + "GST_H266_NAL_SLICE_IDR_W_RADL", + "GST_H266_NAL_SLICE_RADL", + "GST_H266_NAL_SLICE_RASL", + "GST_H266_NAL_SLICE_STSA", + "GST_H266_NAL_SLICE_TRAIL", + "GST_H266_NAL_SPS", + "GST_H266_NAL_SUFFIX_APS", + "GST_H266_NAL_SUFFIX_SEI", + "GST_H266_NAL_VPS", + "GST_H266_PARSER_BROKEN_DATA", + "GST_H266_PARSER_BROKEN_LINK", + "GST_H266_PARSER_ERROR", + "GST_H266_PARSER_NO_NAL", + "GST_H266_PARSER_NO_NAL_END", + "GST_H266_PARSER_OK", + "GST_H266_PROFILE_INTRA", + "GST_H266_PROFILE_INVALID", + "GST_H266_PROFILE_MAIN_10", + "GST_H266_PROFILE_MAIN_10_444", + "GST_H266_PROFILE_MAIN_10_444_STILL_PICTURE", + "GST_H266_PROFILE_MAIN_10_STILL_PICTURE", + "GST_H266_PROFILE_MAIN_12", + "GST_H266_PROFILE_MAIN_12_444", + "GST_H266_PROFILE_MAIN_12_444_INTRA", + "GST_H266_PROFILE_MAIN_12_444_STILL_PICTURE", + "GST_H266_PROFILE_MAIN_12_INTRA", + "GST_H266_PROFILE_MAIN_12_STILL_PICTURE", + "GST_H266_PROFILE_MAIN_16_444", + "GST_H266_PROFILE_MAIN_16_444_INTRA", + "GST_H266_PROFILE_MAIN_16_444_STILL_PICTURE", + "GST_H266_PROFILE_MAX", + "GST_H266_PROFILE_MULTILAYER_MAIN_10", + "GST_H266_PROFILE_MULTILAYER_MAIN_10_444", + "GST_H266_PROFILE_MULTILAYER_MAIN_10_444_STILL_PICTURE", + "GST_H266_PROFILE_MULTILAYER_MAIN_10_STILL_PICTURE", + "GST_H266_PROFILE_NONE", + "GST_H266_PROFILE_STILL_PICTURE", + "GST_H266_P_SLICE", + "GST_H266_SCALING_APS", + "GST_H266_SEI_BUF_PERIOD", + "GST_H266_SEI_DU_INFO", + "GST_H266_SEI_FRAME_FIELD_INFO", + "GST_H266_SEI_PIC_TIMING", + "GST_H266_SEI_REGISTERED_USER_DATA", + "GST_H266_SEI_SCALABLE_NESTING", + "GST_H266_SEI_SUBPIC_LEVEL_INFO", + "GST_H266_SEI_USER_DATA_UNREGISTERED", + "GST_ID_STR_INIT", "GST_INFO", "GST_INFO_ID", "GST_INFO_OBJECT", @@ -2518,6 +2611,10 @@ "GST_JPEG2000_SAMPLING_YBR422", "GST_JPEG2000_SAMPLING_YBR444", "GST_JPEG2000_SAMPLING_YBRA4444_EXT", + "GST_JPEG_BIT_WRITER_ERROR", + "GST_JPEG_BIT_WRITER_INVALID_DATA", + "GST_JPEG_BIT_WRITER_NO_MORE_SPACE", + "GST_JPEG_BIT_WRITER_OK", "GST_JPEG_ENTROPY_CODING_ARITHMETIC", "GST_JPEG_ENTROPY_CODING_HUFFMAN", "GST_JPEG_MARKER_APP0", @@ -2958,6 +3055,9 @@ "GST_MPEGTS_HIERARCHY_4", "GST_MPEGTS_HIERARCHY_AUTO", "GST_MPEGTS_HIERARCHY_NONE", + "GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD", + "GST_MPEGTS_METADATA_APPLICATION_FORMAT_ISAN", + "GST_MPEGTS_METADATA_APPLICATION_FORMAT_VSAN", "GST_MPEGTS_METADATA_FORMAT_APPLICATION_FORMAT", "GST_MPEGTS_METADATA_FORMAT_BIM", "GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD", @@ -3086,6 +3186,7 @@ "GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM", "GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC", "GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K", + "GST_MPEGTS_STREAM_TYPE_VIDEO_JPEG_XS", "GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1", "GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2", "GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW", @@ -3249,6 +3350,7 @@ "GST_MTS_DESC_DVB_VBI_DATA", "GST_MTS_DESC_DVB_VBI_TELETEXT", "GST_MTS_DESC_DVB_XAIT_LOCATION", + "GST_MTS_DESC_EXTENSION", "GST_MTS_DESC_EXTERNAL_ES_ID", "GST_MTS_DESC_EXT_DVB_AC4", "GST_MTS_DESC_EXT_DVB_AUDIO_PRESELECTION", @@ -3271,6 +3373,7 @@ "GST_MTS_DESC_EXT_DVB_URI_LINKAGE", "GST_MTS_DESC_EXT_DVB_VIDEO_DEPTH_RANGE", "GST_MTS_DESC_EXT_DVB_XAIT_PID", + "GST_MTS_DESC_EXT_JXS_VIDEO", "GST_MTS_DESC_FLEX_MUX_TIMING", "GST_MTS_DESC_FMC", "GST_MTS_DESC_FMX_BUFFER_SIZE", @@ -3490,6 +3593,7 @@ "GST_NAVIGATION_EVENT_KEY_RELEASE", "GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS", "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE", + "GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK", "GST_NAVIGATION_EVENT_MOUSE_MOVE", "GST_NAVIGATION_EVENT_MOUSE_SCROLL", "GST_NAVIGATION_EVENT_TOUCH_CANCEL", @@ -4435,6 +4539,8 @@ "GST_SEEK_TYPE_END", "GST_SEEK_TYPE_NONE", "GST_SEEK_TYPE_SET", + "GST_SEGMENTATION_TYPE_INSTANCE", + "GST_SEGMENTATION_TYPE_SEMANTIC", "GST_SEGMENT_FLAG_NONE", "GST_SEGMENT_FLAG_RESET", "GST_SEGMENT_FLAG_SEGMENT", @@ -4572,6 +4678,7 @@ "GST_TAG_CAPTURING_FOCAL_RATIO", "GST_TAG_CAPTURING_GAIN_ADJUSTMENT", "GST_TAG_CAPTURING_ISO_SPEED", + "GST_TAG_CAPTURING_LIGHT_SOURCE", "GST_TAG_CAPTURING_METERING_MODE", "GST_TAG_CAPTURING_SATURATION", "GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE", @@ -4735,6 +4842,25 @@ "GST_TASK_STATE", "GST_TASK_STOPPED", "GST_TASK_WAIT", + "GST_TENSOR_DATA_TYPE_BFLOAT16", + "GST_TENSOR_DATA_TYPE_FLOAT16", + "GST_TENSOR_DATA_TYPE_FLOAT32", + "GST_TENSOR_DATA_TYPE_FLOAT64", + "GST_TENSOR_DATA_TYPE_INT16", + "GST_TENSOR_DATA_TYPE_INT32", + "GST_TENSOR_DATA_TYPE_INT4", + "GST_TENSOR_DATA_TYPE_INT64", + "GST_TENSOR_DATA_TYPE_INT8", + "GST_TENSOR_DATA_TYPE_UINT16", + "GST_TENSOR_DATA_TYPE_UINT32", + "GST_TENSOR_DATA_TYPE_UINT4", + "GST_TENSOR_DATA_TYPE_UINT64", + "GST_TENSOR_DATA_TYPE_UINT8", + "GST_TENSOR_DIM_ORDER_COL_MAJOR", + "GST_TENSOR_DIM_ORDER_ROW_MAJOR", + "GST_TENSOR_LAYOUT_CONTIGUOUS", + "GST_TENSOR_META_API_TYPE", + "GST_TENSOR_META_INFO", "GST_TEST_CLOCK_CAST", "GST_TIMED_VALUE_CONTROL_SOURCE_LOCK", "GST_TIMED_VALUE_CONTROL_SOURCE_UNLOCK", @@ -4963,9 +5089,11 @@ "GST_TYPE_MPEGTS_EXTENDED_EVENT_DESCRIPTOR", "GST_TYPE_MPEGTS_EXTENDED_EVENT_ITEM", "GST_TYPE_MPEGTS_ISO_639_LANGUAGE", + "GST_TYPE_MPEGTS_JPEG_XS_DESCRIPTOR", "GST_TYPE_MPEGTS_LOGICAL_CHANNEL", "GST_TYPE_MPEGTS_LOGICAL_CHANNEL_DESCRIPTOR", "GST_TYPE_MPEGTS_METADATA_DESCRIPTOR", + "GST_TYPE_MPEGTS_METADATA_POINTER_DESCRIPTOR", "GST_TYPE_MPEGTS_NIT", "GST_TYPE_MPEGTS_NIT_STREAM", "GST_TYPE_MPEGTS_PAT_PROGRAM", @@ -5576,6 +5704,7 @@ "GST_VIDEO_FORMAT_GBR_12LE", "GST_VIDEO_FORMAT_GBR_16BE", "GST_VIDEO_FORMAT_GBR_16LE", + "GST_VIDEO_FORMAT_GRAY10_LE16", "GST_VIDEO_FORMAT_GRAY10_LE32", "GST_VIDEO_FORMAT_GRAY16_BE", "GST_VIDEO_FORMAT_GRAY16_LE", @@ -5626,6 +5755,7 @@ "GST_VIDEO_FORMAT_INFO_W_SUB", "GST_VIDEO_FORMAT_IYU1", "GST_VIDEO_FORMAT_IYU2", + "GST_VIDEO_FORMAT_LAST", "GST_VIDEO_FORMAT_MT2110R", "GST_VIDEO_FORMAT_MT2110T", "GST_VIDEO_FORMAT_NV12", @@ -5668,9 +5798,13 @@ "GST_VIDEO_FORMAT_Y210", "GST_VIDEO_FORMAT_Y212_BE", "GST_VIDEO_FORMAT_Y212_LE", + "GST_VIDEO_FORMAT_Y216_BE", + "GST_VIDEO_FORMAT_Y216_LE", "GST_VIDEO_FORMAT_Y410", "GST_VIDEO_FORMAT_Y412_BE", "GST_VIDEO_FORMAT_Y412_LE", + "GST_VIDEO_FORMAT_Y416_BE", + "GST_VIDEO_FORMAT_Y416_LE", "GST_VIDEO_FORMAT_Y41B", "GST_VIDEO_FORMAT_Y42B", "GST_VIDEO_FORMAT_Y444", @@ -5933,14 +6067,25 @@ "GST_VIDEO_VBI_PARSER_RESULT_ERROR", "GST_VIDEO_VBI_PARSER_RESULT_OK", "GST_VP8_DECODER_CAST", + "GST_VP8_INTER_FRAME", + "GST_VP8_KEY_FRAME", "GST_VP8_PARSER_BROKEN_DATA", "GST_VP8_PARSER_ERROR", "GST_VP8_PARSER_OK", "GST_VP8_PICTURE", "GST_VP8_PICTURE_CAST", + "GST_VP8_REF_FRAME_ALTREF", + "GST_VP8_REF_FRAME_GOLDEN", + "GST_VP8_REF_FRAME_INTRA", + "GST_VP8_REF_FRAME_LAST", + "GST_VP8_REF_FRAME_MAX", "GST_VP9_BIT_DEPTH_10", "GST_VP9_BIT_DEPTH_12", "GST_VP9_BIT_DEPTH_8", + "GST_VP9_BIT_WRITER_ERROR", + "GST_VP9_BIT_WRITER_INVALID_DATA", + "GST_VP9_BIT_WRITER_NO_MORE_SPACE", + "GST_VP9_BIT_WRITER_OK", "GST_VP9_BLOCK_SIZE_GROUPS", "GST_VP9_CLASS0_SIZE", "GST_VP9_COMP_MODE_CONTEXTS", @@ -6322,6 +6467,13 @@ "GstASFDemux!video_%u", "GstATDec!sink", "GstATDec!src", + "GstATEnc!sink", + "GstATEnc!src", + "GstATEncRateControl", + "GstATEncRateControl::cbr", + "GstATEncRateControl::cvbr", + "GstATEncRateControl::lta", + "GstATEncRateControl::vbr", "GstATSCMux", "GstATSCMux!sink_%d", "GstATSCMux!src", @@ -6751,6 +6903,7 @@ "GstAjaVideoFormat::720p 5994", "GstAjaVideoFormat::720p 6000", "GstAjaVideoFormat::Auto detect format", + "GstAllocationMetaParamsAggregator", "GstAllocationParams", "GstAllocationParams.align", "GstAllocationParams.flags", @@ -6934,6 +7087,9 @@ "GstAnalyticsRelationMetaInitParams", "GstAnalyticsRelationMetaInitParams.initial_buf_size", "GstAnalyticsRelationMetaInitParams.initial_relation_order", + "GstAnalyticsSegmentationMtd", + "GstAnalyticsSegmentationMtd.id", + "GstAnalyticsSegmentationMtd.meta", "GstAnalyticsTrackingMtd", "GstAnalyticsTrackingMtd.id", "GstAnalyticsTrackingMtd.meta", @@ -7053,6 +7209,8 @@ "GstAsfParse", "GstAsfParse!sink", "GstAsfParse!src", + "GstAsioSink!sink", + "GstAsioSrc!src", "GstAspectRatioCrop", "GstAspectRatioCrop!sink", "GstAspectRatioCrop!src", @@ -7234,6 +7392,18 @@ "GstAudioConvert:dithering", "GstAudioConvert:mix-matrix", "GstAudioConvert:noise-shaping", + "GstAudioConvertInputChannelsReorder", + "GstAudioConvertInputChannelsReorder::aac", + "GstAudioConvertInputChannelsReorder::ac3", + "GstAudioConvertInputChannelsReorder::alternate", + "GstAudioConvertInputChannelsReorder::cine", + "GstAudioConvertInputChannelsReorder::gst", + "GstAudioConvertInputChannelsReorder::mono", + "GstAudioConvertInputChannelsReorder::smpte", + "GstAudioConvertInputChannelsReorderMode", + "GstAudioConvertInputChannelsReorderMode::force", + "GstAudioConvertInputChannelsReorderMode::none", + "GstAudioConvertInputChannelsReorderMode::unpositioned", "GstAudioConverter", "GstAudioConverterFlags", "GstAudioDecoder", @@ -7832,6 +8002,25 @@ "GstBPMDetect", "GstBPMDetect!sink", "GstBPMDetect!src", + "GstBarCodeFormat", + "GstBarCodeFormat::all", + "GstBarCodeFormat::aztec", + "GstBarCodeFormat::codabar", + "GstBarCodeFormat::code_128", + "GstBarCodeFormat::code_39", + "GstBarCodeFormat::code_93", + "GstBarCodeFormat::ean_13", + "GstBarCodeFormat::ean_8", + "GstBarCodeFormat::itf", + "GstBarCodeFormat::maxicode", + "GstBarCodeFormat::pdf_417", + "GstBarCodeFormat::png", + "GstBarCodeFormat::qr_code", + "GstBarCodeFormat::rss_14", + "GstBarCodeFormat::rss_expanded", + "GstBarCodeFormat::upc_a", + "GstBarCodeFormat::upc_e", + "GstBarCodeFormat::upc_ean_expansion", "GstBaseAutoConvert", "GstBaseCameraSrc", "GstBaseCameraSrc._gst_reserved", @@ -7917,6 +8106,7 @@ "GstBaseQROverlay:case-sensitive", "GstBaseQROverlay:pixel-size", "GstBaseQROverlay:qrcode-error-correction", + "GstBaseQROverlay:size", "GstBaseQROverlay:x", "GstBaseQROverlay:y", "GstBaseQTMux", @@ -8080,6 +8270,7 @@ "GstBaseTextOverlay:halignment", "GstBaseTextOverlay:line-alignment", "GstBaseTextOverlay:outline-color", + "GstBaseTextOverlay:response-time-compensation", "GstBaseTextOverlay:scale-mode", "GstBaseTextOverlay:scale-pixel-aspect-ratio", "GstBaseTextOverlay:shaded-background", @@ -8185,6 +8376,7 @@ "GstBaseTsMux", "GstBaseTsMux:alignment", "GstBaseTsMux:bitrate", + "GstBaseTsMux:enable-custom-mappings", "GstBaseTsMux:pat-interval", "GstBaseTsMux:pcr-interval", "GstBaseTsMux:pmt-interval", @@ -8373,10 +8565,18 @@ "GstCACATvDithering::8x8", "GstCACATvDithering::none", "GstCACATvDithering::random", + "GstCCBufferCea608PaddingStrategy", + "GstCCBufferCea608PaddingStrategy::input-remove", + "GstCCBufferCea608PaddingStrategy::valid", "GstCCCombiner", "GstCCCombiner!caption", "GstCCCombiner!sink", "GstCCCombiner!src", + "GstCCCombinerInputProcessing", + "GstCCCombinerInputProcessing::append", + "GstCCCombinerInputProcessing::drop", + "GstCCCombinerInputProcessing::favor", + "GstCCCombinerInputProcessing::force", "GstCCConverter", "GstCCConverter!sink", "GstCCConverter!src", @@ -8803,7 +9003,11 @@ "GstCudaContext", "GstCudaContext.object", "GstCudaContext:cuda-device-id", + "GstCudaContext:default-gpu-stack-size", + "GstCudaContext:external-resource-interop", "GstCudaContext:os-handle", + "GstCudaContext:prefer-stream-ordered-alloc", + "GstCudaContext:stream-ordered-alloc", "GstCudaContext:virtual-memory", "GstCudaContextClass.parent_class", "GstCudaConvert!sink", @@ -8834,7 +9038,11 @@ "GstCudaMemory.info", "GstCudaMemory.mem", "GstCudaMemoryAllocMethod", + "GstCudaMemoryAllocatorNeedPoolCallback", "GstCudaMemoryCopy", + "GstCudaMemoryPool", + "GstCudaMemoryPool.context", + "GstCudaMemoryPool.parent", "GstCudaMemoryTransfer", "GstCudaPoolAllocator", "GstCudaPoolAllocator.context", @@ -9173,7 +9381,13 @@ "GstD3D11WindowFullscreenToggleMode::property", "GstD3D12AV1Dec!sink", "GstD3D12AV1Dec!src", + "GstD3D12BaseConvert", + "GstD3D12BaseConvert:async-depth", + "GstD3D12BaseConvert:method", "GstD3D12BaseFilter", + "GstD3D12BaseFilter:adapter", + "GstD3D12ColorConvert!sink", + "GstD3D12ColorConvert!src", "GstD3D12Compositor!sink_%u", "GstD3D12Compositor!src", "GstD3D12CompositorBackground", @@ -9197,6 +9411,16 @@ "GstD3D12CompositorSizingPolicy::none", "GstD3D12Convert!sink", "GstD3D12Convert!src", + "GstD3D12Deinterlace!sink", + "GstD3D12Deinterlace!src", + "GstD3D12DeinterlaceEngine", + "GstD3D12DeinterlaceEngine::3d", + "GstD3D12DeinterlaceEngine::auto", + "GstD3D12DeinterlaceEngine::compute", + "GstD3D12DeinterlaceFields", + "GstD3D12DeinterlaceFields::all", + "GstD3D12DeinterlaceFields::bottom", + "GstD3D12DeinterlaceFields::top", "GstD3D12Download!sink", "GstD3D12Download!src", "GstD3D12Encoder", @@ -9235,11 +9459,20 @@ "GstD3D12H264Enc!src", "GstD3D12H265Dec!sink", "GstD3D12H265Dec!src", + "GstD3D12IpcIOMode", + "GstD3D12IpcIOMode::copy", + "GstD3D12IpcIOMode::import", + "GstD3D12IpcSink!sink", + "GstD3D12IpcSrc!src", "GstD3D12MSAAMode", "GstD3D12MSAAMode::2x", "GstD3D12MSAAMode::4x", "GstD3D12MSAAMode::8x", "GstD3D12MSAAMode::disabled", + "GstD3D12MemoryCopy", + "GstD3D12MemoryCopy:adapter", + "GstD3D12MipMapping!sink", + "GstD3D12MipMapping!src", "GstD3D12Mpeg2Dec!sink", "GstD3D12Mpeg2Dec!src", "GstD3D12SamplingMethod", @@ -9247,7 +9480,16 @@ "GstD3D12SamplingMethod::bilinear", "GstD3D12SamplingMethod::linear-minification", "GstD3D12SamplingMethod::nearest-neighbour", + "GstD3D12Scale!sink", + "GstD3D12Scale!src", + "GstD3D12ScreenCaptureAPI", + "GstD3D12ScreenCaptureAPI::dxgi", + "GstD3D12ScreenCaptureAPI::wgc", "GstD3D12ScreenCaptureSrc!src", + "GstD3D12ScreenCaptureTonemap", + "GstD3D12ScreenCaptureTonemap::linear", + "GstD3D12ScreenCaptureTonemap::reinhard", + "GstD3D12SwapChainSink!sink", "GstD3D12TestSrc!src", "GstD3D12TestSrcPattern", "GstD3D12TestSrcPattern::ball", @@ -9267,10 +9509,23 @@ "GstD3D12Upload!sink", "GstD3D12Upload!src", "GstD3D12VideoSink!sink", + "GstD3D12VideoSinkDisplayFormat", + "GstD3D12VideoSinkDisplayFormat::b8g8r8a8-unorm", + "GstD3D12VideoSinkDisplayFormat::r10g10b10a2-unorm", + "GstD3D12VideoSinkDisplayFormat::r8g8b8a8-unorm", + "GstD3D12VideoSinkDisplayFormat::unknown", "GstD3D12Vp8Dec!sink", "GstD3D12Vp8Dec!src", "GstD3D12Vp9Dec!sink", "GstD3D12Vp9Dec!src", + "GstD3D12WindowCaptureMode", + "GstD3D12WindowCaptureMode::client", + "GstD3D12WindowCaptureMode::default", + "GstD3D12WindowOverlayMode", + "GstD3D12WindowOverlayMode::d2d", + "GstD3D12WindowOverlayMode::d3d11", + "GstD3D12WindowOverlayMode::d3d12", + "GstD3D12WindowOverlayMode::none", "GstD3DVideoSink", "GstD3DVideoSink!sink", "GstD3DVideoSink:create-render-window", @@ -9579,9 +9834,19 @@ "GstDecklinkModes::1080p50", "GstDecklinkModes::1080p5994", "GstDecklinkModes::1080p60", + "GstDecklinkModes::1440x1080p50", + "GstDecklinkModes::1440x1080p60", + "GstDecklinkModes::1440x900p50", + "GstDecklinkModes::1440x900p60", "GstDecklinkModes::1556p2398", "GstDecklinkModes::1556p24", "GstDecklinkModes::1556p25", + "GstDecklinkModes::1600x1200p50", + "GstDecklinkModes::1600x1200p60", + "GstDecklinkModes::1920x1200p50", + "GstDecklinkModes::1920x1200p60", + "GstDecklinkModes::1920x1440p50", + "GstDecklinkModes::1920x1440p60", "GstDecklinkModes::2160p2398", "GstDecklinkModes::2160p24", "GstDecklinkModes::2160p25", @@ -9590,6 +9855,10 @@ "GstDecklinkModes::2160p50", "GstDecklinkModes::2160p5994", "GstDecklinkModes::2160p60", + "GstDecklinkModes::2560x1440p50", + "GstDecklinkModes::2560x1440p60", + "GstDecklinkModes::2560x1600p50", + "GstDecklinkModes::2560x1600p60", "GstDecklinkModes::2kdcip2398", "GstDecklinkModes::2kdcip24", "GstDecklinkModes::2kdcip25", @@ -9606,9 +9875,11 @@ "GstDecklinkModes::4kdcip50", "GstDecklinkModes::4kdcip5994", "GstDecklinkModes::4kdcip60", + "GstDecklinkModes::640x480p60", "GstDecklinkModes::720p50", "GstDecklinkModes::720p5994", "GstDecklinkModes::720p60", + "GstDecklinkModes::800x600p60", "GstDecklinkModes::8kdcip2398", "GstDecklinkModes::8kdcip24", "GstDecklinkModes::8kdcip25", @@ -9625,22 +9896,6 @@ "GstDecklinkModes::8kp50", "GstDecklinkModes::8kp5994", "GstDecklinkModes::8kp60", - "GstDecklinkModes::640x480p60", - "GstDecklinkModes::800x600p60", - "GstDecklinkModes::1440x900p50", - "GstDecklinkModes::1440x900p60", - "GstDecklinkModes::1440x1080p50", - "GstDecklinkModes::1440x1080p60", - "GstDecklinkModes::1600x1200p50", - "GstDecklinkModes::1600x1200p60", - "GstDecklinkModes::1920x1200p50", - "GstDecklinkModes::1920x1200p60", - "GstDecklinkModes::1920x1440p50", - "GstDecklinkModes::1920x1440p60", - "GstDecklinkModes::2560x1440p50", - "GstDecklinkModes::2560x1440p60", - "GstDecklinkModes::2560x1600p50", - "GstDecklinkModes::2560x1600p60", "GstDecklinkModes::auto", "GstDecklinkModes::ntsc", "GstDecklinkModes::ntsc-p", @@ -10512,6 +10767,7 @@ "GstFaceOverlay:w", "GstFaceOverlay:x", "GstFaceOverlay:y", + "GstFactoriesTracer", "GstFakeAudioSink!sink", "GstFakeAudioSinkStateError", "GstFakeAudioSinkStateError::none", @@ -11004,6 +11260,7 @@ "GstGLDownloadElement", "GstGLDownloadElement!sink", "GstGLDownloadElement!src", + "GstGLDrmFormatFlags", "GstGLEffects", "GstGLEffectsEffect", "GstGLEffectsEffect::blur", @@ -11769,6 +12026,47 @@ "GstH265UserDataUnregistered", "GstH265VPS", "GstH265VUIParams", + "GstH266ALF", + "GstH266APS", + "GstH266APSType", + "GstH266AUD", + "GstH266BufferingPeriod", + "GstH266DCI", + "GstH266DPBParameters", + "GstH266DUInfo", + "GstH266FrameFieldInfo", + "GstH266GeneralConstraintsInfo", + "GstH266GeneralHRDParameters", + "GstH266LMCS", + "GstH266Level", + "GstH266NalUnit", + "GstH266NalUnitType", + "GstH266OLSHRDParameters", + "GstH266OPI", + "GstH266PPS", + "GstH266Parse!sink", + "GstH266Parse!src", + "GstH266Parser", + "GstH266ParserResult", + "GstH266PicHdr", + "GstH266PicTiming", + "GstH266PredWeightTable", + "GstH266Profile", + "GstH266ProfileTierLevel", + "GstH266RefPicListStruct", + "GstH266RefPicLists", + "GstH266SEIMessage", + "GstH266SEIPayloadType", + "GstH266SPS", + "GstH266SPSRangeExtensionParams", + "GstH266ScalableNesting", + "GstH266ScalingList", + "GstH266SliceHdr", + "GstH266SliceType", + "GstH266SubLayerHRDParameters", + "GstH266SubPicLevelInfo", + "GstH266VPS", + "GstH266VUIParams", "GstHDV1394Src", "GstHDV1394Src!src", "GstHDV1394Src:channel", @@ -11852,6 +12150,7 @@ "GstId3v2Mux", "GstId3v2Mux!sink", "GstId3v2Mux!src", + "GstIdStr", "GstIdentity", "GstIdentity!sink", "GstIdentity!src", @@ -12009,6 +12308,13 @@ "GstIqa:dssim-error-threshold", "GstIqaMode", "GstIqaMode::strict", + "GstIsacDec!sink", + "GstIsacDec!src", + "GstIsacEnc!sink", + "GstIsacEnc!src", + "GstIsacEncOutputFrameLen", + "GstIsacEncOutputFrameLen::30 ms", + "GstIsacEncOutputFrameLen::60 ms, only usable in wideband mode (16 kHz)", "GstIterator", "GstIterator.cookie", "GstIterator.copy", @@ -12073,6 +12379,7 @@ "GstJifMux", "GstJifMux!sink", "GstJifMux!src", + "GstJpegBitWriterResult", "GstJpegDec", "GstJpegDec!sink", "GstJpegDec!src", @@ -12185,10 +12492,12 @@ "GstLameMP3EncTarget", "GstLameMP3EncTarget::bitrate", "GstLameMP3EncTarget::quality", + "GstLatencyTracer", "GstLc3Dec!sink", "GstLc3Dec!src", "GstLc3Enc!sink", "GstLc3Enc!src", + "GstLcevcMeta", "GstLcms", "GstLcms!sink", "GstLcms!src", @@ -12207,6 +12516,19 @@ "GstLcmsLookupMethod::cached", "GstLcmsLookupMethod::precalculated", "GstLcmsLookupMethod::uncached", + "GstLdacEnc!sink", + "GstLdacEnc!src", + "GstLdacEqmid", + "GstLdacEqmid::hq", + "GstLdacEqmid::mq", + "GstLdacEqmid::sq", + "GstLeaksTracer", + "GstLeaksTracer::activity-get-checkpoint", + "GstLeaksTracer::activity-log-checkpoint", + "GstLeaksTracer::activity-start-tracking", + "GstLeaksTracer::activity-stop-tracking", + "GstLeaksTracer::get-live-objects", + "GstLeaksTracer::log-live-objects", "GstLevel", "GstLevel!sink", "GstLevel!src", @@ -12233,6 +12555,12 @@ "GstLibAVVidDecSkipFrame::Skip IDCT/Dequantization", "GstLibAVVidDecSkipFrame::Skip everything", "GstLibAVVidDecSkipFrame::Skip nothing", + "GstLibAVVidDecSkipFrame::all", + "GstLibAVVidDecSkipFrame::bidir", + "GstLibAVVidDecSkipFrame::default", + "GstLibAVVidDecSkipFrame::non-intra", + "GstLibAVVidDecSkipFrame::non-key", + "GstLibAVVidDecSkipFrame::non-ref", "GstLibAVVidDecThreadType", "GstLibAVVidDecThreadType::auto", "GstLibAVVidDecThreadType::frame", @@ -12258,6 +12586,7 @@ "GstLiveAdder:latency", "GstLockFlags", "GstLogFunction", + "GstLogTracer", "GstMFAacDec!sink", "GstMFAacDec!src", "GstMFAacEnc", @@ -12968,6 +13297,7 @@ "GstMpegtsEITEvent.free_CA_mode", "GstMpegtsEITEvent.running_status", "GstMpegtsEITEvent.start_time", + "GstMpegtsExtendedDescriptorType", "GstMpegtsExtendedEventDescriptor", "GstMpegtsExtendedEventDescriptor.descriptor_number", "GstMpegtsExtendedEventDescriptor.items", @@ -12984,6 +13314,35 @@ "GstMpegtsISO639LanguageDescriptor.language", "GstMpegtsISO639LanguageDescriptor.nb_language", "GstMpegtsIso639AudioType", + "GstMpegtsJpegXsDescriptor", + "GstMpegtsJpegXsDescriptor.L_max", + "GstMpegtsJpegXsDescriptor.L_min", + "GstMpegtsJpegXsDescriptor.MaxCLL", + "GstMpegtsJpegXsDescriptor.MaxFALL", + "GstMpegtsJpegXsDescriptor.Plev", + "GstMpegtsJpegXsDescriptor.Ppih", + "GstMpegtsJpegXsDescriptor.X_c0", + "GstMpegtsJpegXsDescriptor.X_c1", + "GstMpegtsJpegXsDescriptor.X_c2", + "GstMpegtsJpegXsDescriptor.X_wp", + "GstMpegtsJpegXsDescriptor.Y_c0", + "GstMpegtsJpegXsDescriptor.Y_c1", + "GstMpegtsJpegXsDescriptor.Y_c2", + "GstMpegtsJpegXsDescriptor.Y_wp", + "GstMpegtsJpegXsDescriptor.brat", + "GstMpegtsJpegXsDescriptor.buffer_model_type", + "GstMpegtsJpegXsDescriptor.colour_primaries", + "GstMpegtsJpegXsDescriptor.descriptor_version", + "GstMpegtsJpegXsDescriptor.frat", + "GstMpegtsJpegXsDescriptor.horizontal_size", + "GstMpegtsJpegXsDescriptor.matrix_coefficients", + "GstMpegtsJpegXsDescriptor.max_buffer_size", + "GstMpegtsJpegXsDescriptor.mdm_flag", + "GstMpegtsJpegXsDescriptor.schar", + "GstMpegtsJpegXsDescriptor.still_mode", + "GstMpegtsJpegXsDescriptor.transfer_characteristics", + "GstMpegtsJpegXsDescriptor.vertical_size", + "GstMpegtsJpegXsDescriptor.video_full_range_flag", "GstMpegtsLogicalChannel", "GstMpegtsLogicalChannel.logical_channel_number", "GstMpegtsLogicalChannel.service_id", @@ -12991,6 +13350,7 @@ "GstMpegtsLogicalChannelDescriptor", "GstMpegtsLogicalChannelDescriptor.channels", "GstMpegtsLogicalChannelDescriptor.nb_channels", + "GstMpegtsMetadataApplicationFormat", "GstMpegtsMetadataDescriptor", "GstMpegtsMetadataDescriptor.decoder_config_flags", "GstMpegtsMetadataDescriptor.dsm_cc_flag", @@ -12999,6 +13359,12 @@ "GstMpegtsMetadataDescriptor.metadata_format_identifier", "GstMpegtsMetadataDescriptor.metadata_service_id", "GstMpegtsMetadataFormat", + "GstMpegtsMetadataPointerDescriptor", + "GstMpegtsMetadataPointerDescriptor.metadata_application_format", + "GstMpegtsMetadataPointerDescriptor.metadata_format", + "GstMpegtsMetadataPointerDescriptor.metadata_format_identifier", + "GstMpegtsMetadataPointerDescriptor.metadata_service_id", + "GstMpegtsMetadataPointerDescriptor.program_number", "GstMpegtsMiscDescriptorType", "GstMpegtsModulationType", "GstMpegtsNIT", @@ -13905,6 +14271,10 @@ "GstOpenalSrc!src", "GstOpenalSrc:device", "GstOpenalSrc:device-name", + "GstOpenaptxDec!sink", + "GstOpenaptxDec!src", + "GstOpenaptxEnc!sink", + "GstOpenaptxEnc!src", "GstOpencvFaceBlurFlags", "GstOpencvFaceBlurFlags::do-canny-pruning", "GstOpencvFaceDetectFlags", @@ -14600,6 +14970,14 @@ "GstQTMuxPad", "GstQTMuxPad:trak-timescale", "GstQml6D3D11Sink!sink", + "GstQml6GLMixer!sink_%u", + "GstQml6GLMixer!src", + "GstQml6GLMixerPad", + "GstQml6GLMixerPad:widget", + "GstQml6GLOverlay!sink", + "GstQml6GLOverlay!src", + "GstQml6GLSink!sink", + "GstQml6GLSrc!src", "GstQrcodeOverlayCorrection", "GstQrcodeOverlayCorrection::Approx 15%%", "GstQrcodeOverlayCorrection::Approx 25%%", @@ -14790,6 +15168,8 @@ "GstRTCPSync", "GstRTCPSync::always", "GstRTCPSync::initial", + "GstRTCPSync::never", + "GstRTCPSync::ntp", "GstRTCPSync::rtp-info", "GstRTCPType", "GstRTCPXRType", @@ -15574,6 +15954,7 @@ "GstRTSPWMS", "GstRTSPWatch", "GstRTSPWatchFuncs", + "GstRUsageTracer", "GstRadioacTV", "GstRadioacTV!sink", "GstRadioacTV!src", @@ -15892,6 +16273,7 @@ "GstRtmpAuthmod", "GstRtmpAuthmod::adobe", "GstRtmpAuthmod::auto", + "GstRtmpAuthmod::llnw", "GstRtmpAuthmod::none", "GstRtmpLocationHandler", "GstRtmpLocationHandler:application", @@ -16221,6 +16603,9 @@ "GstRtpOnvifTimestamp:set-t-bit", "GstRtpPassthroughPay!sink", "GstRtpPassthroughPay!src", + "GstRtpPassthroughPayRetimestampMode", + "GstRtpPassthroughPayRetimestampMode::disabled", + "GstRtpPassthroughPayRetimestampMode::enabled", "GstRtpPcmaDepay", "GstRtpPcmaDepay!sink", "GstRtpPcmaDepay!src", @@ -16781,6 +17166,7 @@ "GstSegmentationMethod::codebook", "GstSegmentationMethod::mog", "GstSegmentationMethod::mog2", + "GstSegmentationType", "GstSelectorPad", "GstSelectorPad:active", "GstSelectorPad:always-ok", @@ -17129,6 +17515,8 @@ "GstSsaParse", "GstSsaParse!sink", "GstSsaParse!src", + "GstSsdObjectDetector!sink", + "GstSsdObjectDetector!src", "GstStackTraceFlags", "GstState", "GstStateChange", @@ -17141,6 +17529,7 @@ "GstStaticPadTemplate.name_template", "GstStaticPadTemplate.presence", "GstStaticPadTemplate.static_caps", + "GstStatsTracer", "GstStereo", "GstStereo!sink", "GstStereo!src", @@ -17195,8 +17584,11 @@ "GstStructure.type", "GstStructureChangeType", "GstStructureFilterMapFunc", + "GstStructureFilterMapIdStrFunc", "GstStructureForeachFunc", + "GstStructureForeachIdStrFunc", "GstStructureMapFunc", + "GstStructureMapIdStrFunc", "GstSubParse", "GstSubParse!sink", "GstSubParse!src", @@ -17210,6 +17602,47 @@ "GstSubtitleOverlay:silent", "GstSubtitleOverlay:subtitle-encoding", "GstSubtitleOverlay:subtitle-ts-offset", + "GstSvtAv1Enc!sink", + "GstSvtAv1Enc!src", + "GstSvtAv1EncIntraRefreshType", + "GstSvtAv1EncIntraRefreshType::CRA", + "GstSvtAv1EncIntraRefreshType::IDR", + "GstSvtHevcEnc!sink", + "GstSvtHevcEnc!src", + "GstSvtHevcEncBPyramid", + "GstSvtHevcEncBPyramid::2-level-hierarchy", + "GstSvtHevcEncBPyramid::3-level-hierarchy", + "GstSvtHevcEncBPyramid::4-level-hierarchy", + "GstSvtHevcEncBPyramid::flat", + "GstSvtHevcEncBaseLayerMode", + "GstSvtHevcEncBaseLayerMode::B-frame", + "GstSvtHevcEncBaseLayerMode::P-frame", + "GstSvtHevcEncPredStruct", + "GstSvtHevcEncPredStruct::low-delay-B", + "GstSvtHevcEncPredStruct::low-delay-P", + "GstSvtHevcEncPredStruct::random-access", + "GstSvtHevcEncRC", + "GstSvtHevcEncRC::cqp", + "GstSvtHevcEncRC::vbr", + "GstSvtHevcEncTune", + "GstSvtHevcEncTune::oq", + "GstSvtHevcEncTune::sq", + "GstSvtHevcEncTune::vmaf", + "GstSvtJpegXsDec!sink", + "GstSvtJpegXsDec!src", + "GstSvtJpegXsEnc!sink", + "GstSvtJpegXsEnc!src", + "GstSvtJpegXsEncCodingSignsType", + "GstSvtJpegXsEncCodingSignsType::disable", + "GstSvtJpegXsEncCodingSignsType::fast", + "GstSvtJpegXsEncCodingSignsType::full", + "GstSvtJpegXsEncQuantModeType", + "GstSvtJpegXsEncQuantModeType::deadzone", + "GstSvtJpegXsEncQuantModeType::uniform", + "GstSvtJpegXsEncRateControlModeType", + "GstSvtJpegXsEncRateControlModeType::cbr-precinct", + "GstSvtJpegXsEncRateControlModeType::cbr-precinct-move-padding", + "GstSvtJpegXsEncRateControlModeType::cbr-slice", "GstSwitchBin", "GstSwitchBin!sink", "GstSwitchBin!src", @@ -17341,6 +17774,21 @@ "GstTemplateMatch:display", "GstTemplateMatch:method", "GstTemplateMatch:template", + "GstTensor", + "GstTensor.data", + "GstTensor.data_type", + "GstTensor.dims", + "GstTensor.dims_order", + "GstTensor.id", + "GstTensor.layout", + "GstTensor.num_dims", + "GstTensorDataType", + "GstTensorDimOrder", + "GstTensorLayout", + "GstTensorMeta", + "GstTensorMeta.meta", + "GstTensorMeta.num_tensors", + "GstTensorMeta.tensors", "GstTest", "GstTest!sink", "GstTest:allowed-timestamp-deviation", @@ -17443,6 +17891,7 @@ "GstTimeCodeStamperSource::last-known-or-zero", "GstTimeCodeStamperSource::ltc", "GstTimeCodeStamperSource::rtc", + "GstTimeCodeStamperSource::running-time", "GstTimeCodeStamperSource::zero", "GstTimeOverlay", "GstTimeOverlay!src", @@ -18001,6 +18450,7 @@ "GstVPXEncTuning", "GstVPXEncTuning::psnr", "GstVPXEncTuning::ssim", + "GstVTEnc", "GstVaAV1Dec!sink", "GstVaAV1Dec!src", "GstVaAV1Enc!sink", @@ -18057,6 +18507,8 @@ "GstVaH264Enc!src", "GstVaH265Dec!sink", "GstVaH265Dec!src", + "GstVaH265Enc!sink", + "GstVaH265Enc!src", "GstVaImplementation", "GstVaInterpolationMethod", "GstVaInterpolationMethod::advanced", @@ -18086,6 +18538,8 @@ "GstVaapiDecodeBin:max-size-buffers", "GstVaapiDecodeBin:max-size-bytes", "GstVaapiDecodeBin:max-size-time", + "GstVaapiDecode_av1!sink", + "GstVaapiDecode_av1!src", "GstVaapiDecode_h264", "GstVaapiDecode_h264!sink", "GstVaapiDecode_h264!src", @@ -18103,7 +18557,6 @@ "GstVaapiDecode_vc1", "GstVaapiDecode_vc1!sink", "GstVaapiDecode_vc1!src", - "vaapivp9dec", "GstVaapiDecode_vp9!sink", "GstVaapiDecode_vp9!src", "GstVaapiDeinterlaceMethod", @@ -18517,6 +18970,7 @@ "GstValidateScenario.parent", "GstValidateScenario::action-done", "GstValidateScenario::done", + "GstValidateScenario::stopping", "GstValidateScenario:execute-on-idle", "GstValidateScenario:handles-states", "GstValidateScenario:validate-runner", @@ -18549,6 +19003,7 @@ "GstValveDropMode::drop-all", "GstValveDropMode::forward-sticky-events", "GstValveDropMode::transform-to-gap", + "GstVecDeque", "GstVertigoTV", "GstVertigoTV!sink", "GstVertigoTV!src", @@ -19323,6 +19778,7 @@ "GstVp8DecoderClass::output_picture", "GstVp8DecoderClass::start_picture", "GstVp8FrameHdr", + "GstVp8FrameType", "GstVp8MbLfAdjustments", "GstVp8ModeProbs", "GstVp8MvProbs", @@ -19340,11 +19796,13 @@ "GstVp8QuantIndices", "GstVp8RangeDecoder", "GstVp8RangeDecoderState", + "GstVp8RefFrameType", "GstVp8Segmentation", "GstVp8TokenProbs", "GstVp9AlphaDecodeBin!sink", "GstVp9AlphaDecodeBin!src", "GstVp9BitDepth", + "GstVp9BitWriterResult", "GstVp9ColorRange", "GstVp9ColorSpace", "GstVp9Decoder", @@ -19464,7 +19922,9 @@ "GstVtdec!src", "GstVtdecHw!sink", "GstVtdecHw!src", - "GstVTEnc", + "GstVtencRateControl", + "GstVtencRateControl::abr", + "GstVtencRateControl::cbr", "GstVulkanBarrierBufferInfo", "GstVulkanBarrierBufferInfo.offset", "GstVulkanBarrierBufferInfo.parent", @@ -19554,6 +20014,10 @@ "GstVulkanDownload", "GstVulkanDownload!sink", "GstVulkanDownload!src", + "GstVulkanEncodeQueryResult", + "GstVulkanEncodeQueryResult.data_size", + "GstVulkanEncodeQueryResult.offset", + "GstVulkanEncodeQueryResult.status", "GstVulkanError", "GstVulkanFence", "GstVulkanFence.cache", @@ -19580,6 +20044,10 @@ "GstVulkanFormatInfo.scaling", "GstVulkanFormatInfo.shift", "GstVulkanFormatInfo.w_sub", + "GstVulkanFormatMap", + "GstVulkanFormatMap.format", + "GstVulkanFormatMap.vkfrmt", + "GstVulkanFormatMap.vkfrmts", "GstVulkanFormatScaling", "GstVulkanFullScreenQuad", "GstVulkanFullScreenQuad.cmd_pool", @@ -19699,6 +20167,7 @@ "GstVulkanQueueClass.parent_class", "GstVulkanQueueFamilyOps", "GstVulkanQueueFamilyOps.query", + "GstVulkanQueueFamilyOps.query_result_status", "GstVulkanQueueFamilyOps.video", "GstVulkanShaderSpv!sink", "GstVulkanShaderSpv!src", @@ -19764,8 +20233,11 @@ "GstVulkanVideoProfile.usage.codec._reserved", "GstVulkanVideoProfile.usage.codec.base", "GstVulkanVideoProfile.usage.codec.h264dec", + "GstVulkanVideoProfile.usage.codec.h264enc", "GstVulkanVideoProfile.usage.codec.h265dec", + "GstVulkanVideoProfile.usage.codec.h265enc", "GstVulkanVideoProfile.usage.decode", + "GstVulkanVideoProfile.usage.encode", "GstVulkanViewConvert", "GstVulkanViewConvert!sink", "GstVulkanViewConvert!src", @@ -20140,6 +20612,7 @@ "GstWebRTCSessionDescription.type", "GstWebRTCSignalingState", "GstWebRTCStatsType", + "GstWebView2Src!src", "GstWebpEnc", "GstWebpEnc!sink", "GstWebpEnc!src", @@ -20292,6 +20765,10 @@ "GstX264EncMe::hex", "GstX264EncMe::tesa", "GstX264EncMe::umh", + "GstX264EncNalHrd", + "GstX264EncNalHrd::cbr", + "GstX264EncNalHrd::none", + "GstX264EncNalHrd::vbr", "GstX264EncPass", "GstX264EncPass::cbr", "GstX264EncPass::pass1", @@ -20418,6 +20895,8 @@ "GstZBar:attach-frame", "GstZBar:cache", "GstZBar:message", + "GstZXing!sink", + "GstZXing!src", "GstZebraStripe", "GstZebraStripe!sink", "GstZebraStripe!src", @@ -21879,6 +22358,774 @@ "_GstH265VUIParams.video_format", "_GstH265VUIParams.video_full_range_flag", "_GstH265VUIParams.video_signal_type_present_flag", + "_GstH266ALF.cc_cb_coeff_sign", + "_GstH266ALF.cc_cb_filter_signal_flag", + "_GstH266ALF.cc_cb_filters_signalled_minus1", + "_GstH266ALF.cc_cb_mapped_coeff_abs", + "_GstH266ALF.cc_cr_coeff_sign", + "_GstH266ALF.cc_cr_filter_signal_flag", + "_GstH266ALF.cc_cr_filters_signalled_minus1", + "_GstH266ALF.cc_cr_mapped_coeff_abs", + "_GstH266ALF.chroma_clip_flag", + "_GstH266ALF.chroma_clip_idx", + "_GstH266ALF.chroma_coeff_abs", + "_GstH266ALF.chroma_coeff_sign", + "_GstH266ALF.chroma_filter_signal_flag", + "_GstH266ALF.chroma_num_alt_filters_minus1", + "_GstH266ALF.luma_clip_flag", + "_GstH266ALF.luma_clip_idx", + "_GstH266ALF.luma_coeff_abs", + "_GstH266ALF.luma_coeff_delta_idx", + "_GstH266ALF.luma_coeff_sign", + "_GstH266ALF.luma_filter_signal_flag", + "_GstH266ALF.luma_num_filters_signalled_minus1", + "_GstH266APS.aps_id", + "_GstH266APS.chroma_present_flag", + "_GstH266APS.extension_data_flag", + "_GstH266APS.extension_flag", + "_GstH266APS.params_type", + "_GstH266APS.valid", + "_GstH266AUD.irap_or_gdr_flag", + "_GstH266AUD.pic_type", + "_GstH266BufferingPeriod.additional_concatenation_info_present_flag", + "_GstH266BufferingPeriod.alt_cpb_params_present_flag", + "_GstH266BufferingPeriod.concatenation_flag", + "_GstH266BufferingPeriod.cpb_cnt_minus1", + "_GstH266BufferingPeriod.cpb_initial_removal_delay_length_minus1", + "_GstH266BufferingPeriod.cpb_removal_delay_delta_minus1", + "_GstH266BufferingPeriod.cpb_removal_delay_delta_val", + "_GstH266BufferingPeriod.cpb_removal_delay_deltas_present_flag", + "_GstH266BufferingPeriod.cpb_removal_delay_length_minus1", + "_GstH266BufferingPeriod.dpb_output_delay_du_length_minus1", + "_GstH266BufferingPeriod.dpb_output_delay_length_minus1", + "_GstH266BufferingPeriod.dpb_output_tid_offset", + "_GstH266BufferingPeriod.du_cpb_params_in_pic_timing_sei_flag", + "_GstH266BufferingPeriod.du_cpb_removal_delay_increment_length_minus1", + "_GstH266BufferingPeriod.du_dpb_params_in_pic_timing_sei_flag", + "_GstH266BufferingPeriod.du_hrd_params_present_flag", + "_GstH266BufferingPeriod.max_initial_removal_delay_for_concatenation", + "_GstH266BufferingPeriod.max_sublayers_minus1", + "_GstH266BufferingPeriod.nal_hrd_params_present_flag", + "_GstH266BufferingPeriod.nal_initial_alt_cpb_removal_delay", + "_GstH266BufferingPeriod.nal_initial_alt_cpb_removal_offset", + "_GstH266BufferingPeriod.nal_initial_cpb_removal_delay", + "_GstH266BufferingPeriod.nal_initial_cpb_removal_offset", + "_GstH266BufferingPeriod.num_cpb_removal_delay_deltas_minus1", + "_GstH266BufferingPeriod.sublayer_dpb_output_offsets_present_flag", + "_GstH266BufferingPeriod.sublayer_initial_cpb_removal_delay_present_flag", + "_GstH266BufferingPeriod.use_alt_cpb_params_flag", + "_GstH266BufferingPeriod.vcl_hrd_params_present_flag", + "_GstH266BufferingPeriod.vcl_initial_alt_cpb_removal_delay", + "_GstH266BufferingPeriod.vcl_initial_alt_cpb_removal_offset", + "_GstH266BufferingPeriod.vcl_initial_cpb_removal_delay", + "_GstH266BufferingPeriod.vcl_initial_cpb_removal_offset", + "_GstH266DCI.extension_data_flag", + "_GstH266DCI.extension_flag", + "_GstH266DCI.num_ptls_minus1", + "_GstH266DCI.profile_tier_level", + "_GstH266DPBParameters.max_dec_pic_buffering_minus1", + "_GstH266DPBParameters.max_latency_increase_plus1", + "_GstH266DPBParameters.max_num_reorder_pics", + "_GstH266DUInfo.decoding_unit_idx", + "_GstH266DUInfo.dpb_output_du_delay", + "_GstH266DUInfo.dpb_output_du_delay_present_flag", + "_GstH266DUInfo.du_cpb_removal_delay_increment", + "_GstH266DUInfo.sublayer_delays_present_flag", + "_GstH266FrameFieldInfo.bottom_field_flag", + "_GstH266FrameFieldInfo.display_elemental_periods_minus1", + "_GstH266FrameFieldInfo.display_fields_from_frame_flag", + "_GstH266FrameFieldInfo.duplicate_flag", + "_GstH266FrameFieldInfo.field_pic_flag", + "_GstH266FrameFieldInfo.paired_with_next_field_flag", + "_GstH266FrameFieldInfo.pairing_indicated_flag", + "_GstH266FrameFieldInfo.source_scan_type", + "_GstH266FrameFieldInfo.top_field_first_flag", + "_GstH266FrameFieldInfo.valid", + "_GstH266GeneralConstraintsInfo.all_layers_independent_constraint_flag", + "_GstH266GeneralConstraintsInfo.all_rap_pictures_constraint_flag", + "_GstH266GeneralConstraintsInfo.intra_only_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_act_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_affine_motion_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_alf_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_amvr_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_aps_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_bcw_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_bdof_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_bdpcm_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ccalf_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_cclm_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_chroma_qp_offset_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ciip_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_cra_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_cu_qp_delta_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_dep_quant_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_dmvr_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_explicit_scaling_list_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_extended_precision_processing_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_gdr_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_gpm_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ibc_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_idr_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_idr_rpl_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_isp_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_joint_cbcr_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ladf_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_lfnst_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_lmcs_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_luma_transform_size_64_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_mip_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_mixed_nalu_types_in_pic_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_mmvd_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_mrl_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_mts_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_mtt_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_palette_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_partition_constraints_override_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_persistent_rice_adaptation_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_prof_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_qtbtt_dual_tree_intra_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_radl_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_rasl_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_rectangular_slice_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ref_pic_resampling_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ref_wraparound_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_res_change_in_clvs_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_reverse_last_sig_coeff_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_rrc_rice_extension_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_sao_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_sbt_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_sbtmvp_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_sign_data_hiding_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_smvd_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_stsa_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_subpic_info_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_temporal_mvp_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_trail_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_transform_skip_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_ts_residual_coding_rice_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_virtual_boundaries_constraint_flag", + "_GstH266GeneralConstraintsInfo.no_weighted_prediction_constraint_flag", + "_GstH266GeneralConstraintsInfo.one_au_only_constraint_flag", + "_GstH266GeneralConstraintsInfo.one_slice_per_pic_constraint_flag", + "_GstH266GeneralConstraintsInfo.one_slice_per_subpic_constraint_flag", + "_GstH266GeneralConstraintsInfo.one_tile_per_pic_constraint_flag", + "_GstH266GeneralConstraintsInfo.pic_header_in_slice_header_constraint_flag", + "_GstH266GeneralConstraintsInfo.present_flag", + "_GstH266GeneralConstraintsInfo.reserved_zero_bit", + "_GstH266GeneralConstraintsInfo.sixteen_minus_max_bitdepth_constraint_idc", + "_GstH266GeneralConstraintsInfo.three_minus_max_chroma_format_constraint_idc", + "_GstH266GeneralConstraintsInfo.three_minus_max_log2_ctu_size_constraint_idc", + "_GstH266GeneralHRDParameters.bit_rate_scale", + "_GstH266GeneralHRDParameters.cpb_size_du_scale", + "_GstH266GeneralHRDParameters.cpb_size_scale", + "_GstH266GeneralHRDParameters.general_du_hrd_params_present_flag", + "_GstH266GeneralHRDParameters.general_nal_hrd_params_present_flag", + "_GstH266GeneralHRDParameters.general_same_pic_timing_in_all_ols_flag", + "_GstH266GeneralHRDParameters.general_vcl_hrd_params_present_flag", + "_GstH266GeneralHRDParameters.hrd_cpb_cnt_minus1", + "_GstH266GeneralHRDParameters.num_units_in_tick", + "_GstH266GeneralHRDParameters.tick_divisor_minus2", + "_GstH266GeneralHRDParameters.time_scale", + "_GstH266LMCS.delta_abs_crs", + "_GstH266LMCS.delta_abs_cw", + "_GstH266LMCS.delta_cw_prec_minus1", + "_GstH266LMCS.delta_max_bin_idx", + "_GstH266LMCS.delta_sign_crs_flag", + "_GstH266LMCS.delta_sign_cw_flag", + "_GstH266LMCS.min_bin_idx", + "_GstH266NalUnit.data", + "_GstH266NalUnit.header_bytes", + "_GstH266NalUnit.layer_id", + "_GstH266NalUnit.offset", + "_GstH266NalUnit.sc_offset", + "_GstH266NalUnit.size", + "_GstH266NalUnit.temporal_id_plus1", + "_GstH266NalUnit.type", + "_GstH266NalUnit.valid", + "_GstH266OLSHRDParameters.elemental_duration_in_tc_minus1", + "_GstH266OLSHRDParameters.fixed_pic_rate_general_flag", + "_GstH266OLSHRDParameters.fixed_pic_rate_within_cvs_flag", + "_GstH266OLSHRDParameters.low_delay_hrd_flag", + "_GstH266OLSHRDParameters.nal_sub_layer_hrd_parameters", + "_GstH266OLSHRDParameters.vcl_sub_layer_hrd_parameters", + "_GstH266OPI.extension_data_flag", + "_GstH266OPI.extension_flag", + "_GstH266OPI.htid_info_present_flag", + "_GstH266OPI.htid_plus1", + "_GstH266OPI.ols_idx", + "_GstH266OPI.ols_info_present_flag", + "_GstH266PPS.alf_info_in_ph_flag", + "_GstH266PPS.cabac_init_present_flag", + "_GstH266PPS.cb_beta_offset_div2", + "_GstH266PPS.cb_qp_offset", + "_GstH266PPS.cb_qp_offset_list", + "_GstH266PPS.cb_tc_offset_div2", + "_GstH266PPS.chroma_qp_offset_list_len_minus1", + "_GstH266PPS.chroma_tool_offsets_present_flag", + "_GstH266PPS.conf_win_bottom_offset", + "_GstH266PPS.conf_win_left_offset", + "_GstH266PPS.conf_win_right_offset", + "_GstH266PPS.conf_win_top_offset", + "_GstH266PPS.conformance_window_flag", + "_GstH266PPS.cr_beta_offset_div2", + "_GstH266PPS.cr_qp_offset", + "_GstH266PPS.cr_qp_offset_list", + "_GstH266PPS.cr_tc_offset_div2", + "_GstH266PPS.crop_rect_height", + "_GstH266PPS.crop_rect_width", + "_GstH266PPS.crop_rect_x", + "_GstH266PPS.crop_rect_y", + "_GstH266PPS.cu_chroma_qp_offset_list_enabled_flag", + "_GstH266PPS.cu_qp_delta_enabled_flag", + "_GstH266PPS.dbf_info_in_ph_flag", + "_GstH266PPS.deblocking_filter_control_present_flag", + "_GstH266PPS.deblocking_filter_disabled_flag", + "_GstH266PPS.deblocking_filter_override_enabled_flag", + "_GstH266PPS.exp_slice_height_in_ctus_minus1", + "_GstH266PPS.extension_data_flag", + "_GstH266PPS.extension_flag", + "_GstH266PPS.height", + "_GstH266PPS.init_qp_minus26", + "_GstH266PPS.joint_cbcr_qp_offset_list", + "_GstH266PPS.joint_cbcr_qp_offset_present_flag", + "_GstH266PPS.joint_cbcr_qp_offset_value", + "_GstH266PPS.log2_ctu_size_minus5", + "_GstH266PPS.loop_filter_across_slices_enabled_flag", + "_GstH266PPS.loop_filter_across_tiles_enabled_flag", + "_GstH266PPS.luma_beta_offset_div2", + "_GstH266PPS.luma_tc_offset_div2", + "_GstH266PPS.mixed_nalu_types_in_pic_flag", + "_GstH266PPS.no_pic_partition_flag", + "_GstH266PPS.num_exp_slices_in_tile", + "_GstH266PPS.num_exp_tile_columns_minus1", + "_GstH266PPS.num_exp_tile_rows_minus1", + "_GstH266PPS.num_ref_idx_default_active_minus1", + "_GstH266PPS.num_slices_in_pic_minus1", + "_GstH266PPS.num_slices_in_subpic", + "_GstH266PPS.num_subpics_minus1", + "_GstH266PPS.num_tile_columns", + "_GstH266PPS.num_tile_rows", + "_GstH266PPS.num_tiles_in_pic", + "_GstH266PPS.output_flag_present_flag", + "_GstH266PPS.pic_height_in_ctbs_y", + "_GstH266PPS.pic_height_in_luma_samples", + "_GstH266PPS.pic_size_in_ctbs_y", + "_GstH266PPS.pic_width_in_ctbs_y", + "_GstH266PPS.pic_width_in_luma_samples", + "_GstH266PPS.pic_width_minus_wraparound_offset", + "_GstH266PPS.picture_header_extension_present_flag", + "_GstH266PPS.pps_id", + "_GstH266PPS.qp_delta_info_in_ph_flag", + "_GstH266PPS.rect_slice_flag", + "_GstH266PPS.ref_wraparound_enabled_flag", + "_GstH266PPS.rpl1_idx_present_flag", + "_GstH266PPS.rpl_info_in_ph_flag", + "_GstH266PPS.sao_info_in_ph_flag", + "_GstH266PPS.scaling_win_bottom_offset", + "_GstH266PPS.scaling_win_left_offset", + "_GstH266PPS.scaling_win_right_offset", + "_GstH266PPS.scaling_win_top_offset", + "_GstH266PPS.scaling_window_explicit_signalling_flag", + "_GstH266PPS.single_slice_per_subpic_flag", + "_GstH266PPS.slice_chroma_qp_offsets_present_flag", + "_GstH266PPS.slice_header_extension_present_flag", + "_GstH266PPS.slice_height_in_ctus", + "_GstH266PPS.slice_height_in_tiles_minus1", + "_GstH266PPS.slice_top_left_ctu_x", + "_GstH266PPS.slice_top_left_ctu_y", + "_GstH266PPS.slice_top_left_tile_idx", + "_GstH266PPS.slice_width_in_tiles_minus1", + "_GstH266PPS.sps", + "_GstH266PPS.sps_id", + "_GstH266PPS.subpic_id", + "_GstH266PPS.subpic_id_len_minus1", + "_GstH266PPS.subpic_id_mapping_present_flag", + "_GstH266PPS.tile_col_bd_val", + "_GstH266PPS.tile_column_width_minus1", + "_GstH266PPS.tile_idx_delta_present_flag", + "_GstH266PPS.tile_idx_delta_val", + "_GstH266PPS.tile_row_bd_val", + "_GstH266PPS.tile_row_height_minus1", + "_GstH266PPS.valid", + "_GstH266PPS.weighted_bipred_flag", + "_GstH266PPS.weighted_pred_flag", + "_GstH266PPS.width", + "_GstH266PPS.wp_info_in_ph_flag", + "_GstH266PicHdr.alf_aps_id_chroma", + "_GstH266PicHdr.alf_aps_id_luma", + "_GstH266PicHdr.alf_cb_enabled_flag", + "_GstH266PicHdr.alf_cc_cb_aps_id", + "_GstH266PicHdr.alf_cc_cb_enabled_flag", + "_GstH266PicHdr.alf_cc_cr_aps_id", + "_GstH266PicHdr.alf_cc_cr_enabled_flag", + "_GstH266PicHdr.alf_cr_enabled_flag", + "_GstH266PicHdr.alf_enabled_flag", + "_GstH266PicHdr.bdof_disabled_flag", + "_GstH266PicHdr.cb_beta_offset_div2", + "_GstH266PicHdr.cb_tc_offset_div2", + "_GstH266PicHdr.chroma_residual_scale_flag", + "_GstH266PicHdr.collocated_from_l0_flag", + "_GstH266PicHdr.collocated_ref_idx", + "_GstH266PicHdr.cr_beta_offset_div2", + "_GstH266PicHdr.cr_tc_offset_div2", + "_GstH266PicHdr.cu_chroma_qp_offset_subdiv_inter_slice", + "_GstH266PicHdr.cu_chroma_qp_offset_subdiv_intra_slice", + "_GstH266PicHdr.cu_qp_delta_subdiv_inter_slice", + "_GstH266PicHdr.cu_qp_delta_subdiv_intra_slice", + "_GstH266PicHdr.deblocking_filter_disabled_flag", + "_GstH266PicHdr.deblocking_params_present_flag", + "_GstH266PicHdr.dmvr_disabled_flag", + "_GstH266PicHdr.explicit_scaling_list_enabled_flag", + "_GstH266PicHdr.extension_data_byte", + "_GstH266PicHdr.extension_length", + "_GstH266PicHdr.extra_bit", + "_GstH266PicHdr.gdr_or_irap_pic_flag", + "_GstH266PicHdr.gdr_pic_flag", + "_GstH266PicHdr.inter_slice_allowed_flag", + "_GstH266PicHdr.intra_slice_allowed_flag", + "_GstH266PicHdr.joint_cbcr_sign_flag", + "_GstH266PicHdr.lmcs_aps_id", + "_GstH266PicHdr.lmcs_enabled_flag", + "_GstH266PicHdr.log2_diff_max_bt_min_qt_inter_slice", + "_GstH266PicHdr.log2_diff_max_bt_min_qt_intra_slice_chroma", + "_GstH266PicHdr.log2_diff_max_bt_min_qt_intra_slice_luma", + "_GstH266PicHdr.log2_diff_max_tt_min_qt_inter_slice", + "_GstH266PicHdr.log2_diff_max_tt_min_qt_intra_slice_chroma", + "_GstH266PicHdr.log2_diff_max_tt_min_qt_intra_slice_luma", + "_GstH266PicHdr.log2_diff_min_qt_min_cb_inter_slice", + "_GstH266PicHdr.log2_diff_min_qt_min_cb_intra_slice_chroma", + "_GstH266PicHdr.log2_diff_min_qt_min_cb_intra_slice_luma", + "_GstH266PicHdr.luma_beta_offset_div2", + "_GstH266PicHdr.luma_tc_offset_div2", + "_GstH266PicHdr.max_mtt_hierarchy_depth_inter_slice", + "_GstH266PicHdr.max_mtt_hierarchy_depth_intra_slice_chroma", + "_GstH266PicHdr.max_mtt_hierarchy_depth_intra_slice_luma", + "_GstH266PicHdr.mmvd_fullpel_only_flag", + "_GstH266PicHdr.mvd_l1_zero_flag", + "_GstH266PicHdr.non_ref_pic_flag", + "_GstH266PicHdr.num_alf_aps_ids_luma", + "_GstH266PicHdr.num_hor_virtual_boundaries", + "_GstH266PicHdr.num_ver_virtual_boundaries", + "_GstH266PicHdr.partition_constraints_override_flag", + "_GstH266PicHdr.pic_order_cnt_lsb", + "_GstH266PicHdr.pic_output_flag", + "_GstH266PicHdr.poc_msb_cycle_present_flag", + "_GstH266PicHdr.poc_msb_cycle_val", + "_GstH266PicHdr.pps", + "_GstH266PicHdr.pps_id", + "_GstH266PicHdr.pred_weight_table", + "_GstH266PicHdr.prof_disabled_flag", + "_GstH266PicHdr.qp_delta", + "_GstH266PicHdr.recovery_poc_cnt", + "_GstH266PicHdr.ref_pic_lists", + "_GstH266PicHdr.sao_chroma_enabled_flag", + "_GstH266PicHdr.sao_luma_enabled_flag", + "_GstH266PicHdr.scaling_list_aps_id", + "_GstH266PicHdr.temporal_mvp_enabled_flag", + "_GstH266PicHdr.valid", + "_GstH266PicHdr.virtual_boundaries_present_flag", + "_GstH266PicHdr.virtual_boundary_pos_x_minus1", + "_GstH266PicHdr.virtual_boundary_pos_y_minus1", + "_GstH266PicTiming.cpb_alt_timing_info_present_flag", + "_GstH266PicTiming.cpb_removal_delay_delta_enabled_flag", + "_GstH266PicTiming.cpb_removal_delay_delta_idx", + "_GstH266PicTiming.cpb_removal_delay_minus", + "_GstH266PicTiming.cpb_removal_delay_minus1", + "_GstH266PicTiming.delay_for_concatenation_ensured_flag", + "_GstH266PicTiming.display_elemental_periods_minus1", + "_GstH266PicTiming.dpb_output_delay", + "_GstH266PicTiming.dpb_output_du_delay", + "_GstH266PicTiming.du_common_cpb_removal_delay_flag", + "_GstH266PicTiming.du_common_cpb_removal_delay_increment_minus1", + "_GstH266PicTiming.du_cpb_removal_delay_increment_minus1", + "_GstH266PicTiming.nal_cpb_alt_initial_removal_delay_delta", + "_GstH266PicTiming.nal_cpb_alt_initial_removal_offset_delta", + "_GstH266PicTiming.nal_cpb_delay_offset", + "_GstH266PicTiming.nal_dpb_delay_offset", + "_GstH266PicTiming.num_decoding_units_minus1", + "_GstH266PicTiming.num_nalus_in_du_minus1", + "_GstH266PicTiming.sublayer_delays_present_flag", + "_GstH266PicTiming.vcl_cpb_alt_initial_removal_delay_delta", + "_GstH266PicTiming.vcl_cpb_alt_initial_removal_offset_delta", + "_GstH266PicTiming.vcl_cpb_delay_offset", + "_GstH266PicTiming.vcl_dpb_delay_offset", + "_GstH266PredWeightTable.chroma_weight_l0_flag", + "_GstH266PredWeightTable.chroma_weight_l1_flag", + "_GstH266PredWeightTable.delta_chroma_log2_weight_denom", + "_GstH266PredWeightTable.delta_chroma_offset_l0", + "_GstH266PredWeightTable.delta_chroma_offset_l1", + "_GstH266PredWeightTable.delta_chroma_weight_l0", + "_GstH266PredWeightTable.delta_chroma_weight_l1", + "_GstH266PredWeightTable.delta_luma_weight_l0", + "_GstH266PredWeightTable.delta_luma_weight_l1", + "_GstH266PredWeightTable.luma_log2_weight_denom", + "_GstH266PredWeightTable.luma_offset_l0", + "_GstH266PredWeightTable.luma_offset_l1", + "_GstH266PredWeightTable.luma_weight_l0_flag", + "_GstH266PredWeightTable.luma_weight_l1_flag", + "_GstH266PredWeightTable.num_l0_weights", + "_GstH266PredWeightTable.num_l1_weights", + "_GstH266ProfileTierLevel.frame_only_constraint_flag", + "_GstH266ProfileTierLevel.general_constraints_info", + "_GstH266ProfileTierLevel.level_idc", + "_GstH266ProfileTierLevel.multilayer_enabled_flag", + "_GstH266ProfileTierLevel.num_sub_profiles", + "_GstH266ProfileTierLevel.profile_idc", + "_GstH266ProfileTierLevel.ptl_reserved_zero_bit", + "_GstH266ProfileTierLevel.sub_profile_idc", + "_GstH266ProfileTierLevel.sublayer_level_idc", + "_GstH266ProfileTierLevel.sublayer_level_present_flag", + "_GstH266ProfileTierLevel.tier_flag", + "_GstH266RefPicListStruct.abs_delta_poc_st", + "_GstH266RefPicListStruct.delta_poc_val_st", + "_GstH266RefPicListStruct.ilrp_idx", + "_GstH266RefPicListStruct.inter_layer_ref_pic_flag", + "_GstH266RefPicListStruct.ltrp_in_header_flag", + "_GstH266RefPicListStruct.num_inter_layer_pic", + "_GstH266RefPicListStruct.num_long_term_pic", + "_GstH266RefPicListStruct.num_ref_entries", + "_GstH266RefPicListStruct.num_short_term_pic", + "_GstH266RefPicListStruct.rpls_poc_lsb_lt", + "_GstH266RefPicListStruct.st_ref_pic_flag", + "_GstH266RefPicListStruct.strp_entry_sign_flag", + "_GstH266RefPicLists.delta_poc_msb_cycle_lt", + "_GstH266RefPicLists.delta_poc_msb_cycle_present_flag", + "_GstH266RefPicLists.poc_lsb_lt", + "_GstH266RefPicLists.rpl_idx", + "_GstH266RefPicLists.rpl_ref_list", + "_GstH266RefPicLists.rpl_sps_flag", + "_GstH266SEIMessage.payload.buffering_period", + "_GstH266SEIMessage.payload.du_info", + "_GstH266SEIMessage.payload.frame_field_info", + "_GstH266SEIMessage.payload.pic_timing", + "_GstH266SEIMessage.payload.scalable_nesting", + "_GstH266SEIMessage.payload.subpic_level_info", + "_GstH266SEIMessage.payloadType", + "_GstH266SPS.act_enabled_flag", + "_GstH266SPS.affine_amvr_enabled_flag", + "_GstH266SPS.affine_enabled_flag", + "_GstH266SPS.affine_prof_enabled_flag", + "_GstH266SPS.alf_enabled_flag", + "_GstH266SPS.amvr_enabled_flag", + "_GstH266SPS.bcw_enabled_flag", + "_GstH266SPS.bdof_control_present_in_ph_flag", + "_GstH266SPS.bdof_enabled_flag", + "_GstH266SPS.bdpcm_enabled_flag", + "_GstH266SPS.bitdepth_minus8", + "_GstH266SPS.ccalf_enabled_flag", + "_GstH266SPS.cclm_enabled_flag", + "_GstH266SPS.chroma_format_idc", + "_GstH266SPS.chroma_horizontal_collocated_flag", + "_GstH266SPS.chroma_qp_table", + "_GstH266SPS.chroma_vertical_collocated_flag", + "_GstH266SPS.ciip_enabled_flag", + "_GstH266SPS.conf_win_bottom_offset", + "_GstH266SPS.conf_win_left_offset", + "_GstH266SPS.conf_win_right_offset", + "_GstH266SPS.conf_win_top_offset", + "_GstH266SPS.conformance_window_flag", + "_GstH266SPS.crop_rect_height", + "_GstH266SPS.crop_rect_width", + "_GstH266SPS.crop_rect_x", + "_GstH266SPS.crop_rect_y", + "_GstH266SPS.ctu_size", + "_GstH266SPS.delta_qp_diff_val", + "_GstH266SPS.delta_qp_in_val_minus1", + "_GstH266SPS.dep_quant_enabled_flag", + "_GstH266SPS.dmvr_control_present_in_ph_flag", + "_GstH266SPS.dmvr_enabled_flag", + "_GstH266SPS.dpb", + "_GstH266SPS.entropy_coding_sync_enabled_flag", + "_GstH266SPS.entry_point_offsets_present_flag", + "_GstH266SPS.explicit_mts_inter_enabled_flag", + "_GstH266SPS.explicit_mts_intra_enabled_flag", + "_GstH266SPS.explicit_scaling_list_enabled_flag", + "_GstH266SPS.extension_7_flags", + "_GstH266SPS.extension_flag", + "_GstH266SPS.extra_ph_bit_present_flag", + "_GstH266SPS.extra_sh_bit_present_flag", + "_GstH266SPS.field_seq_flag", + "_GstH266SPS.five_minus_max_num_subblock_merge_cand", + "_GstH266SPS.fps_den", + "_GstH266SPS.fps_num", + "_GstH266SPS.gdr_enabled_flag", + "_GstH266SPS.general_hrd_params", + "_GstH266SPS.gpm_enabled_flag", + "_GstH266SPS.ibc_enabled_flag", + "_GstH266SPS.idr_rpl_present_flag", + "_GstH266SPS.independent_subpics_flag", + "_GstH266SPS.inter_layer_prediction_enabled_flag", + "_GstH266SPS.isp_enabled_flag", + "_GstH266SPS.joint_cbcr_enabled_flag", + "_GstH266SPS.ladf_delta_threshold_minus1", + "_GstH266SPS.ladf_enabled_flag", + "_GstH266SPS.ladf_lowest_interval_qp_offset", + "_GstH266SPS.ladf_qp_offset", + "_GstH266SPS.lfnst_enabled_flag", + "_GstH266SPS.lmcs_enabled_flag", + "_GstH266SPS.log2_ctu_size_minus5", + "_GstH266SPS.log2_diff_max_bt_min_qt_inter_slice", + "_GstH266SPS.log2_diff_max_bt_min_qt_intra_slice_chroma", + "_GstH266SPS.log2_diff_max_bt_min_qt_intra_slice_luma", + "_GstH266SPS.log2_diff_max_tt_min_qt_inter_slice", + "_GstH266SPS.log2_diff_max_tt_min_qt_intra_slice_chroma", + "_GstH266SPS.log2_diff_max_tt_min_qt_intra_slice_luma", + "_GstH266SPS.log2_diff_min_qt_min_cb_inter_slice", + "_GstH266SPS.log2_diff_min_qt_min_cb_intra_slice_chroma", + "_GstH266SPS.log2_diff_min_qt_min_cb_intra_slice_luma", + "_GstH266SPS.log2_max_pic_order_cnt_lsb_minus4", + "_GstH266SPS.log2_min_luma_coding_block_size_minus2", + "_GstH266SPS.log2_parallel_merge_level_minus2", + "_GstH266SPS.log2_transform_skip_max_size_minus2", + "_GstH266SPS.long_term_ref_pics_flag", + "_GstH266SPS.loop_filter_across_subpic_enabled_flag", + "_GstH266SPS.max_height", + "_GstH266SPS.max_luma_transform_size_64_flag", + "_GstH266SPS.max_mtt_hierarchy_depth_inter_slice", + "_GstH266SPS.max_mtt_hierarchy_depth_intra_slice_chroma", + "_GstH266SPS.max_mtt_hierarchy_depth_intra_slice_luma", + "_GstH266SPS.max_num_merge_cand_minus_max_num_gpm_cand", + "_GstH266SPS.max_sublayers_minus1", + "_GstH266SPS.max_width", + "_GstH266SPS.min_qp_prime_ts", + "_GstH266SPS.mip_enabled_flag", + "_GstH266SPS.mmvd_enabled_flag", + "_GstH266SPS.mmvd_fullpel_only_enabled_flag", + "_GstH266SPS.mrl_enabled_flag", + "_GstH266SPS.mts_enabled_flag", + "_GstH266SPS.nuh_layer_id", + "_GstH266SPS.num_extra_ph_bytes", + "_GstH266SPS.num_extra_sh_bytes", + "_GstH266SPS.num_hor_virtual_boundaries", + "_GstH266SPS.num_ladf_intervals_minus2", + "_GstH266SPS.num_points_in_qp_table_minus1", + "_GstH266SPS.num_ref_pic_lists", + "_GstH266SPS.num_subpics_minus1", + "_GstH266SPS.num_ver_virtual_boundaries", + "_GstH266SPS.ols_hrd_params", + "_GstH266SPS.palette_enabled_flag", + "_GstH266SPS.partition_constraints_override_enabled_flag", + "_GstH266SPS.pic_height_max_in_luma_samples", + "_GstH266SPS.pic_width_max_in_luma_samples", + "_GstH266SPS.poc_msb_cycle_flag", + "_GstH266SPS.poc_msb_cycle_len_minus1", + "_GstH266SPS.prof_control_present_in_ph_flag", + "_GstH266SPS.profile_tier_level", + "_GstH266SPS.ptl_dpb_hrd_params_present_flag", + "_GstH266SPS.qp_table_start_minus26", + "_GstH266SPS.qtbtt_dual_tree_intra_flag", + "_GstH266SPS.range_extension_flag", + "_GstH266SPS.range_params", + "_GstH266SPS.ref_pic_list_struct", + "_GstH266SPS.ref_pic_resampling_enabled_flag", + "_GstH266SPS.ref_wraparound_enabled_flag", + "_GstH266SPS.res_change_in_clvs_allowed_flag", + "_GstH266SPS.rpl1_same_as_rpl0_flag", + "_GstH266SPS.same_qp_table_for_chroma_flag", + "_GstH266SPS.sao_enabled_flag", + "_GstH266SPS.sbt_enabled_flag", + "_GstH266SPS.sbtmvp_enabled_flag", + "_GstH266SPS.scaling_matrix_designated_colour_space_flag", + "_GstH266SPS.scaling_matrix_for_alternative_colour_space_disabled_flag", + "_GstH266SPS.scaling_matrix_for_lfnst_disabled_flag", + "_GstH266SPS.sign_data_hiding_enabled_flag", + "_GstH266SPS.six_minus_max_num_ibc_merge_cand", + "_GstH266SPS.six_minus_max_num_merge_cand", + "_GstH266SPS.smvd_enabled_flag", + "_GstH266SPS.sps_6param_affine_enabled_flag", + "_GstH266SPS.sps_id", + "_GstH266SPS.sublayer_cpb_params_present_flag", + "_GstH266SPS.sublayer_dpb_params_flag", + "_GstH266SPS.subpic_ctu_top_left_x", + "_GstH266SPS.subpic_ctu_top_left_y", + "_GstH266SPS.subpic_height_minus1", + "_GstH266SPS.subpic_id", + "_GstH266SPS.subpic_id_len_minus1", + "_GstH266SPS.subpic_id_mapping_explicitly_signalled_flag", + "_GstH266SPS.subpic_id_mapping_present_flag", + "_GstH266SPS.subpic_info_present_flag", + "_GstH266SPS.subpic_same_size_flag", + "_GstH266SPS.subpic_treated_as_pic_flag", + "_GstH266SPS.subpic_width_minus1", + "_GstH266SPS.temporal_mvp_enabled_flag", + "_GstH266SPS.timing_hrd_params_present_flag", + "_GstH266SPS.transform_skip_enabled_flag", + "_GstH266SPS.valid", + "_GstH266SPS.virtual_boundaries_enabled_flag", + "_GstH266SPS.virtual_boundaries_present_flag", + "_GstH266SPS.virtual_boundary_pos_x_minus1", + "_GstH266SPS.virtual_boundary_pos_y_minus1", + "_GstH266SPS.vps", + "_GstH266SPS.vps_id", + "_GstH266SPS.vui_parameters_present_flag", + "_GstH266SPS.vui_params", + "_GstH266SPS.vui_payload_size_minus1", + "_GstH266SPS.weighted_bipred_flag", + "_GstH266SPS.weighted_pred_flag", + "_GstH266SPSRangeExtensionParams.extended_precision_flag", + "_GstH266SPSRangeExtensionParams.persistent_rice_adaptation_enabled_flag", + "_GstH266SPSRangeExtensionParams.reverse_last_sig_coeff_enabled_flag", + "_GstH266SPSRangeExtensionParams.rrc_rice_extension_flag", + "_GstH266SPSRangeExtensionParams.ts_residual_coding_rice_present_in_sh_flag", + "_GstH266ScalableNesting.all_layers_flag", + "_GstH266ScalableNesting.layer_id", + "_GstH266ScalableNesting.num_layers_minus1", + "_GstH266ScalableNesting.num_olss_minus1", + "_GstH266ScalableNesting.num_seis_minus1", + "_GstH266ScalableNesting.num_subpics_minus1", + "_GstH266ScalableNesting.ols_flag", + "_GstH266ScalableNesting.ols_idx_delta_minus1", + "_GstH266ScalableNesting.subpic_flag", + "_GstH266ScalableNesting.subpic_id", + "_GstH266ScalableNesting.subpic_id_len_minus1", + "_GstH266ScalingList.copy_mode_flag", + "_GstH266ScalingList.dc_coef", + "_GstH266ScalingList.delta_coef", + "_GstH266ScalingList.pred_id_delta", + "_GstH266ScalingList.pred_mode_flag", + "_GstH266ScalingList.scaling_list", + "_GstH266ScalingList.scaling_list_DC", + "_GstH266SliceHdr.alf_aps_id_chroma", + "_GstH266SliceHdr.alf_aps_id_luma", + "_GstH266SliceHdr.alf_cb_enabled_flag", + "_GstH266SliceHdr.alf_cc_cb_aps_id", + "_GstH266SliceHdr.alf_cc_cb_enabled_flag", + "_GstH266SliceHdr.alf_cc_cr_aps_id", + "_GstH266SliceHdr.alf_cc_cr_enabled_flag", + "_GstH266SliceHdr.alf_cr_enabled_flag", + "_GstH266SliceHdr.alf_enabled_flag", + "_GstH266SliceHdr.cabac_init_flag", + "_GstH266SliceHdr.cb_beta_offset_div2", + "_GstH266SliceHdr.cb_qp_offset", + "_GstH266SliceHdr.cb_tc_offset_div2", + "_GstH266SliceHdr.collocated_from_l0_flag", + "_GstH266SliceHdr.collocated_ref_idx", + "_GstH266SliceHdr.cr_beta_offset_div2", + "_GstH266SliceHdr.cr_qp_offset", + "_GstH266SliceHdr.cr_tc_offset_div2", + "_GstH266SliceHdr.cu_chroma_qp_offset_enabled_flag", + "_GstH266SliceHdr.deblocking_filter_disabled_flag", + "_GstH266SliceHdr.deblocking_params_present_flag", + "_GstH266SliceHdr.dep_quant_used_flag", + "_GstH266SliceHdr.entry_offset_len_minus1", + "_GstH266SliceHdr.entry_point_offset_minus1", + "_GstH266SliceHdr.entry_point_start_ctu", + "_GstH266SliceHdr.explicit_scaling_list_used_flag", + "_GstH266SliceHdr.extra_bit", + "_GstH266SliceHdr.header_size", + "_GstH266SliceHdr.joint_cbcr_qp_offset", + "_GstH266SliceHdr.lmcs_used_flag", + "_GstH266SliceHdr.luma_beta_offset_div2", + "_GstH266SliceHdr.luma_tc_offset_div2", + "_GstH266SliceHdr.n_emulation_prevention_bytes", + "_GstH266SliceHdr.no_output_of_prior_pics_flag", + "_GstH266SliceHdr.num_alf_aps_ids_luma", + "_GstH266SliceHdr.num_entry_points", + "_GstH266SliceHdr.num_ref_idx_active", + "_GstH266SliceHdr.num_ref_idx_active_minus1", + "_GstH266SliceHdr.num_ref_idx_active_override_flag", + "_GstH266SliceHdr.num_tiles_in_slice_minus1", + "_GstH266SliceHdr.picture_header", + "_GstH266SliceHdr.picture_header_in_slice_header_flag", + "_GstH266SliceHdr.pred_weight_table", + "_GstH266SliceHdr.qp_delta", + "_GstH266SliceHdr.ref_pic_lists", + "_GstH266SliceHdr.reverse_last_sig_coeff_flag", + "_GstH266SliceHdr.sao_chroma_used_flag", + "_GstH266SliceHdr.sao_luma_used_flag", + "_GstH266SliceHdr.sign_data_hiding_used_flag", + "_GstH266SliceHdr.slice_address", + "_GstH266SliceHdr.slice_header_extension_data_byte", + "_GstH266SliceHdr.slice_header_extension_length", + "_GstH266SliceHdr.slice_qp_y", + "_GstH266SliceHdr.slice_type", + "_GstH266SliceHdr.subpic_id", + "_GstH266SliceHdr.ts_residual_coding_disabled_flag", + "_GstH266SliceHdr.ts_residual_coding_rice_idx_minus1", + "_GstH266SubLayerHRDParameters.bit_rate", + "_GstH266SubLayerHRDParameters.bit_rate_du_value_minus1", + "_GstH266SubLayerHRDParameters.bit_rate_value_minus1", + "_GstH266SubLayerHRDParameters.cbr_flag", + "_GstH266SubLayerHRDParameters.cpb_size", + "_GstH266SubLayerHRDParameters.cpb_size_du_value_minus1", + "_GstH266SubLayerHRDParameters.cpb_size_value_minus1", + "_GstH266SubPicLevelInfo.cbr_constraint_flag", + "_GstH266SubPicLevelInfo.explicit_fraction_present_flag", + "_GstH266SubPicLevelInfo.max_sublayers_minus1", + "_GstH266SubPicLevelInfo.non_subpic_layers_fraction", + "_GstH266SubPicLevelInfo.num_ref_levels_minus1", + "_GstH266SubPicLevelInfo.num_subpics_minus1", + "_GstH266SubPicLevelInfo.ref_level_fraction_minus1", + "_GstH266SubPicLevelInfo.ref_level_idc", + "_GstH266SubPicLevelInfo.sublayer_info_present_flag", + "_GstH266VPS.all_independent_layers_flag", + "_GstH266VPS.default_ptl_dpb_hrd_max_tid_flag", + "_GstH266VPS.direct_ref_layer_flag", + "_GstH266VPS.dpb", + "_GstH266VPS.dpb_max_tid", + "_GstH266VPS.each_layer_is_an_ols_flag", + "_GstH266VPS.extension_data", + "_GstH266VPS.extension_flag", + "_GstH266VPS.general_hrd_params", + "_GstH266VPS.hrd_max_tid", + "_GstH266VPS.independent_layer_flag", + "_GstH266VPS.layer_id", + "_GstH266VPS.layer_id_in_ols", + "_GstH266VPS.max_layers_minus1", + "_GstH266VPS.max_sublayers_minus1", + "_GstH266VPS.max_tid_il_ref_pics_plus1", + "_GstH266VPS.max_tid_ref_present_flag", + "_GstH266VPS.multi_layer_ols_idx", + "_GstH266VPS.num_dpb_params_minus1", + "_GstH266VPS.num_layers_in_ols", + "_GstH266VPS.num_multi_layer_olss", + "_GstH266VPS.num_ols_timing_hrd_params_minus1", + "_GstH266VPS.num_output_layer_sets_minus2", + "_GstH266VPS.num_output_layers_in_ols", + "_GstH266VPS.num_ptls_minus1", + "_GstH266VPS.num_sub_layers_in_layer_in_ols", + "_GstH266VPS.ols_dpb_bitdepth_minus8", + "_GstH266VPS.ols_dpb_chroma_format", + "_GstH266VPS.ols_dpb_params_idx", + "_GstH266VPS.ols_dpb_pic_height", + "_GstH266VPS.ols_dpb_pic_width", + "_GstH266VPS.ols_hrd_params", + "_GstH266VPS.ols_mode_idc", + "_GstH266VPS.ols_output_layer_flag", + "_GstH266VPS.ols_ptl_idx", + "_GstH266VPS.ols_timing_hrd_idx", + "_GstH266VPS.output_layer_id_in_ols", + "_GstH266VPS.profile_tier_level", + "_GstH266VPS.pt_present_flag", + "_GstH266VPS.ptl_max_tid", + "_GstH266VPS.sublayer_cpb_params_present_flag", + "_GstH266VPS.sublayer_dpb_params_present_flag", + "_GstH266VPS.timing_hrd_params_present_flag", + "_GstH266VPS.total_num_olss", + "_GstH266VPS.valid", + "_GstH266VPS.vps_id", + "_GstH266VUIParams.aspect_ratio_constant_flag", + "_GstH266VUIParams.aspect_ratio_idc", + "_GstH266VUIParams.aspect_ratio_info_present_flag", + "_GstH266VUIParams.chroma_loc_info_present_flag", + "_GstH266VUIParams.chroma_sample_loc_type_bottom_field", + "_GstH266VUIParams.chroma_sample_loc_type_frame", + "_GstH266VUIParams.chroma_sample_loc_type_top_field", + "_GstH266VUIParams.colour_description_present_flag", + "_GstH266VUIParams.colour_primaries", + "_GstH266VUIParams.full_range_flag", + "_GstH266VUIParams.interlaced_source_flag", + "_GstH266VUIParams.matrix_coeffs", + "_GstH266VUIParams.non_packed_constraint_flag", + "_GstH266VUIParams.non_projected_constraint_flag", + "_GstH266VUIParams.overscan_appropriate_flag", + "_GstH266VUIParams.overscan_info_present_flag", + "_GstH266VUIParams.par_d", + "_GstH266VUIParams.par_n", + "_GstH266VUIParams.progressive_source_flag", + "_GstH266VUIParams.sar_height", + "_GstH266VUIParams.sar_width", + "_GstH266VUIParams.transfer_characteristics", "_GstJpegFrameComponent.horizontal_factor", "_GstJpegFrameComponent.identifier", "_GstJpegFrameComponent.quant_table_selector", @@ -21906,6 +23153,9 @@ "_GstJpegSegment.marker", "_GstJpegSegment.offset", "_GstJpegSegment.size", + "_GstLcevcMeta.enhancement_data", + "_GstLcevcMeta.id", + "_GstLcevcMeta.meta", "_GstMpeg4GroupOfVOP.broken_link", "_GstMpeg4GroupOfVOP.closed", "_GstMpeg4GroupOfVOP.hours", @@ -22977,6 +24227,17 @@ "asfmux:preroll", "asfmux:streamable", "asfparse", + "asiosink", + "asiosink:buffer-size", + "asiosink:device-clsid", + "asiosink:occupy-all-channels", + "asiosink:output-channels", + "asiosrc", + "asiosrc:buffer-size", + "asiosrc:device-clsid", + "asiosrc:input-channels", + "asiosrc:loopback", + "asiosrc:occupy-all-channels", "aspectratiocrop", "aspectratiocrop:aspect-ratio", "assert_equals_float", @@ -22988,6 +24249,7 @@ "assert_equals_string", "assert_equals_uint64", "assert_equals_uint64_hex", + "assert_matches_string", "assert_message_error", "assrender", "assrender:embeddedfonts", @@ -22995,6 +24257,10 @@ "assrender:wait-text", "asteriskh263", "atdec", + "atenc", + "atenc:bitrate", + "atenc:rate-control", + "atenc:vbr-quality", "atscmux", "audioamplify", "audioamplify:amplification", @@ -23028,6 +24294,8 @@ "audioconvert", "audioconvert:dithering", "audioconvert:dithering-threshold", + "audioconvert:input-channels-reorder", + "audioconvert:input-channels-reorder-mode", "audioconvert:mix-matrix", "audioconvert:noise-shaping", "audiodynamic", @@ -23169,6 +24437,7 @@ "av1enc:threads", "av1enc:tile-columns", "av1enc:tile-rows", + "av1enc:timebase", "av1enc:undershoot-pct", "av1enc:usage-profile", "av1parse", @@ -34346,6 +35615,10 @@ "avfvideosrc:fps", "avfvideosrc:orientation", "avfvideosrc:position", + "avfvideosrc:screen-crop-height", + "avfvideosrc:screen-crop-width", + "avfvideosrc:screen-crop-x", + "avfvideosrc:screen-crop-y", "avidemux", "avimux", "avimux:bigfile", @@ -35023,9 +36296,13 @@ "cc708overlay:silent", "cc708overlay:window-h-pos", "cccombiner", + "cccombiner:cea608-padding-strategy", + "cccombiner:cea608-padding-valid-timeout", + "cccombiner:input-meta-processing", "cccombiner:max-scheduled", "cccombiner:output-padding", "cccombiner:schedule", + "cccombiner:schedule-timeout", "ccconverter", "ccconverter:cdp-mode", "ccextractor", @@ -35041,6 +36318,7 @@ "cdparanoiasrc:read-speed", "cdparanoiasrc:search-overlap", "cea608mux", + "cea608mux:force-live", "cfhd-q", "cfhd-q::film1", "cfhd-q::film1+", @@ -35397,16 +36675,31 @@ "d3d12av1dec:adapter-luid", "d3d12av1dec:device-id", "d3d12av1dec:vendor-id", + "d3d12colorconvert", + "d3d12colorconvert:brightness", + "d3d12colorconvert:contrast", + "d3d12colorconvert:gamma-mode", + "d3d12colorconvert:hue", + "d3d12colorconvert:primaries-mode", + "d3d12colorconvert:saturation", "d3d12compositor", "d3d12compositor:adapter", + "d3d12compositor:async-depth", "d3d12compositor:background", "d3d12compositor:ignore-inactive-pads", "d3d12convert", "d3d12convert:add-borders", "d3d12convert:border-color", + "d3d12convert:brightness", + "d3d12convert:contrast", "d3d12convert:gamma-mode", + "d3d12convert:hue", "d3d12convert:method", "d3d12convert:primaries-mode", + "d3d12convert:saturation", + "d3d12deinterlace", + "d3d12deinterlace:engine", + "d3d12deinterlace:fields", "d3d12download", "d3d12h264dec", "d3d12h264dec:adapter-luid", @@ -35436,34 +36729,78 @@ "d3d12h265dec:adapter-luid", "d3d12h265dec:device-id", "d3d12h265dec:vendor-id", + "d3d12ipcsink", + "d3d12ipcsink:adapter", + "d3d12ipcsink:pipe-name", + "d3d12ipcsrc", + "d3d12ipcsrc:connection-timeout", + "d3d12ipcsrc:io-mode", + "d3d12ipcsrc:pipe-name", + "d3d12ipcsrc:processing-deadline", + "d3d12mipmapping", + "d3d12mipmapping:async-depth", + "d3d12mipmapping:mip-levels", "d3d12mpeg2dec", "d3d12mpeg2dec:adapter-luid", "d3d12mpeg2dec:device-id", "d3d12mpeg2dec:vendor-id", + "d3d12scale", + "d3d12scale:add-borders", + "d3d12scale:border-color", "d3d12screencapturesrc", + "d3d12screencapturesrc:adapter", + "d3d12screencapturesrc:capture-api", "d3d12screencapturesrc:crop-height", "d3d12screencapturesrc:crop-width", "d3d12screencapturesrc:crop-x", "d3d12screencapturesrc:crop-y", "d3d12screencapturesrc:monitor-handle", "d3d12screencapturesrc:monitor-index", + "d3d12screencapturesrc:show-border", "d3d12screencapturesrc:show-cursor", + "d3d12screencapturesrc:tonemap", + "d3d12screencapturesrc:window-capture-mode", + "d3d12screencapturesrc:window-handle", + "d3d12swapchainsink", + "d3d12swapchainsink::resize", + "d3d12swapchainsink:adapter", + "d3d12swapchainsink:border-color", + "d3d12swapchainsink:brightness", + "d3d12swapchainsink:contrast", + "d3d12swapchainsink:force-aspect-ratio", + "d3d12swapchainsink:hue", + "d3d12swapchainsink:msaa", + "d3d12swapchainsink:sampling-method", + "d3d12swapchainsink:saturation", + "d3d12swapchainsink:swapchain", + "d3d12swapchainsink:swapchain-height", + "d3d12swapchainsink:swapchain-width", "d3d12testsrc", "d3d12testsrc:adapter", "d3d12testsrc:alpha", + "d3d12testsrc:async-depth", "d3d12testsrc:is-live", "d3d12testsrc:pattern", "d3d12upload", "d3d12videosink", + "d3d12videosink::overlay", "d3d12videosink:adapter", + "d3d12videosink:brightness", + "d3d12videosink:contrast", + "d3d12videosink:direct-swapchain", + "d3d12videosink:display-format", "d3d12videosink:enable-navigation-events", + "d3d12videosink:error-on-closed", + "d3d12videosink:external-window-only", "d3d12videosink:force-aspect-ratio", "d3d12videosink:fov", "d3d12videosink:fullscreen", "d3d12videosink:fullscreen-on-alt-enter", "d3d12videosink:gamma-mode", + "d3d12videosink:hue", "d3d12videosink:msaa", "d3d12videosink:ortho", + "d3d12videosink:overlay-mode", "d3d12videosink:primaries-mode", "d3d12videosink:redraw-on-update", "d3d12videosink:rotate-method", @@ -35471,6 +36808,7 @@ "d3d12videosink:rotation-y", "d3d12videosink:rotation-z", "d3d12videosink:sampling-method", + "d3d12videosink:saturation", "d3d12videosink:scale-x", "d3d12videosink:scale-y", "d3d12vp8dec", @@ -37732,6 +39070,7 @@ "fail_unless_equals_string", "fail_unless_equals_uint64", "fail_unless_equals_uint64_hex", + "fail_unless_matches_string", "fail_unless_message_error", "fakeaudiosink", "fakeaudiosink::handoff", @@ -39788,6 +41127,7 @@ "gst_aggregator_pad_peek_buffer", "gst_aggregator_pad_pop_buffer", "gst_aggregator_peek_next_sample", + "gst_aggregator_push_src_event", "gst_aggregator_selected_samples", "gst_aggregator_set_force_live", "gst_aggregator_set_ignore_inactive_pads", @@ -39817,11 +41157,14 @@ "gst_analytics_od_mtd_get_location", "gst_analytics_od_mtd_get_mtd_type", "gst_analytics_od_mtd_get_obj_type", + "gst_analytics_od_mtd_get_oriented_location", "gst_analytics_relation_get_length", "gst_analytics_relation_meta_add_cls_mtd", "gst_analytics_relation_meta_add_mtd", "gst_analytics_relation_meta_add_od_mtd", "gst_analytics_relation_meta_add_one_cls_mtd", + "gst_analytics_relation_meta_add_oriented_od_mtd", + "gst_analytics_relation_meta_add_segmentation_mtd", "gst_analytics_relation_meta_add_tracking_mtd", "gst_analytics_relation_meta_api_get_type", "gst_analytics_relation_meta_exist", @@ -39835,6 +41178,11 @@ "gst_analytics_relation_meta_get_tracking_mtd", "gst_analytics_relation_meta_iterate", "gst_analytics_relation_meta_set_relation", + "gst_analytics_segmentation_mtd_get_mask", + "gst_analytics_segmentation_mtd_get_mtd_type", + "gst_analytics_segmentation_mtd_get_region_count", + "gst_analytics_segmentation_mtd_get_region_id", + "gst_analytics_segmentation_mtd_get_region_index", "gst_analytics_tracking_mtd_get_info", "gst_analytics_tracking_mtd_get_mtd_type", "gst_analytics_tracking_mtd_set_lost", @@ -40054,6 +41402,7 @@ "gst_audio_quantize_reset", "gst_audio_quantize_samples", "gst_audio_reorder_channels", + "gst_audio_reorder_channels_with_reorder_map", "gst_audio_resampler_free", "gst_audio_resampler_get_in_frames", "gst_audio_resampler_get_max_latency", @@ -40075,6 +41424,8 @@ "gst_audio_ring_buffer_debug_spec_caps", "gst_audio_ring_buffer_delay", "gst_audio_ring_buffer_device_is_open", + "gst_audio_ring_buffer_get_segbase", + "gst_audio_ring_buffer_get_segdone", "gst_audio_ring_buffer_is_acquired", "gst_audio_ring_buffer_is_active", "gst_audio_ring_buffer_is_flushing", @@ -40092,6 +41443,7 @@ "gst_audio_ring_buffer_set_errored", "gst_audio_ring_buffer_set_flushing", "gst_audio_ring_buffer_set_sample", + "gst_audio_ring_buffer_set_segdone", "gst_audio_ring_buffer_set_timestamp", "gst_audio_ring_buffer_start", "gst_audio_ring_buffer_stop", @@ -40300,6 +41652,7 @@ "gst_buffer_add_dsd_plane_offset_meta", "gst_buffer_add_gl_sync_meta", "gst_buffer_add_gl_sync_meta_full", + "gst_buffer_add_lcevc_meta", "gst_buffer_add_meta", "gst_buffer_add_mpeg_video_meta", "gst_buffer_add_mpegts_pes_metadata_meta", @@ -40309,6 +41662,7 @@ "gst_buffer_add_protection_meta", "gst_buffer_add_reference_timestamp_meta", "gst_buffer_add_rtp_source_meta", + "gst_buffer_add_tensor_meta", "gst_buffer_add_video_afd_meta", "gst_buffer_add_video_affine_transformation_meta", "gst_buffer_add_video_bar_meta", @@ -40348,6 +41702,8 @@ "gst_buffer_get_dsd_plane_offset_meta", "gst_buffer_get_flags", "gst_buffer_get_gl_sync_meta", + "gst_buffer_get_lcevc_meta", + "gst_buffer_get_lcevc_meta_id", "gst_buffer_get_max_memory", "gst_buffer_get_memory", "gst_buffer_get_memory_range", @@ -40362,6 +41718,7 @@ "gst_buffer_get_size", "gst_buffer_get_sizes", "gst_buffer_get_sizes_range", + "gst_buffer_get_tensor_meta", "gst_buffer_get_video_afd_meta", "gst_buffer_get_video_affine_transformation_meta", "gst_buffer_get_video_bar_meta", @@ -40422,6 +41779,7 @@ "gst_buffer_pool_config_get_allocator", "gst_buffer_pool_config_get_cuda_alloc_method", "gst_buffer_pool_config_get_cuda_stream", + "gst_buffer_pool_config_get_cuda_stream_ordered_alloc", "gst_buffer_pool_config_get_gl_allocation_params", "gst_buffer_pool_config_get_gl_min_free_queue_size", "gst_buffer_pool_config_get_option", @@ -40432,6 +41790,7 @@ "gst_buffer_pool_config_set_allocator", "gst_buffer_pool_config_set_cuda_alloc_method", "gst_buffer_pool_config_set_cuda_stream", + "gst_buffer_pool_config_set_cuda_stream_ordered_alloc", "gst_buffer_pool_config_set_gl_allocation_params", "gst_buffer_pool_config_set_gl_min_free_queue_size", "gst_buffer_pool_config_set_params", @@ -40620,13 +41979,17 @@ "gst_caps_copy_nth", "gst_caps_features_add", "gst_caps_features_add_id", + "gst_caps_features_add_id_str", + "gst_caps_features_add_static_str", "gst_caps_features_contains", "gst_caps_features_contains_id", + "gst_caps_features_contains_id_str", "gst_caps_features_copy", "gst_caps_features_free", "gst_caps_features_from_string", "gst_caps_features_get_nth", "gst_caps_features_get_nth_id", + "gst_caps_features_get_nth_id_str", "gst_caps_features_get_size", "gst_caps_features_is_any", "gst_caps_features_is_equal", @@ -40634,11 +41997,17 @@ "gst_caps_features_new_any", "gst_caps_features_new_empty", "gst_caps_features_new_id", + "gst_caps_features_new_id_str", + "gst_caps_features_new_id_str_valist", "gst_caps_features_new_id_valist", "gst_caps_features_new_single", + "gst_caps_features_new_single_static_str", + "gst_caps_features_new_static_str", + "gst_caps_features_new_static_str_valist", "gst_caps_features_new_valist", "gst_caps_features_remove", "gst_caps_features_remove_id", + "gst_caps_features_remove_id_str", "gst_caps_features_set_parent_refcount", "gst_caps_features_to_string", "gst_caps_filter_and_map_in_place", @@ -40648,6 +42017,9 @@ "gst_caps_get_features", "gst_caps_get_size", "gst_caps_get_structure", + "gst_caps_id_str_set_simple", + "gst_caps_id_str_set_simple_valist", + "gst_caps_id_str_set_value", "gst_caps_intersect", "gst_caps_intersect_full", "gst_caps_is_always_compatible", @@ -40671,7 +42043,11 @@ "gst_caps_new_empty_simple", "gst_caps_new_full", "gst_caps_new_full_valist", + "gst_caps_new_id_str_empty_simple", + "gst_caps_new_id_str_simple", "gst_caps_new_simple", + "gst_caps_new_static_str_empty_simple", + "gst_caps_new_static_str_simple", "gst_caps_normalize", "gst_caps_ref", "gst_caps_remove_structure", @@ -40680,8 +42056,11 @@ "gst_caps_set_features", "gst_caps_set_features_simple", "gst_caps_set_simple", + "gst_caps_set_simple_static_str", + "gst_caps_set_simple_static_str_valist", "gst_caps_set_simple_valist", "gst_caps_set_value", + "gst_caps_set_value_static_str", "gst_caps_simplify", "gst_caps_steal_structure", "gst_caps_subtract", @@ -40736,6 +42115,7 @@ "gst_clear_buffer_list", "gst_clear_caps", "gst_clear_context", + "gst_clear_cuda_memory_pool", "gst_clear_cuda_stream", "gst_clear_event", "gst_clear_message", @@ -40789,6 +42169,10 @@ "gst_codec_utils_aac_get_profile", "gst_codec_utils_aac_get_sample_rate", "gst_codec_utils_aac_get_sample_rate_from_index", + "gst_codec_utils_av1_create_av1c_from_caps", + "gst_codec_utils_av1_create_caps_from_av1c", + "gst_codec_utils_av1_get_level", + "gst_codec_utils_av1_get_seq_level_idx", "gst_codec_utils_caps_from_mime_codec", "gst_codec_utils_caps_get_mime_codec", "gst_codec_utils_h264_caps_set_level_and_profile", @@ -40909,6 +42293,10 @@ "gst_cuda_memory_get_token_data", "gst_cuda_memory_get_user_data", "gst_cuda_memory_init_once", + "gst_cuda_memory_pool_get_handle", + "gst_cuda_memory_pool_new", + "gst_cuda_memory_pool_ref", + "gst_cuda_memory_pool_unref", "gst_cuda_memory_set_token_data", "gst_cuda_memory_sync", "gst_cuda_nvrtc_compile", @@ -40917,7 +42305,9 @@ "gst_cuda_pool_allocator_acquire_memory", "gst_cuda_pool_allocator_new", "gst_cuda_pool_allocator_new_for_virtual_memory", + "gst_cuda_pool_allocator_new_full", "gst_cuda_quark_from_id", + "gst_cuda_register_allocator_need_pool_callback", "gst_cuda_result", "gst_cuda_stream_get_handle", "gst_cuda_stream_new", @@ -40998,6 +42388,8 @@ "gst_debug_log_valist", "gst_debug_message_get", "gst_debug_message_get_id", + "gst_debug_print_object", + "gst_debug_print_segment", "gst_debug_print_stack_trace", "gst_debug_remove_log_function", "gst_debug_remove_log_function_by_data", @@ -41150,6 +42542,7 @@ "gst_dynamic_type_factory_load", "gst_dynamic_type_register", "gst_egl_get_error_string", + "gst_egl_image_can_emulate", "gst_egl_image_export_dmabuf", "gst_egl_image_from_dmabuf", "gst_egl_image_from_dmabuf_direct", @@ -41290,6 +42683,7 @@ "gst_encoding_profile_copy", "gst_encoding_profile_find", "gst_encoding_profile_from_discoverer", + "gst_encoding_profile_from_string", "gst_encoding_profile_get_allow_dynamic_output", "gst_encoding_profile_get_description", "gst_encoding_profile_get_element_properties", @@ -41317,6 +42711,7 @@ "gst_encoding_profile_set_preset_name", "gst_encoding_profile_set_restriction", "gst_encoding_profile_set_single_segment", + "gst_encoding_profile_to_string", "gst_encoding_profile_unref", "gst_encoding_target_add_profile", "gst_encoding_target_get_category", @@ -41560,6 +42955,8 @@ "gst_gl_display_wayland_new_with_display", "gst_gl_display_x11_new", "gst_gl_display_x11_new_with_display", + "gst_gl_dma_buf_transform_drm_formats_to_gst_formats", + "gst_gl_dma_buf_transform_gst_formats_to_drm_formats", "gst_gl_element_propagate_display_context", "gst_gl_ensure_element_data", "gst_gl_filter_add_rgba_pad_templates", @@ -41775,6 +43172,7 @@ "gst_h263_parse", "gst_h264_bit_writer_aud", "gst_h264_bit_writer_convert_to_nal", + "gst_h264_bit_writer_filler", "gst_h264_bit_writer_pps", "gst_h264_bit_writer_sei", "gst_h264_bit_writer_slice_hdr", @@ -41926,6 +43324,28 @@ "gst_h265_slice_hdr_copy", "gst_h265_slice_hdr_free", "gst_h265_slice_type_to_string", + "gst_h266_parse_aps", + "gst_h266_parse_pps", + "gst_h266_parse_sps", + "gst_h266_parse_vps", + "gst_h266_parser_free", + "gst_h266_parser_identify_nalu", + "gst_h266_parser_identify_nalu_unchecked", + "gst_h266_parser_identify_nalu_vvc", + "gst_h266_parser_new", + "gst_h266_parser_parse_aps", + "gst_h266_parser_parse_aud", + "gst_h266_parser_parse_dci", + "gst_h266_parser_parse_nal", + "gst_h266_parser_parse_opi", + "gst_h266_parser_parse_picture_hdr", + "gst_h266_parser_parse_pps", + "gst_h266_parser_parse_sei", + "gst_h266_parser_parse_slice_hdr", + "gst_h266_parser_parse_sps", + "gst_h266_parser_parse_vps", + "gst_h266_profile_from_string", + "gst_h266_profile_to_string", "gst_harness_add_element_full", "gst_harness_add_element_sink_pad", "gst_harness_add_element_src_pad", @@ -42019,6 +43439,22 @@ "gst_harness_use_systemclock", "gst_harness_use_testclock", "gst_harness_wait_for_clock_id_waits", + "gst_id_str_as_str", + "gst_id_str_clear", + "gst_id_str_copy", + "gst_id_str_copy_into", + "gst_id_str_free", + "gst_id_str_get_len", + "gst_id_str_init", + "gst_id_str_is_equal", + "gst_id_str_is_equal_to_str", + "gst_id_str_is_equal_to_str_with_len", + "gst_id_str_move", + "gst_id_str_new", + "gst_id_str_set", + "gst_id_str_set_static_str", + "gst_id_str_set_static_str_with_len", + "gst_id_str_set_with_len", "gst_info_strdup_printf", "gst_info_strdup_vprintf", "gst_info_vasprintf", @@ -42081,6 +43517,12 @@ "gst_jpeg2000_sampling_is_rgb", "gst_jpeg2000_sampling_is_yuv", "gst_jpeg2000_sampling_to_string", + "gst_jpeg_bit_writer_frame_header", + "gst_jpeg_bit_writer_huffman_table", + "gst_jpeg_bit_writer_quantization_table", + "gst_jpeg_bit_writer_restart_interval", + "gst_jpeg_bit_writer_scan_header", + "gst_jpeg_bit_writer_segment_with_data", "gst_jpeg_get_default_huffman_tables", "gst_jpeg_get_default_quantization_tables", "gst_jpeg_parse", @@ -42089,6 +43531,8 @@ "gst_jpeg_segment_parse_quantization_table", "gst_jpeg_segment_parse_restart_interval", "gst_jpeg_segment_parse_scan_header", + "gst_lcevc_meta_api_get_type", + "gst_lcevc_meta_get_info", "gst_lfo_control_source_new", "gst_make_element_message_details", "gst_media_source_add_source_buffer", @@ -42127,6 +43571,7 @@ "gst_memory_unref", "gst_message_add_redirect_entry", "gst_message_copy", + "gst_message_get_details", "gst_message_get_num_redirect_entries", "gst_message_get_seqnum", "gst_message_get_stream_status_object", @@ -42191,10 +43636,12 @@ "gst_message_parse_duration", "gst_message_parse_error", "gst_message_parse_error_details", + "gst_message_parse_error_writable_details", "gst_message_parse_group_id", "gst_message_parse_have_context", "gst_message_parse_info", "gst_message_parse_info_details", + "gst_message_parse_info_writable_details", "gst_message_parse_instant_rate_request", "gst_message_parse_mpegts_section", "gst_message_parse_new_clock", @@ -42219,9 +43666,11 @@ "gst_message_parse_toc", "gst_message_parse_warning", "gst_message_parse_warning_details", + "gst_message_parse_warning_writable_details", "gst_message_ref", "gst_message_replace", "gst_message_set_buffering_stats", + "gst_message_set_details", "gst_message_set_group_id", "gst_message_set_qos_stats", "gst_message_set_qos_values", @@ -42234,10 +43683,13 @@ "gst_message_type_get_name", "gst_message_type_to_quark", "gst_message_unref", + "gst_message_writable_details", "gst_message_writable_structure", + "gst_meta_api_type_aggregate_params", "gst_meta_api_type_get_tags", "gst_meta_api_type_has_tag", "gst_meta_api_type_register", + "gst_meta_api_type_set_params_aggregator", "gst_meta_compare_seqnum", "gst_meta_deserialize", "gst_meta_get_info", @@ -42320,6 +43772,8 @@ "gst_missing_encoder_message_new", "gst_missing_plugin_message_get_description", "gst_missing_plugin_message_get_installer_detail", + "gst_missing_plugin_message_get_stream_id", + "gst_missing_plugin_message_set_stream_id", "gst_missing_uri_sink_installer_detail_new", "gst_missing_uri_sink_message_new", "gst_missing_uri_source_installer_detail_new", @@ -42365,6 +43819,7 @@ "gst_mpegts_atsc_string_segment_set_string", "gst_mpegts_atsc_stt_get_datetime_utc", "gst_mpegts_atsc_stt_new", + "gst_mpegts_descriptor_copy", "gst_mpegts_descriptor_free", "gst_mpegts_descriptor_from_custom", "gst_mpegts_descriptor_from_custom_with_extension", @@ -42372,6 +43827,9 @@ "gst_mpegts_descriptor_from_dvb_service", "gst_mpegts_descriptor_from_dvb_subtitling", "gst_mpegts_descriptor_from_iso_639_language", + "gst_mpegts_descriptor_from_jpeg_xs", + "gst_mpegts_descriptor_from_metadata", + "gst_mpegts_descriptor_from_metadata_pointer", "gst_mpegts_descriptor_from_registration", "gst_mpegts_descriptor_parse_audio_preselection_dump", "gst_mpegts_descriptor_parse_audio_preselection_free", @@ -42408,6 +43866,7 @@ "gst_mpegts_descriptor_parse_iso_639_language", "gst_mpegts_descriptor_parse_iso_639_language_idx", "gst_mpegts_descriptor_parse_iso_639_language_nb", + "gst_mpegts_descriptor_parse_jpeg_xs", "gst_mpegts_descriptor_parse_logical_channel", "gst_mpegts_descriptor_parse_metadata", "gst_mpegts_descriptor_parse_metadata_std", @@ -42491,6 +43950,7 @@ "gst_navigation_event_new_key_release", "gst_navigation_event_new_mouse_button_press", "gst_navigation_event_new_mouse_button_release", + "gst_navigation_event_new_mouse_double_click", "gst_navigation_event_new_mouse_move", "gst_navigation_event_new_mouse_scroll", "gst_navigation_event_new_touch_cancel", @@ -42811,14 +44271,18 @@ "gst_play_media_info_is_live", "gst_play_media_info_is_seekable", "gst_play_message_get_name", + "gst_play_message_parse_buffering", "gst_play_message_parse_buffering_percent", + "gst_play_message_parse_duration_changed", "gst_play_message_parse_duration_updated", "gst_play_message_parse_error", "gst_play_message_parse_media_info_updated", "gst_play_message_parse_muted_changed", "gst_play_message_parse_position_updated", + "gst_play_message_parse_seek_done", "gst_play_message_parse_state_changed", "gst_play_message_parse_type", + "gst_play_message_parse_uri_loaded", "gst_play_message_parse_video_dimensions_changed", "gst_play_message_parse_volume_changed", "gst_play_message_parse_warning", @@ -42828,6 +44292,7 @@ "gst_play_seek", "gst_play_set_audio_track", "gst_play_set_audio_track_enabled", + "gst_play_set_audio_track_id", "gst_play_set_audio_video_offset", "gst_play_set_color_balance", "gst_play_set_config", @@ -42837,11 +44302,14 @@ "gst_play_set_rate", "gst_play_set_subtitle_track", "gst_play_set_subtitle_track_enabled", + "gst_play_set_subtitle_track_id", "gst_play_set_subtitle_uri", "gst_play_set_subtitle_video_offset", + "gst_play_set_track_ids", "gst_play_set_uri", "gst_play_set_video_track", "gst_play_set_video_track_enabled", + "gst_play_set_video_track_id", "gst_play_set_visualization", "gst_play_set_visualization_enabled", "gst_play_set_volume", @@ -42854,6 +44322,7 @@ "gst_play_stream_info_get_caps", "gst_play_stream_info_get_codec", "gst_play_stream_info_get_index", + "gst_play_stream_info_get_stream_id", "gst_play_stream_info_get_stream_type", "gst_play_stream_info_get_tags", "gst_play_subtitle_info_get_language", @@ -44222,6 +45691,7 @@ "gst_structure_can_intersect", "gst_structure_copy", "gst_structure_filter_and_map_in_place", + "gst_structure_filter_and_map_in_place_id_str", "gst_structure_fixate", "gst_structure_fixate_field", "gst_structure_fixate_field_boolean", @@ -44230,6 +45700,7 @@ "gst_structure_fixate_field_nearest_int", "gst_structure_fixate_field_string", "gst_structure_foreach", + "gst_structure_foreach_id_str", "gst_structure_free", "gst_structure_from_string", "gst_structure_get", @@ -44249,6 +45720,7 @@ "gst_structure_get_list", "gst_structure_get_name", "gst_structure_get_name_id", + "gst_structure_get_name_id_str", "gst_structure_get_string", "gst_structure_get_uint", "gst_structure_get_uint64", @@ -44265,17 +45737,38 @@ "gst_structure_id_set", "gst_structure_id_set_valist", "gst_structure_id_set_value", + "gst_structure_id_str_get", + "gst_structure_id_str_get_field_type", + "gst_structure_id_str_get_valist", + "gst_structure_id_str_get_value", + "gst_structure_id_str_has_field", + "gst_structure_id_str_has_field_typed", + "gst_structure_id_str_nth_field_name", + "gst_structure_id_str_remove_field", + "gst_structure_id_str_remove_fields", + "gst_structure_id_str_remove_fields_valist", + "gst_structure_id_str_set", + "gst_structure_id_str_set_valist", + "gst_structure_id_str_set_value", + "gst_structure_id_str_take_value", "gst_structure_id_take_value", "gst_structure_intersect", "gst_structure_is_equal", "gst_structure_is_subset", "gst_structure_map_in_place", + "gst_structure_map_in_place_id_str", "gst_structure_n_fields", "gst_structure_new", "gst_structure_new_empty", "gst_structure_new_from_string", "gst_structure_new_id", "gst_structure_new_id_empty", + "gst_structure_new_id_str", + "gst_structure_new_id_str_empty", + "gst_structure_new_id_str_valist", + "gst_structure_new_static_str", + "gst_structure_new_static_str_empty", + "gst_structure_new_static_str_valist", "gst_structure_new_valist", "gst_structure_nth_field_name", "gst_structure_remove_all_fields", @@ -44288,11 +45781,17 @@ "gst_structure_set_array", "gst_structure_set_list", "gst_structure_set_name", + "gst_structure_set_name_id_str", + "gst_structure_set_name_static_str", "gst_structure_set_parent_refcount", + "gst_structure_set_static_str", + "gst_structure_set_static_str_valist", "gst_structure_set_valist", "gst_structure_set_value", + "gst_structure_set_value_static_str", "gst_structure_take", "gst_structure_take_value", + "gst_structure_take_value_static_str", "gst_structure_to_string", "gst_system_clock_obtain", "gst_system_clock_set_default", @@ -44438,6 +45937,16 @@ "gst_task_set_state", "gst_task_start", "gst_task_stop", + "gst_tensor_alloc", + "gst_tensor_copy", + "gst_tensor_free", + "gst_tensor_get_dims", + "gst_tensor_meta_api_get_type", + "gst_tensor_meta_get", + "gst_tensor_meta_get_index_from_id", + "gst_tensor_meta_get_info", + "gst_tensor_meta_set", + "gst_tensor_new_simple", "gst_test_clock_advance_time", "gst_test_clock_crank", "gst_test_clock_get_next_entry_time", @@ -44500,6 +46009,8 @@ "gst_toc_setter_reset", "gst_toc_setter_set_toc", "gst_toc_unref", + "gst_tracer_class_set_use_structure_params", + "gst_tracer_class_uses_structure_params", "gst_tracer_factory_get_list", "gst_tracer_factory_get_tracer_type", "gst_tracer_record_log", @@ -44630,6 +46141,7 @@ "gst_util_dump_buffer", "gst_util_dump_mem", "gst_util_filename_compare", + "gst_util_floor_log2", "gst_util_fraction_add", "gst_util_fraction_compare", "gst_util_fraction_multiply", @@ -44960,6 +46472,31 @@ "gst_vc1_parse_sequence_header_struct_c", "gst_vc1_parse_sequence_layer", "gst_vc1_parse_slice_header", + "gst_vec_deque_clear", + "gst_vec_deque_drop_element", + "gst_vec_deque_drop_struct", + "gst_vec_deque_find", + "gst_vec_deque_free", + "gst_vec_deque_get_length", + "gst_vec_deque_is_empty", + "gst_vec_deque_new", + "gst_vec_deque_new_for_struct", + "gst_vec_deque_peek_head", + "gst_vec_deque_peek_head_struct", + "gst_vec_deque_peek_nth", + "gst_vec_deque_peek_nth_struct", + "gst_vec_deque_peek_tail", + "gst_vec_deque_peek_tail_struct", + "gst_vec_deque_pop_head", + "gst_vec_deque_pop_head_struct", + "gst_vec_deque_pop_tail", + "gst_vec_deque_pop_tail_struct", + "gst_vec_deque_push_sorted", + "gst_vec_deque_push_sorted_struct", + "gst_vec_deque_push_tail", + "gst_vec_deque_push_tail_struct", + "gst_vec_deque_set_clear_func", + "gst_vec_deque_sort", "gst_version", "gst_version_string", "gst_video_afd_meta_api_get_type", @@ -45083,12 +46620,15 @@ "gst_video_dither_free", "gst_video_dither_line", "gst_video_dither_new", + "gst_video_dma_drm_format_from_gst_format", + "gst_video_dma_drm_format_to_gst_format", "gst_video_dma_drm_fourcc_from_format", "gst_video_dma_drm_fourcc_from_string", "gst_video_dma_drm_fourcc_to_format", "gst_video_dma_drm_fourcc_to_string", "gst_video_encoder_allocate_output_buffer", "gst_video_encoder_allocate_output_frame", + "gst_video_encoder_drop_frame", "gst_video_encoder_finish_frame", "gst_video_encoder_finish_subframe", "gst_video_encoder_get_allocator", @@ -45103,6 +46643,7 @@ "gst_video_encoder_merge_tags", "gst_video_encoder_negotiate", "gst_video_encoder_proxy_getcaps", + "gst_video_encoder_release_frame", "gst_video_encoder_set_headers", "gst_video_encoder_set_latency", "gst_video_encoder_set_min_force_key_unit_interval", @@ -45308,6 +46849,8 @@ "gst_vp8_token_probs_init_defaults", "gst_vp8_token_update_probs_init", "gst_vp9_ac_quant", + "gst_vp9_bit_writer_frame_header", + "gst_vp9_bit_writer_superframe_info", "gst_vp9_dc_quant", "gst_vp9_decoder_set_non_keyframe_format_change_support", "gst_vp9_dpb_add", @@ -45388,6 +46931,7 @@ "gst_vulkan_display_wayland_new_with_display", "gst_vulkan_display_xcb_new", "gst_vulkan_ensure_element_data", + "gst_vulkan_ensure_element_device", "gst_vulkan_error_quark", "gst_vulkan_error_to_g_error", "gst_vulkan_fence_cache_acquire", @@ -45400,12 +46944,14 @@ "gst_vulkan_format_from_video_info_2", "gst_vulkan_format_get_aspect", "gst_vulkan_format_get_info", + "gst_vulkan_format_get_map", "gst_vulkan_format_to_video_format", "gst_vulkan_full_screen_quad_draw", "gst_vulkan_full_screen_quad_enable_blend", "gst_vulkan_full_screen_quad_enable_clear", "gst_vulkan_full_screen_quad_fill_command_buffer", "gst_vulkan_full_screen_quad_get_last_fence", + "gst_vulkan_full_screen_quad_get_queue", "gst_vulkan_full_screen_quad_new", "gst_vulkan_full_screen_quad_prepare_draw", "gst_vulkan_full_screen_quad_set_blend_factors", @@ -45436,8 +46982,10 @@ "gst_vulkan_handle_ref", "gst_vulkan_handle_set_context", "gst_vulkan_handle_unref", + "gst_vulkan_image_buffer_pool_config_get_allocation_params", "gst_vulkan_image_buffer_pool_config_set_allocation_params", "gst_vulkan_image_buffer_pool_config_set_decode_caps", + "gst_vulkan_image_buffer_pool_config_set_encode_caps", "gst_vulkan_image_buffer_pool_new", "gst_vulkan_image_memory_add_view", "gst_vulkan_image_memory_alloc", @@ -45453,6 +47001,7 @@ "gst_vulkan_image_view_unref", "gst_vulkan_instance_check_version", "gst_vulkan_instance_create_device", + "gst_vulkan_instance_create_device_with_index", "gst_vulkan_instance_disable_extension", "gst_vulkan_instance_enable_extension", "gst_vulkan_instance_enable_layer", @@ -45526,6 +47075,9 @@ "gst_vulkan_trash_object_unref", "gst_vulkan_trash_ref", "gst_vulkan_trash_unref", + "gst_vulkan_video_filter_get_device", + "gst_vulkan_video_filter_get_instance", + "gst_vulkan_video_filter_get_queue", "gst_vulkan_video_profile_from_caps", "gst_vulkan_video_profile_is_equal", "gst_vulkan_video_profile_is_valid", @@ -45707,6 +47259,8 @@ "h265parse", "h265parse:config-interval", "h265timestamper", + "h266parse", + "h266parse:config-interval", "handdetect", "handdetect:ROI-HEIGHT", "handdetect:ROI-WIDTH", @@ -45850,6 +47404,12 @@ "iqa:mode", "irtspparse", "irtspparse:channel-id", + "isacdec", + "isacenc", + "isacenc:bitrate", + "isacenc:max-payload-size", + "isacenc:max-rate", + "isacenc:output-frame-len", "ismlmux", "ismlmux:streamable", "ivfparse", @@ -46052,6 +47612,8 @@ "lcms:intent", "lcms:lookup", "lcms:preserve-black", + "ldacenc", + "ldacenc:eqmid", "level", "level:audio-level-meta", "level:interval", @@ -66543,6 +68105,7 @@ "nleoperation::input-priority-changed", "nleoperation:sinks", "nlesource", + "nlesource:reverse", "nleurisource", "nleurisource:uri", "nvautogpuav1enc", @@ -66996,6 +68559,9 @@ "openalsrc", "openalsrc:device", "openalsrc:device-name", + "openaptxdec", + "openaptxdec:autosync", + "openaptxenc", "opencvtextoverlay", "opencvtextoverlay:colorB", "opencvtextoverlay:colorG", @@ -67093,9 +68659,11 @@ "osssrc:device-name", "osxaudiosink", "osxaudiosink:device", + "osxaudiosink:unique-id", "osxaudiosink:volume", "osxaudiosrc", "osxaudiosrc:device", + "osxaudiosrc:unique-id", "osxvideosink", "osxvideosink:embed", "osxvideosink:force-aspect-ratio", @@ -67265,6 +68833,7 @@ "plugin-applemedia", "plugin-asf", "plugin-asfmux", + "plugin-asio", "plugin-assrender", "plugin-audiobuffersplit", "plugin-audioconvert", @@ -67372,6 +68941,7 @@ "plugin-interleave", "plugin-ipcpipeline", "plugin-iqa", + "plugin-isac", "plugin-isomp4", "plugin-ivfparse", "plugin-ivtc", @@ -67384,6 +68954,7 @@ "plugin-ladspa", "plugin-lame", "plugin-lc3", + "plugin-ldac", "plugin-legacyrawparse", "plugin-level", "plugin-libav", @@ -67418,6 +68989,7 @@ "plugin-ogg", "plugin-omx", "plugin-openal", + "plugin-openaptx", "plugin-opencv", "plugin-openexr", "plugin-opengl", @@ -67440,6 +69012,7 @@ "plugin-pnm", "plugin-proxy", "plugin-pulseaudio", + "plugin-qml6", "plugin-qmlgl", "plugin-qroverlay", "plugin-qsv", @@ -67484,10 +69057,14 @@ "plugin-srtp", "plugin-subenc", "plugin-subparse", + "plugin-svtav1", + "plugin-svthevcenc", + "plugin-svtjpegxs", "plugin-switchbin", "plugin-taglib", "plugin-tcp", "plugin-teletext", + "plugin-tensordecoders", "plugin-theora", "plugin-timecode", "plugin-tinyalsa", @@ -67532,6 +69109,7 @@ "plugin-webp", "plugin-webrtc", "plugin-webrtcdsp", + "plugin-webview2", "plugin-wic", "plugin-wildmidi", "plugin-win32ipc", @@ -67547,6 +69125,7 @@ "plugin-y4mdec", "plugin-y4menc", "plugin-zbar", + "plugin-zxing", "png-encoder-pred", "png-encoder-pred::avg", "png-encoder-pred::mixed", @@ -67615,10 +69194,29 @@ "qml6d3d11sink", "qml6d3d11sink:force-aspect-ratio", "qml6d3d11sink:widget", + "qml6glmixer", + "qml6glmixer::qml-scene-destroyed", + "qml6glmixer::qml-scene-initialized", + "qml6glmixer:qml-scene", + "qml6glmixer:root-item", + "qml6gloverlay", + "qml6gloverlay::qml-scene-destroyed", + "qml6gloverlay::qml-scene-initialized", + "qml6gloverlay:qml-scene", + "qml6gloverlay:root-item", + "qml6gloverlay:widget", + "qml6glsink", + "qml6glsink:force-aspect-ratio", + "qml6glsink:pixel-aspect-ratio", + "qml6glsink:widget", + "qml6glsrc", + "qml6glsrc:use-default-fbo", + "qml6glsrc:window", "qmlgloverlay", "qmlgloverlay::qml-scene-destroyed", "qmlgloverlay::qml-scene-initialized", "qmlgloverlay:context", + "qmlgloverlay:depth-buffer", "qmlgloverlay:qml-scene", "qmlgloverlay:qos", "qmlgloverlay:root-item", @@ -67795,6 +69393,7 @@ "queue:min-threshold-buffers", "queue:min-threshold-bytes", "queue:min-threshold-time", + "queue:notify-levels", "queue:silent", "rademux", "radioactv", @@ -67990,11 +69589,13 @@ "rtmp2sink", "rtmp2sink:async-connect", "rtmp2sink:chunk-size", + "rtmp2sink:extra-connect-args", "rtmp2sink:peak-kbps", "rtmp2sink:stats", "rtmp2sink:stop-commands", "rtmp2src", "rtmp2src:async-connect", + "rtmp2src:extra-connect-args", "rtmp2src:idle-timeout", "rtmp2src:no-eof-is-error", "rtmp2src:stats", @@ -68111,6 +69712,7 @@ "rtpdvpay:mode", "rtpfunnel", "rtpfunnel:common-ts-offset", + "rtpfunnel:forward-unknown-ssrc", "rtpg722depay", "rtpg722pay", "rtpg723depay", @@ -68183,6 +69785,7 @@ "rtpjitterbuffer:max-misorder-time", "rtpjitterbuffer:max-rtcp-rtp-time-diff", "rtpjitterbuffer:max-ts-offset-adjustment", + "rtpjitterbuffer:min-sync-interval", "rtpjitterbuffer:mode", "rtpjitterbuffer:percent", "rtpjitterbuffer:post-drop-messages", @@ -68244,6 +69847,7 @@ "rtppassthroughpay", "rtppassthroughpay:mtu", "rtppassthroughpay:pt", + "rtppassthroughpay:retimestamp-mode", "rtppassthroughpay:seqnum", "rtppassthroughpay:seqnum-offset", "rtppassthroughpay:stats", @@ -68447,16 +70051,22 @@ "rtspsrc::get-parameter", "rtspsrc::get-parameters", "rtspsrc::handle-request", + "rtspsrc::hard-limit", "rtspsrc::new-manager", "rtspsrc::on-sdp", "rtspsrc::push-backchannel-buffer", "rtspsrc::push-backchannel-sample", + "rtspsrc::remove-key", "rtspsrc::request-rtcp-key", + "rtspsrc::request-rtp-key", "rtspsrc::select-stream", + "rtspsrc::set-mikey-parameter", "rtspsrc::set-parameter", + "rtspsrc::soft-limit", "rtspsrc:add-reference-timestamp-meta", "rtspsrc:backchannel", "rtspsrc:buffer-mode", + "rtspsrc:client-managed-mikey", "rtspsrc:connection-speed", "rtspsrc:debug", "rtspsrc:default-rtsp-version", @@ -68465,6 +70075,7 @@ "rtspsrc:do-rtsp-keep-alive", "rtspsrc:drop-on-latency", "rtspsrc:extra-http-request-headers", + "rtspsrc:force-non-compliant-url", "rtspsrc:ignore-x-server-reply", "rtspsrc:is-live", "rtspsrc:latency", @@ -68490,6 +70101,7 @@ "rtspsrc:sdes", "rtspsrc:short-header", "rtspsrc:tcp-timeout", + "rtspsrc:tcp-timestamp", "rtspsrc:teardown-timeout", "rtspsrc:timeout", "rtspsrc:tls-database", @@ -68838,8 +70450,11 @@ "splitmuxsink:start-index", "splitmuxsink:use-robust-muxing", "splitmuxsrc", + "splitmuxsrc::add-fragment", "splitmuxsrc::format-location", "splitmuxsrc:location", + "splitmuxsrc:num-lookahead", + "splitmuxsrc:num-open-fragments", "square", "square:height", "square:width", @@ -68910,6 +70525,10 @@ "srtsrc:uri", "srtsrc:wait-for-connection", "ssaparse", + "ssdobjectdetector", + "ssdobjectdetector:label-file", + "ssdobjectdetector:score-threshold", + "ssdobjectdetector:size-threshold", "stereo", "stereo:active", "stereo:stereo", @@ -68934,11 +70553,61 @@ "svq1enc-motion-est::epzs", "svq1enc-motion-est::xone", "svq1enc-motion-est::zero", + "svtav1enc", + "svtav1enc:cqp", + "svtav1enc:crf", + "svtav1enc:intra-period-length", + "svtav1enc:intra-refresh-type", + "svtav1enc:logical-processors", + "svtav1enc:max-bitrate", + "svtav1enc:max-qp-allowed", + "svtav1enc:maximum-buffer-size", + "svtav1enc:min-qp-allowed", + "svtav1enc:parameters-string", + "svtav1enc:preset", + "svtav1enc:target-bitrate", + "svtav1enc:target-socket", + "svthevcenc", + "svthevcenc:aud", + "svthevcenc:b-pyramid", + "svthevcenc:baselayer-mode", + "svthevcenc:bitrate", + "svthevcenc:config-interval", + "svthevcenc:cores", + "svthevcenc:enable-open-gop", + "svthevcenc:enable-scd", + "svthevcenc:insert-vui", + "svthevcenc:key-int-max", + "svthevcenc:lookahead", + "svthevcenc:pred-struct", + "svthevcenc:qp-i", + "svthevcenc:qp-max", + "svthevcenc:qp-min", + "svthevcenc:rc", + "svthevcenc:socket", + "svthevcenc:speed", + "svthevcenc:tile-col", + "svthevcenc:tile-row", + "svthevcenc:tune", + "svthevcenc:vbv-buffer-size", + "svthevcenc:vbv-max-rate", + "svtjpegxsdec", + "svtjpegxsdec:threads", + "svtjpegxsenc", + "svtjpegxsenc:bits-per-pixel", + "svtjpegxsenc:coding-signs", + "svtjpegxsenc:decomp-h", + "svtjpegxsenc:decomp-v", + "svtjpegxsenc:quant-mode", + "svtjpegxsenc:rate-control-mode", + "svtjpegxsenc:slice-height", + "svtjpegxsenc:threads", "switchbin", "switchbin:current-path", "switchbin:num-paths", "synaescope", "taginject", + "taginject:merge-mode", "taginject:scope", "taginject:tags", "tcase_skip_broken_loop_test", @@ -69083,6 +70752,11 @@ "tonegeneratesrc:typefind", "tonegeneratesrc:volume", "tonegeneratesrc:volume2", + "tracer-latency:flags", + "tracer-leaks:check-refs", + "tracer-leaks:filters", + "tracer-leaks:log-leaks-on-deinit", + "tracer-leaks:stack-traces-flags", "transcodebin", "transcodebin:audio-filter", "transcodebin:avoid-reencoding", @@ -69153,6 +70827,7 @@ "unixfdsink", "unixfdsink:socket-path", "unixfdsink:socket-type", + "unixfdsink:wait-for-connection", "unixfdsrc", "unixfdsrc:socket-path", "unixfdsrc:socket-type", @@ -69314,8 +70989,6 @@ "v4l2src:pixel-aspect-ratio", "v4l2src:saturation", "vaapiav1dec", - "GstVaapiDecode_av1!sink", - "GstVaapiDecode_av1!src", "vaapidecodebin", "vaapidecodebin:deinterlace-method", "vaapidecodebin:disable-vpp", @@ -69428,10 +71101,30 @@ "vaapisink:signal-handoffs", "vaapisink:view-id", "vaapivc1dec", + "vaapivp9dec", "vaav1dec", "vaav1dec:device-path", + "vaav1enc", + "vaav1enc:bitrate", + "vaav1enc:cpb-size", + "vaav1enc:gf-group-size", + "vaav1enc:hierarchical-level", + "vaav1enc:key-int-max", + "vaav1enc:max-qp", + "vaav1enc:mbbrc", + "vaav1enc:min-qp", + "vaav1enc:num-tile-cols", + "vaav1enc:num-tile-rows", + "vaav1enc:qp", + "vaav1enc:rate-control", + "vaav1enc:ref-frames", + "vaav1enc:superblock-128x128", + "vaav1enc:target-percentage", + "vaav1enc:target-usage", + "vaav1enc:tile-groups", "vacompositor", "vacompositor:device-path", + "vacompositor:interpolation-method", "vacompositor:scale-method", "vadeinterlace", "vadeinterlace:method", @@ -69455,13 +71148,35 @@ "vah264enc:qpb", "vah264enc:qpi", "vah264enc:qpp", - "vah264enc:ref-frames", "vah264enc:rate-control", + "vah264enc:ref-frames", "vah264enc:target-percentage", "vah264enc:target-usage", "vah264enc:trellis", "vah265dec", "vah265dec:device-path", + "vah265enc", + "vah265enc:aud", + "vah265enc:b-frames", + "vah265enc:b-pyramid", + "vah265enc:bitrate", + "vah265enc:cpb-size", + "vah265enc:i-frames", + "vah265enc:key-int-max", + "vah265enc:max-qp", + "vah265enc:mbbrc", + "vah265enc:min-qp", + "vah265enc:num-slices", + "vah265enc:num-tile-cols", + "vah265enc:num-tile-rows", + "vah265enc:qpb", + "vah265enc:qpi", + "vah265enc:qpp", + "vah265enc:rate-control", + "vah265enc:ref-frames", + "vah265enc:target-percentage", + "vah265enc:target-usage", + "vah265enc:trellis", "vajpegdec", "vajpegdec:device-path", "value", @@ -69473,6 +71188,7 @@ "vapostproc", "vapostproc:add-borders", "vapostproc:disable-passthrough", + "vapostproc:interpolation-method", "vapostproc:scale-method", "vavp8dec", "vavp8dec:device-path", @@ -69653,28 +71369,79 @@ "vtenc_h264!src", "vtenc_h264:allow-frame-reordering", "vtenc_h264:bitrate", + "vtenc_h264:data-rate-limits", "vtenc_h264:max-keyframe-interval", "vtenc_h264:max-keyframe-interval-duration", "vtenc_h264:quality", + "vtenc_h264:rate-control", "vtenc_h264:realtime", "vtenc_h264_hw", "vtenc_h264_hw!sink", "vtenc_h264_hw!src", "vtenc_h264_hw:allow-frame-reordering", "vtenc_h264_hw:bitrate", + "vtenc_h264_hw:data-rate-limits", "vtenc_h264_hw:max-keyframe-interval", "vtenc_h264_hw:max-keyframe-interval-duration", "vtenc_h264_hw:quality", + "vtenc_h264_hw:rate-control", "vtenc_h264_hw:realtime", + "vtenc_h265", + "vtenc_h265!sink", + "vtenc_h265!src", + "vtenc_h265:allow-frame-reordering", + "vtenc_h265:bitrate", + "vtenc_h265:data-rate-limits", + "vtenc_h265:max-keyframe-interval", + "vtenc_h265:max-keyframe-interval-duration", + "vtenc_h265:quality", + "vtenc_h265:rate-control", + "vtenc_h265:realtime", + "vtenc_h265_hw", + "vtenc_h265_hw!sink", + "vtenc_h265_hw!src", + "vtenc_h265_hw:allow-frame-reordering", + "vtenc_h265_hw:bitrate", + "vtenc_h265_hw:data-rate-limits", + "vtenc_h265_hw:max-keyframe-interval", + "vtenc_h265_hw:max-keyframe-interval-duration", + "vtenc_h265_hw:quality", + "vtenc_h265_hw:rate-control", + "vtenc_h265_hw:realtime", + "vtenc_h265a", + "vtenc_h265a!sink", + "vtenc_h265a!src", + "vtenc_h265a:allow-frame-reordering", + "vtenc_h265a:bitrate", + "vtenc_h265a:data-rate-limits", + "vtenc_h265a:max-keyframe-interval", + "vtenc_h265a:max-keyframe-interval-duration", + "vtenc_h265a:quality", + "vtenc_h265a:rate-control", + "vtenc_h265a:realtime", + "vtenc_h265a_hw", + "vtenc_h265a_hw!sink", + "vtenc_h265a_hw!src", + "vtenc_h265a_hw:allow-frame-reordering", + "vtenc_h265a_hw:bitrate", + "vtenc_h265a_hw:data-rate-limits", + "vtenc_h265a_hw:max-keyframe-interval", + "vtenc_h265a_hw:max-keyframe-interval-duration", + "vtenc_h265a_hw:quality", + "vtenc_h265a_hw:rate-control", + "vtenc_h265a_hw:realtime", "vtenc_prores", "vtenc_prores!sink", "vtenc_prores!src", "vtenc_prores:allow-frame-reordering", "vtenc_prores:bitrate", + "vtenc_prores:data-rate-limits", + "vtenc_prores:max-frame-delay", "vtenc_prores:max-keyframe-interval", "vtenc_prores:max-keyframe-interval-duration", "vtenc_prores:preserve-alpha", "vtenc_prores:quality", + "vtenc_prores:rate-control", "vtenc_prores:realtime", "vulkancolorconvert", "vulkandownload", @@ -69786,6 +71553,7 @@ "webrtcbin::on-new-transceiver", "webrtcbin::prepare-data-channel", "webrtcbin::request-aux-sender", + "webrtcbin::request-post-rtp-aux-sender", "webrtcbin::set-local-description", "webrtcbin::set-remote-description", "webrtcbin:bundle-policy", @@ -69802,6 +71570,7 @@ "webrtcbin:pending-local-description", "webrtcbin:pending-remote-description", "webrtcbin:remote-description", + "webrtcbin:reuse-source-pads", "webrtcbin:sctp-transport", "webrtcbin:signaling-state", "webrtcbin:stun-server", @@ -69826,6 +71595,12 @@ "webrtcdsp:voice-detection-frame-size-ms", "webrtcdsp:voice-detection-likelihood", "webrtcechoprobe", + "webview2src", + "webview2src:adapter", + "webview2src:javascript", + "webview2src:location", + "webview2src:processing-deadline", + "webview2src:user-data-folder", "webvttenc", "webvttenc:duration", "webvttenc:timestamp", @@ -69931,6 +71706,7 @@ "x264enc:mb-tree", "x264enc:me", "x264enc:multipass-cache-file", + "x264enc:nal-hrd", "x264enc:noise-reduction", "x264enc:option-string", "x264enc:pass", @@ -70010,5 +71786,11 @@ "zbar:cache", "zbar:message", "zebrastripe", - "zebrastripe:threshold" -] + "zebrastripe:threshold", + "zxing", + "zxing:attach-frame", + "zxing:format", + "zxing:message", + "zxing:try-faster", + "zxing:try-rotate" +] \ No newline at end of file diff --git a/subprojects/gst-docs/symbols/symbols_version.txt b/subprojects/gst-docs/symbols/symbols_version.txt index 614245ec45..581595d5a1 100644 --- a/subprojects/gst-docs/symbols/symbols_version.txt +++ b/subprojects/gst-docs/symbols/symbols_version.txt @@ -1 +1 @@ -1.24 \ No newline at end of file +1.25 \ No newline at end of file diff --git a/subprojects/gst-editing-services/NEWS b/subprojects/gst-editing-services/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-editing-services/NEWS +++ b/subprojects/gst-editing-services/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-editing-services/RELEASE b/subprojects/gst-editing-services/RELEASE index dcb4cef9c5..4a19ad206a 100644 --- a/subprojects/gst-editing-services/RELEASE +++ b/subprojects/gst-editing-services/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-editing-services 1.25.0.1. +This is GStreamer gst-editing-services 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-editing-services/gst-editing-services.doap b/subprojects/gst-editing-services/gst-editing-services.doap index 1d2fe2f7cb..631af354b7 100644 --- a/subprojects/gst-editing-services/gst-editing-services.doap +++ b/subprojects/gst-editing-services/gst-editing-services.doap @@ -30,6 +30,16 @@ GStreamer library for creating audio and video editors + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-editing-services/meson.build b/subprojects/gst-editing-services/meson.build index 1e1928b2b4..1d9bef9d9e 100644 --- a/subprojects/gst-editing-services/meson.build +++ b/subprojects/gst-editing-services/meson.build @@ -1,5 +1,5 @@ project('gst-editing-services', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-examples/meson.build b/subprojects/gst-examples/meson.build index 7317f99f7b..5152bc0af3 100644 --- a/subprojects/gst-examples/meson.build +++ b/subprojects/gst-examples/meson.build @@ -1,4 +1,4 @@ -project('gst-examples', 'c', version : '1.25.0.1', license : 'LGPL') +project('gst-examples', 'c', version : '1.25.1', license : 'LGPL') static_build = get_option('default_library') == 'static' cc = meson.get_compiler('c') diff --git a/subprojects/gst-integration-testsuites/meson.build b/subprojects/gst-integration-testsuites/meson.build index d227b43121..7092c664f5 100644 --- a/subprojects/gst-integration-testsuites/meson.build +++ b/subprojects/gst-integration-testsuites/meson.build @@ -1 +1 @@ -project('gst-integration-testsuites', [], version: '1.25.0.1', meson_version : '>= 1.3', license: 'LGPL') +project('gst-integration-testsuites', [], version: '1.25.1', meson_version : '>= 1.3', license: 'LGPL') diff --git a/subprojects/gst-libav/NEWS b/subprojects/gst-libav/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-libav/NEWS +++ b/subprojects/gst-libav/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-libav/RELEASE b/subprojects/gst-libav/RELEASE index 3db454c505..32c58d9c10 100644 --- a/subprojects/gst-libav/RELEASE +++ b/subprojects/gst-libav/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-libav 1.25.0.1. +This is GStreamer gst-libav 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-libav/gst-libav.doap b/subprojects/gst-libav/gst-libav.doap index e269d4b1c5..200d67d1d6 100644 --- a/subprojects/gst-libav/gst-libav.doap +++ b/subprojects/gst-libav/gst-libav.doap @@ -32,6 +32,16 @@ colorspace conversion elements. + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-libav/meson.build b/subprojects/gst-libav/meson.build index c452a17199..ae2f417942 100644 --- a/subprojects/gst-libav/meson.build +++ b/subprojects/gst-libav/meson.build @@ -1,5 +1,5 @@ project('gst-libav', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-bad/NEWS b/subprojects/gst-plugins-bad/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-plugins-bad/NEWS +++ b/subprojects/gst-plugins-bad/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-bad/RELEASE b/subprojects/gst-plugins-bad/RELEASE index fa559e7a5c..7728965a83 100644 --- a/subprojects/gst-plugins-bad/RELEASE +++ b/subprojects/gst-plugins-bad/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.25.0.1. +This is GStreamer gst-plugins-bad 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-plugins-bad/gst-plugins-bad.doap b/subprojects/gst-plugins-bad/gst-plugins-bad.doap index afcb44dace..be88f6e444 100644 --- a/subprojects/gst-plugins-bad/gst-plugins-bad.doap +++ b/subprojects/gst-plugins-bad/gst-plugins-bad.doap @@ -33,6 +33,16 @@ real live maintainer, or some actual wide use. + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-plugins-bad/meson.build b/subprojects/gst-plugins-bad/meson.build index 49b87d95a0..cbf985f259 100644 --- a/subprojects/gst-plugins-bad/meson.build +++ b/subprojects/gst-plugins-bad/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-base/NEWS b/subprojects/gst-plugins-base/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-plugins-base/NEWS +++ b/subprojects/gst-plugins-base/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-base/RELEASE b/subprojects/gst-plugins-base/RELEASE index fafe9b0236..0b3ca909a9 100644 --- a/subprojects/gst-plugins-base/RELEASE +++ b/subprojects/gst-plugins-base/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-base 1.25.0.1. +This is GStreamer gst-plugins-base 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-plugins-base/gst-plugins-base.doap b/subprojects/gst-plugins-base/gst-plugins-base.doap index a15816a962..cd394ed777 100644 --- a/subprojects/gst-plugins-base/gst-plugins-base.doap +++ b/subprojects/gst-plugins-base/gst-plugins-base.doap @@ -34,6 +34,16 @@ A wide range of video and audio decoders, encoders, and filters are included. + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-plugins-base/meson.build b/subprojects/gst-plugins-base/meson.build index 4aeaf80f83..987c9b5432 100644 --- a/subprojects/gst-plugins-base/meson.build +++ b/subprojects/gst-plugins-base/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-base', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-good/NEWS b/subprojects/gst-plugins-good/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-plugins-good/NEWS +++ b/subprojects/gst-plugins-good/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-good/RELEASE b/subprojects/gst-plugins-good/RELEASE index dd66c92078..8b25a019d2 100644 --- a/subprojects/gst-plugins-good/RELEASE +++ b/subprojects/gst-plugins-good/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-good 1.25.0.1. +This is GStreamer gst-plugins-good 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-plugins-good/gst-plugins-good.doap b/subprojects/gst-plugins-good/gst-plugins-good.doap index feafc02a23..20bc715d6d 100644 --- a/subprojects/gst-plugins-good/gst-plugins-good.doap +++ b/subprojects/gst-plugins-good/gst-plugins-good.doap @@ -32,6 +32,16 @@ the plug-in code, LGPL or LGPL-compatible for the supporting library). + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-plugins-good/meson.build b/subprojects/gst-plugins-good/meson.build index 1b49704385..5783a04997 100644 --- a/subprojects/gst-plugins-good/meson.build +++ b/subprojects/gst-plugins-good/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-good', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-rs.wrap b/subprojects/gst-plugins-rs.wrap index f41d56b701..4c63256b1a 100644 --- a/subprojects/gst-plugins-rs.wrap +++ b/subprojects/gst-plugins-rs.wrap @@ -2,4 +2,4 @@ directory=gst-plugins-rs url=https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git push-url=git@gitlab.freedesktop.org:gstreamer/gst-plugins-rs.git -revision=main +revision=gstreamer-1.25.1 diff --git a/subprojects/gst-plugins-ugly/NEWS b/subprojects/gst-plugins-ugly/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-plugins-ugly/NEWS +++ b/subprojects/gst-plugins-ugly/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-ugly/RELEASE b/subprojects/gst-plugins-ugly/RELEASE index 4787963759..c8db09987c 100644 --- a/subprojects/gst-plugins-ugly/RELEASE +++ b/subprojects/gst-plugins-ugly/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-ugly 1.25.0.1. +This is GStreamer gst-plugins-ugly 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap index 84a24d8108..9da0e938f9 100644 --- a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap +++ b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap @@ -33,6 +33,16 @@ might be widely known to present patent problems. + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-plugins-ugly/meson.build b/subprojects/gst-plugins-ugly/meson.build index f55ee63681..8a94da9732 100644 --- a/subprojects/gst-plugins-ugly/meson.build +++ b/subprojects/gst-plugins-ugly/meson.build @@ -1,5 +1,5 @@ project('gst-plugins-ugly', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-python/NEWS b/subprojects/gst-python/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-python/NEWS +++ b/subprojects/gst-python/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-python/RELEASE b/subprojects/gst-python/RELEASE index 5b5f5bb957..cf2542a9da 100644 --- a/subprojects/gst-python/RELEASE +++ b/subprojects/gst-python/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-python 1.25.0.1. +This is GStreamer gst-python 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-python/gst-python.doap b/subprojects/gst-python/gst-python.doap index 902aa5ff56..8f08321ce6 100644 --- a/subprojects/gst-python/gst-python.doap +++ b/subprojects/gst-python/gst-python.doap @@ -30,6 +30,16 @@ GStreamer Python Bindings is a set of overrides and Gst fundamental types handli + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-python/meson.build b/subprojects/gst-python/meson.build index 0542b8ec46..268d02c2ab 100644 --- a/subprojects/gst-python/meson.build +++ b/subprojects/gst-python/meson.build @@ -1,5 +1,5 @@ project('gst-python', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-rtsp-server/NEWS b/subprojects/gst-rtsp-server/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gst-rtsp-server/NEWS +++ b/subprojects/gst-rtsp-server/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-rtsp-server/RELEASE b/subprojects/gst-rtsp-server/RELEASE index ec68ddc116..50d65f502f 100644 --- a/subprojects/gst-rtsp-server/RELEASE +++ b/subprojects/gst-rtsp-server/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-rtsp-server 1.25.0.1. +This is GStreamer gst-rtsp-server 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-rtsp-server/gst-rtsp-server.doap b/subprojects/gst-rtsp-server/gst-rtsp-server.doap index dfd598076e..371f71dace 100644 --- a/subprojects/gst-rtsp-server/gst-rtsp-server.doap +++ b/subprojects/gst-rtsp-server/gst-rtsp-server.doap @@ -30,6 +30,16 @@ RTSP server library based on GStreamer + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-rtsp-server/meson.build b/subprojects/gst-rtsp-server/meson.build index da88dd1385..eccb5cb52b 100644 --- a/subprojects/gst-rtsp-server/meson.build +++ b/subprojects/gst-rtsp-server/meson.build @@ -1,5 +1,5 @@ project('gst-rtsp-server', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : ['warning_level=1', 'buildtype=debugoptimized']) diff --git a/subprojects/gstreamer-sharp/meson.build b/subprojects/gstreamer-sharp/meson.build index 8482907831..3905ffcd83 100644 --- a/subprojects/gstreamer-sharp/meson.build +++ b/subprojects/gstreamer-sharp/meson.build @@ -1,4 +1,4 @@ -project('gstreamer-sharp', ['cs', 'c'], version: '1.25.0.1', +project('gstreamer-sharp', ['cs', 'c'], version: '1.25.1', meson_version : '>= 1.3', license: 'LGPL') fs = import ('fs') diff --git a/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs b/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs index b9736b3573..72633fbd2f 100644 --- a/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs +++ b/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs @@ -17,9 +17,9 @@ namespace Gst.PbUtils { public const string ENCODING_CATEGORY_ONLINE_SERVICE = @"online-service"; public const string ENCODING_CATEGORY_STORAGE_EDITING = @"storage-editing"; public const int PLUGINS_BASE_VERSION_MAJOR = 1; - public const int PLUGINS_BASE_VERSION_MICRO = 0; + public const int PLUGINS_BASE_VERSION_MICRO = 1; public const int PLUGINS_BASE_VERSION_MINOR = 25; - public const int PLUGINS_BASE_VERSION_NANO = 1; + public const int PLUGINS_BASE_VERSION_NANO = 0; #endregion } } diff --git a/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs b/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs index bbba65ec12..1580b197d9 100644 --- a/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs +++ b/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs @@ -171,9 +171,9 @@ namespace Gst { public const int VALUE_LESS_THAN = -1; public const int VALUE_UNORDERED = 2; public const int VERSION_MAJOR = 1; - public const int VERSION_MICRO = 0; + public const int VERSION_MICRO = 1; public const int VERSION_MINOR = 25; - public const int VERSION_NANO = 1; + public const int VERSION_NANO = 0; #endregion } } diff --git a/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml b/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml index 2133f41eaa..a089e2c7a4 100644 --- a/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml +++ b/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml @@ -12342,10 +12342,10 @@ - - - - + + + + @@ -22376,10 +22376,10 @@ - - - - + + + + diff --git a/subprojects/gstreamer-vaapi/NEWS b/subprojects/gstreamer-vaapi/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gstreamer-vaapi/NEWS +++ b/subprojects/gstreamer-vaapi/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gstreamer-vaapi/RELEASE b/subprojects/gstreamer-vaapi/RELEASE index a69218684a..09e29e60b0 100644 --- a/subprojects/gstreamer-vaapi/RELEASE +++ b/subprojects/gstreamer-vaapi/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gstreamer-vaapi 1.25.0.1. +This is GStreamer gstreamer-vaapi 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap b/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap index e998687eb5..9d96b53a90 100644 --- a/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap +++ b/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap @@ -25,6 +25,16 @@ + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gstreamer-vaapi/meson.build b/subprojects/gstreamer-vaapi/meson.build index a9dbff0673..214ad05a50 100644 --- a/subprojects/gstreamer-vaapi/meson.build +++ b/subprojects/gstreamer-vaapi/meson.build @@ -1,5 +1,5 @@ project('gstreamer-vaapi', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gstreamer/NEWS b/subprojects/gstreamer/NEWS index 0a7f0b6afe..99c6dccaee 100644 --- a/subprojects/gstreamer/NEWS +++ b/subprojects/gstreamer/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.1 and was released on 14 January 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## 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 +## Highlights -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins +- to be filled in - Lots of new plugins, features, performance improvements and bug fixes -Major new features and changes +## Major new features and changes -Discourse forum and Matrix chat space +- to be filled in -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. +## New elements and plugins -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. +- to be filled in -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. +## New element features and additions -Playbin3, decodebin3 now stable and default +- to be filled in -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. +## Plugin and library moves -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. +- to be filled in -Improvements in this cycle: +## Plugin and element removals -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. +- to be filled in -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: - - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. - -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. - -- x264enc gained support for 8-bit monochrome video (GRAY8). - -- ximagesrc gained navigation support (mouse and keyboard events). - -- y4mdec now parses extended headers to support high bit depth video. - -Plugin and library moves - -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. - -Plugin and element removals - -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. - -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. - -- The kate subtitle plugin has been removed. - -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. +- to be filled in -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. +Other libs -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. +- to be filled in -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() +## Miscellaneous performance, latency and memory optimisations -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE - -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. - -- Two tiled Mediatek 10-bit formats: - - - MT2110T - - MT2110R - -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements +## Tracing framework and debugging improvements -- The gst-stats tool can now be passed a custom regular expression - -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder +## Tools -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. +- to be filled in -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. +## GStreamer FFmpeg wrapper -Tools +- to be filled in -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. +## GStreamer RTSP server -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. +- to be filled in -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). - -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. - -- Added codec mappings for AV1, MxPEG, FFVHuff video - -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. - -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. - -- The FFmpeg meson subproject wrap has been updated to v6.1 - -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support +## GStreamer Video4Linux2 support -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. +- to be filled in -- v4l2src now supports 10/12/14/16-bit bayer formats. +## GStreamer Editing Services and NLE -- Stateful decoders now pass too large encoded frames over multiple buffers. +- to be filled in -- AV1 Stateless video decoder. +## GStreamer validate -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI +- to be filled in -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline - -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong - -GStreamer validate - -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. - -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. - -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. - -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## 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. -- Added a GstTagList override that makes a tag list act like a dict +- to be filled in -- Fix build and usage in Windows +## GStreamer C# Bindings -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS - -GStreamer C# Bindings - -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## 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 twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +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.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach 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++. -WebRTC +### WebRTC -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. +- to be filled in -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. +### Other new Rust elements -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. +- to be filled in -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. +### Other improvements -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. +- to be filled in -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. +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.13 (shipped with GStreamer 1.26). -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. +## Build and Dependencies -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. - -- New isomp4mux non-fragmented MP4 muxer element. - -Other improvements - -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate - -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). - -Cerbero Rust support - -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. - -Build and Dependencies - -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration +- to be filled in -- gst-env.py: Output a setting for the prompt with --only-environment - -Cerbero +### 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 plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors +- to be filled in -Platform-specific changes and improvements +## Platform-specific changes and improvements -Android +### Android -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. +- to be filled in -- Add support for AV1 to the androidmedia video encoder and decoder. +### Apple macOS and iOS -Apple macOS and iOS +- to be filled in -- osxaudio: audio clock improvements (interpolate based on system time) +### Windows -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. +- to be filled in -Windows +## Documentation improvements -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. - -- PTP clock support is now also available on Windows - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -- wasapi2 audio plugin: - - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 - -- win32ipc supports zero-copy rendering now through a shared bufferpool. - -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. - -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. - -- d3d11 plugin: - - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch +Stable 1.26 branch -After the 1.24.0 release there will be several 1.24.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.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable 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 will be a stable branch. -1.24.0 +Schedule for 1.28 -GStreamer 1.24.0 was released on 4 March 2024. +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. -Schedule for 1.26 +The schedule for 1.28 is yet to be decided. -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. - -The schedule for 1.26 is yet to be decided. - -1.26 will be backwards-compatible to the stable 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 +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 Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gstreamer/RELEASE b/subprojects/gstreamer/RELEASE index 111dc5d7d7..9bf7cf6713 100644 --- a/subprojects/gstreamer/RELEASE +++ b/subprojects/gstreamer/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer core 1.25.0.1. +This is GStreamer core 1.25.1. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gstreamer/gstreamer.doap b/subprojects/gstreamer/gstreamer.doap index 5bae6e3423..bb7b413e31 100644 --- a/subprojects/gstreamer/gstreamer.doap +++ b/subprojects/gstreamer/gstreamer.doap @@ -38,6 +38,16 @@ hierarchy, and a set of media-agnostic core elements. + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gstreamer/meson.build b/subprojects/gstreamer/meson.build index 8b3bf51f08..8636dbf3b9 100644 --- a/subprojects/gstreamer/meson.build +++ b/subprojects/gstreamer/meson.build @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.25.0.1', + version : '1.25.1', meson_version : '>= 1.3', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ])