From 9820e58be68004fcfe674eb577efb5cae203c65d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 4 Oct 2022 01:14:01 +0100 Subject: [PATCH] Release 1.21.1 --- meson.build | 2 +- subprojects/gst-devtools/ChangeLog | 15 + subprojects/gst-devtools/NEWS | 1947 ++------------------ subprojects/gst-devtools/RELEASE | 21 +- subprojects/gst-devtools/gst-devtools.doap | 10 + subprojects/gst-devtools/meson.build | 2 +- subprojects/gst-docs/meson.build | 2 +- subprojects/gst-docs/symbols/symbol_index.json | 566 +++++- subprojects/gst-docs/symbols/symbols_version.txt | 2 +- subprojects/gst-editing-services/ChangeLog | 15 + subprojects/gst-editing-services/NEWS | 1947 ++------------------ subprojects/gst-editing-services/RELEASE | 21 +- .../gst-editing-services/gst-editing-services.doap | 10 + subprojects/gst-editing-services/meson.build | 2 +- subprojects/gst-examples/meson.build | 2 +- subprojects/gst-integration-testsuites/meson.build | 2 +- subprojects/gst-libav/ChangeLog | 15 + subprojects/gst-libav/NEWS | 1947 ++------------------ subprojects/gst-libav/RELEASE | 21 +- subprojects/gst-libav/gst-libav.doap | 10 + subprojects/gst-libav/meson.build | 2 +- subprojects/gst-omx/ChangeLog | 15 + subprojects/gst-omx/NEWS | 1947 ++------------------ subprojects/gst-omx/RELEASE | 21 +- subprojects/gst-omx/gst-omx.doap | 10 + subprojects/gst-omx/meson.build | 2 +- subprojects/gst-plugins-bad/ChangeLog | 15 + subprojects/gst-plugins-bad/NEWS | 1947 ++------------------ subprojects/gst-plugins-bad/RELEASE | 21 +- subprojects/gst-plugins-bad/gst-plugins-bad.doap | 10 + subprojects/gst-plugins-bad/meson.build | 2 +- subprojects/gst-plugins-base/ChangeLog | 15 + subprojects/gst-plugins-base/NEWS | 1947 ++------------------ subprojects/gst-plugins-base/RELEASE | 21 +- subprojects/gst-plugins-base/gst-plugins-base.doap | 10 + subprojects/gst-plugins-base/meson.build | 2 +- subprojects/gst-plugins-good/ChangeLog | 16 + subprojects/gst-plugins-good/NEWS | 1947 ++------------------ subprojects/gst-plugins-good/RELEASE | 21 +- .../gst-plugins-good/docs/gst_plugins_cache.json | 10 +- subprojects/gst-plugins-good/gst-plugins-good.doap | 10 + subprojects/gst-plugins-good/meson.build | 2 +- subprojects/gst-plugins-ugly/ChangeLog | 15 + subprojects/gst-plugins-ugly/NEWS | 1947 ++------------------ subprojects/gst-plugins-ugly/RELEASE | 21 +- subprojects/gst-plugins-ugly/gst-plugins-ugly.doap | 10 + subprojects/gst-plugins-ugly/meson.build | 2 +- subprojects/gst-python/ChangeLog | 15 + subprojects/gst-python/NEWS | 1947 ++------------------ subprojects/gst-python/RELEASE | 21 +- subprojects/gst-python/gst-python.doap | 10 + subprojects/gst-python/meson.build | 2 +- subprojects/gst-rtsp-server/ChangeLog | 16 + subprojects/gst-rtsp-server/NEWS | 1947 ++------------------ subprojects/gst-rtsp-server/RELEASE | 21 +- .../docs/plugins/gst_plugins_cache.json | 2 +- subprojects/gst-rtsp-server/gst-rtsp-server.doap | 10 + subprojects/gst-rtsp-server/meson.build | 2 +- subprojects/gstreamer-sharp/meson.build | 2 +- .../sources/generated/Gst.PbUtils/Constants.cs | 4 +- .../sources/generated/Gst/Constants.cs | 4 +- .../sources/generated/gstreamer-sharp-api.xml | 16 +- subprojects/gstreamer-vaapi/ChangeLog | 15 + subprojects/gstreamer-vaapi/NEWS | 1947 ++------------------ subprojects/gstreamer-vaapi/RELEASE | 21 +- subprojects/gstreamer-vaapi/gstreamer-vaapi.doap | 10 + subprojects/gstreamer-vaapi/meson.build | 2 +- subprojects/gstreamer/ChangeLog | 15 + subprojects/gstreamer/NEWS | 1947 ++------------------ subprojects/gstreamer/RELEASE | 21 +- subprojects/gstreamer/gstreamer.doap | 10 + subprojects/gstreamer/meson.build | 2 +- 72 files changed, 3286 insertions(+), 21270 deletions(-) diff --git a/meson.build b/meson.build index ca1e32d..99eb94a 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gstreamer-full', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62.0', default_options : ['buildtype=debugoptimized', # Needed due to https://github.com/mesonbuild/meson/issues/1889, diff --git a/subprojects/gst-devtools/ChangeLog b/subprojects/gst-devtools/ChangeLog index 7acc1fb..b694959 100644 --- a/subprojects/gst-devtools/ChangeLog +++ b/subprojects/gst-devtools/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-devtools.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gst-devtools/NEWS b/subprojects/gst-devtools/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-devtools/NEWS +++ b/subprojects/gst-devtools/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-devtools/RELEASE b/subprojects/gst-devtools/RELEASE index 3aa4be6..e43d9b4 100644 --- a/subprojects/gst-devtools/RELEASE +++ b/subprojects/gst-devtools/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-devtools 1.20.0. +This is GStreamer gst-devtools 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-devtools/gst-devtools.doap b/subprojects/gst-devtools/gst-devtools.doap index c0757b3..32bb0c3 100644 --- a/subprojects/gst-devtools/gst-devtools.doap +++ b/subprojects/gst-devtools/gst-devtools.doap @@ -55,6 +55,16 @@ + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-devtools/meson.build b/subprojects/gst-devtools/meson.build index d0523ea..3c0e738 100644 --- a/subprojects/gst-devtools/meson.build +++ b/subprojects/gst-devtools/meson.build @@ -1,5 +1,5 @@ project('gst-devtools', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'c_std=gnu99', diff --git a/subprojects/gst-docs/meson.build b/subprojects/gst-docs/meson.build index 62ea0af..3ec468b 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.21.0.1', + version: '1.21.1', meson_version : '>= 0.62') hotdoc_p = find_program('hotdoc') diff --git a/subprojects/gst-docs/symbols/symbol_index.json b/subprojects/gst-docs/symbols/symbol_index.json index 6b22752..3c1efbf 100644 --- a/subprojects/gst-docs/symbols/symbol_index.json +++ b/subprojects/gst-docs/symbols/symbol_index.json @@ -778,6 +778,7 @@ "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL", "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL", "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV", + "GES_VIDEO_STANDARD_TRANSITION_TYPE_FADE_IN", "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B", "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR", "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT", @@ -851,6 +852,7 @@ "GST_ALLOCATOR_FLAG_CUSTOM_ALLOC", "GST_ALLOCATOR_FLAG_LAST", "GST_ALLOCATOR_SYSMEM", + "GST_ALLOCATOR_VASURFACE", "GST_APP_LEAKY_TYPE_DOWNSTREAM", "GST_APP_LEAKY_TYPE_NONE", "GST_APP_LEAKY_TYPE_UPSTREAM", @@ -941,6 +943,7 @@ "GST_AUDIO_CONVERTER_FLAG_NONE", "GST_AUDIO_CONVERTER_FLAG_VARIABLE_RATE", "GST_AUDIO_CONVERTER_OPT_DITHER_METHOD", + "GST_AUDIO_CONVERTER_OPT_DITHER_THRESHOLD", "GST_AUDIO_CONVERTER_OPT_MIX_MATRIX", "GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD", "GST_AUDIO_CONVERTER_OPT_QUANTIZATION", @@ -1441,10 +1444,12 @@ "GST_CAPS_FEATURES_CAST", "GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY", "GST_CAPS_FEATURE_FORMAT_INTERLACED", + "GST_CAPS_FEATURE_MEMORY_CUDA_MEMORY", "GST_CAPS_FEATURE_MEMORY_DMABUF", "GST_CAPS_FEATURE_MEMORY_GL_BUFFER", "GST_CAPS_FEATURE_MEMORY_GL_MEMORY", "GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY", + "GST_CAPS_FEATURE_MEMORY_VA", "GST_CAPS_FEATURE_MEMORY_VULKAN_BUFFER", "GST_CAPS_FEATURE_MEMORY_VULKAN_IMAGE", "GST_CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META", @@ -1558,6 +1563,24 @@ "GST_CORE_ERROR_TAG", "GST_CORE_ERROR_THREAD", "GST_CORE_ERROR_TOO_LAZY", + "GST_CUDA_ALLOCATOR_CAST", + "GST_CUDA_BUFFER_COPY_CUDA", + "GST_CUDA_BUFFER_COPY_D3D11", + "GST_CUDA_BUFFER_COPY_GL", + "GST_CUDA_BUFFER_COPY_NVMM", + "GST_CUDA_BUFFER_COPY_SYSTEM", + "GST_CUDA_BUFFER_POOL_CAST", + "GST_CUDA_CONTEXT_CAST", + "GST_CUDA_CONTEXT_TYPE", + "GST_CUDA_GRAPHICS_RESOURCE_D3D11_RESOURCE", + "GST_CUDA_GRAPHICS_RESOURCE_GL_BUFFER", + "GST_CUDA_GRAPHICS_RESOURCE_NONE", + "GST_CUDA_MEMORY_CAST", + "GST_CUDA_MEMORY_TRANSFER_NEED_DOWNLOAD", + "GST_CUDA_MEMORY_TRANSFER_NEED_UPLOAD", + "GST_CUDA_MEMORY_TYPE_NAME", + "GST_CUDA_QUARK_GRAPHICS_RESOURCE", + "GST_CUDA_QUARK_MAX", "GST_DEBUG", "GST_DEBUG_BG_BLACK", "GST_DEBUG_BG_BLUE", @@ -2030,6 +2053,10 @@ "GST_GL_WINDOW_RESIZE_CB", "GST_GL_WINDOW_UNLOCK", "GST_GROUP_ID_INVALID", + "GST_H264_BIT_WRITER_ERROR", + "GST_H264_BIT_WRITER_INVALID_DATA", + "GST_H264_BIT_WRITER_NO_MORE_SPACE", + "GST_H264_BIT_WRITER_OK", "GST_H264_B_SLICE", "GST_H264_CT_TYPE_INTERLACED", "GST_H264_CT_TYPE_PROGRESSIVE", @@ -2122,6 +2149,7 @@ "GST_H264_SEI_REGISTERED_USER_DATA", "GST_H264_SEI_STEREO_VIDEO_INFO", "GST_H264_SEI_UNHANDLED_PAYLOAD", + "GST_H264_SEI_USER_DATA_UNREGISTERED", "GST_H264_SI_SLICE", "GST_H264_SP_SLICE", "GST_H264_S_B_SLICE", @@ -2129,6 +2157,10 @@ "GST_H264_S_P_SLICE", "GST_H264_S_SI_SLICE", "GST_H264_S_SP_SLICE", + "GST_H265_BIT_WRITER_ERROR", + "GST_H265_BIT_WRITER_INVALID_DATA", + "GST_H265_BIT_WRITER_NO_MORE_SPACE", + "GST_H265_BIT_WRITER_OK", "GST_H265_B_SLICE", "GST_H265_DECODER_CAST", "GST_H265_DPB_MAX_SIZE", @@ -2439,11 +2471,13 @@ "GST_LOG", "GST_LOG_OBJECT", "GST_MAKE_FOURCC", + "GST_MAP_CUDA", "GST_MAP_FLAG_LAST", "GST_MAP_GL", "GST_MAP_INFO_INIT", "GST_MAP_READ", "GST_MAP_READWRITE", + "GST_MAP_VA", "GST_MAP_WRITE", "GST_MEMDUMP", "GST_MEMDUMP_OBJECT", @@ -2536,6 +2570,7 @@ "GST_META_TAG_AUDIO_RATE_STR", "GST_META_TAG_AUDIO_STR", "GST_META_TAG_MEMORY", + "GST_META_TAG_MEMORY_REFERENCE_STR", "GST_META_TAG_MEMORY_STR", "GST_META_TAG_VIDEO_COLORSPACE_STR", "GST_META_TAG_VIDEO_ORIENTATION_STR", @@ -3299,12 +3334,31 @@ "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE", "GST_NAVIGATION_EVENT_MOUSE_MOVE", "GST_NAVIGATION_EVENT_MOUSE_SCROLL", + "GST_NAVIGATION_EVENT_TOUCH_CANCEL", + "GST_NAVIGATION_EVENT_TOUCH_DOWN", + "GST_NAVIGATION_EVENT_TOUCH_FRAME", + "GST_NAVIGATION_EVENT_TOUCH_MOTION", + "GST_NAVIGATION_EVENT_TOUCH_UP", "GST_NAVIGATION_GET_INTERFACE", "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED", "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED", "GST_NAVIGATION_MESSAGE_EVENT", "GST_NAVIGATION_MESSAGE_INVALID", "GST_NAVIGATION_MESSAGE_MOUSE_OVER", + "GST_NAVIGATION_MODIFIER_ALT_MASK", + "GST_NAVIGATION_MODIFIER_BUTTON1_MASK", + "GST_NAVIGATION_MODIFIER_BUTTON2_MASK", + "GST_NAVIGATION_MODIFIER_BUTTON3_MASK", + "GST_NAVIGATION_MODIFIER_BUTTON4_MASK", + "GST_NAVIGATION_MODIFIER_BUTTON5_MASK", + "GST_NAVIGATION_MODIFIER_CONTROL_MASK", + "GST_NAVIGATION_MODIFIER_HYPER_MASK", + "GST_NAVIGATION_MODIFIER_LOCK_MASK", + "GST_NAVIGATION_MODIFIER_MASK", + "GST_NAVIGATION_MODIFIER_META_MASK", + "GST_NAVIGATION_MODIFIER_NONE", + "GST_NAVIGATION_MODIFIER_SHIFT_MASK", + "GST_NAVIGATION_MODIFIER_SUPER_MASK", "GST_NAVIGATION_QUERY_ANGLES", "GST_NAVIGATION_QUERY_COMMANDS", "GST_NAVIGATION_QUERY_INVALID", @@ -3512,6 +3566,7 @@ "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_CONTAINER", "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_GENERIC", "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_IMAGE", + "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_METADATA", "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_SUBTITLE", "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_TAG", "GST_PBUTILS_CAPS_DESCRIPTION_FLAG_VIDEO", @@ -3643,6 +3698,7 @@ "GST_QUERY_SCHEDULING", "GST_QUERY_SEEKING", "GST_QUERY_SEGMENT", + "GST_QUERY_SELECTABLE", "GST_QUERY_TYPE", "GST_QUERY_TYPE_BOTH", "GST_QUERY_TYPE_DOWNSTREAM", @@ -4563,6 +4619,10 @@ "GST_TRACER_OBJECT_DESTROYED", "GST_TRACER_OBJECT_REFFED", "GST_TRACER_OBJECT_UNREFFED", + "GST_TRACER_PAD_CHAIN_LIST_POST", + "GST_TRACER_PAD_CHAIN_LIST_PRE", + "GST_TRACER_PAD_CHAIN_POST", + "GST_TRACER_PAD_CHAIN_PRE", "GST_TRACER_PAD_LINK_POST", "GST_TRACER_PAD_LINK_PRE", "GST_TRACER_PAD_PULL_RANGE_POST", @@ -4876,6 +4936,7 @@ "GST_VALIDATE_ACTION_TYPE_ASYNC", "GST_VALIDATE_ACTION_TYPE_CAN_BE_OPTIONAL", "GST_VALIDATE_ACTION_TYPE_CAN_EXECUTE_ON_ADDITION", + "GST_VALIDATE_ACTION_TYPE_CHECK", "GST_VALIDATE_ACTION_TYPE_CONFIG", "GST_VALIDATE_ACTION_TYPE_DOESNT_NEED_PIPELINE", "GST_VALIDATE_ACTION_TYPE_HANDLED_IN_CONFIG", @@ -4996,6 +5057,16 @@ "GST_VALUE_HOLDS_STRUCTURE", "GST_VALUE_LESS_THAN", "GST_VALUE_UNORDERED", + "GST_VA_DISPLAY_HANDLE_CONTEXT_TYPE_STR", + "GST_VA_DISPLAY_IS_IMPLEMENTATION", + "GST_VA_FEATURE_AUTO", + "GST_VA_FEATURE_DISABLED", + "GST_VA_FEATURE_ENABLED", + "GST_VA_IMPLEMENTATION_INTEL_I965", + "GST_VA_IMPLEMENTATION_INTEL_IHD", + "GST_VA_IMPLEMENTATION_INVALID", + "GST_VA_IMPLEMENTATION_MESA_GALLIUM", + "GST_VA_IMPLEMENTATION_OTHER", "GST_VC1_CONDOVER_ALL", "GST_VC1_CONDOVER_NONE", "GST_VC1_CONDOVER_SELECT", @@ -5291,6 +5362,7 @@ "GST_VIDEO_FORMAT_FLAG_LE", "GST_VIDEO_FORMAT_FLAG_PALETTE", "GST_VIDEO_FORMAT_FLAG_RGB", + "GST_VIDEO_FORMAT_FLAG_SUBTILES", "GST_VIDEO_FORMAT_FLAG_TILED", "GST_VIDEO_FORMAT_FLAG_UNPACK", "GST_VIDEO_FORMAT_FLAG_YUV", @@ -5324,6 +5396,7 @@ "GST_VIDEO_FORMAT_INFO_FORMAT", "GST_VIDEO_FORMAT_INFO_HAS_ALPHA", "GST_VIDEO_FORMAT_INFO_HAS_PALETTE", + "GST_VIDEO_FORMAT_INFO_HAS_SUBTILES", "GST_VIDEO_FORMAT_INFO_H_SUB", "GST_VIDEO_FORMAT_INFO_IS_COMPLEX", "GST_VIDEO_FORMAT_INFO_IS_GRAY", @@ -5349,11 +5422,14 @@ "GST_VIDEO_FORMAT_IYU1", "GST_VIDEO_FORMAT_IYU2", "GST_VIDEO_FORMAT_NV12", + "GST_VIDEO_FORMAT_NV12_10BE_8L128", "GST_VIDEO_FORMAT_NV12_10LE32", "GST_VIDEO_FORMAT_NV12_10LE40", + "GST_VIDEO_FORMAT_NV12_16L32S", "GST_VIDEO_FORMAT_NV12_32L32", "GST_VIDEO_FORMAT_NV12_4L4", "GST_VIDEO_FORMAT_NV12_64Z32", + "GST_VIDEO_FORMAT_NV12_8L128", "GST_VIDEO_FORMAT_NV16", "GST_VIDEO_FORMAT_NV16_10LE32", "GST_VIDEO_FORMAT_NV21", @@ -5429,6 +5505,7 @@ "GST_VIDEO_FRAME_FLAG_TOP_FIELD", "GST_VIDEO_FRAME_FORMAT", "GST_VIDEO_FRAME_HEIGHT", + "GST_VIDEO_FRAME_INIT", "GST_VIDEO_FRAME_IS_BOTTOM_FIELD", "GST_VIDEO_FRAME_IS_INTERLACED", "GST_VIDEO_FRAME_IS_ONEFIELD", @@ -5598,6 +5675,8 @@ "GST_VIDEO_SCALER_FLAG_INTERLACED", "GST_VIDEO_SCALER_FLAG_NONE", "GST_VIDEO_SCALER_OPT_DITHER_METHOD", + "GST_VIDEO_SEI_USER_DATA_UNREGISTERED_META_API_TYPE", + "GST_VIDEO_SEI_USER_DATA_UNREGISTERED_META_INFO", "GST_VIDEO_SINK_CAST", "GST_VIDEO_SINK_HEIGHT", "GST_VIDEO_SINK_PAD", @@ -5823,6 +5902,7 @@ "GST_WEBRTC_ERROR_FINGERPRINT_FAILURE", "GST_WEBRTC_ERROR_HARDWARE_ENCODER_NOT_AVAILABLE", "GST_WEBRTC_ERROR_INTERNAL_FAILURE", + "GST_WEBRTC_ERROR_INVALID_MODIFICATION", "GST_WEBRTC_ERROR_INVALID_STATE", "GST_WEBRTC_ERROR_SCTP_FAILURE", "GST_WEBRTC_ERROR_SDP_SYNTAX_ERROR", @@ -6040,6 +6120,7 @@ "GstAV1DecoderClass::decode_tile", "GstAV1DecoderClass::duplicate_picture", "GstAV1DecoderClass::end_picture", + "GstAV1DecoderClass::get_preferred_output_delay", "GstAV1DecoderClass::new_picture", "GstAV1DecoderClass::new_sequence", "GstAV1DecoderClass::output_picture", @@ -6172,6 +6253,20 @@ "GstAccurip:last-track", "GstAdapter", "GstAdaptiveDemux", + "GstAdaptiveDemux2", + "GstAdaptiveDemux2:bandwidth-target-ratio", + "GstAdaptiveDemux2:connection-bitrate", + "GstAdaptiveDemux2:connection-speed", + "GstAdaptiveDemux2:current-bandwidth", + "GstAdaptiveDemux2:current-level-time-audio", + "GstAdaptiveDemux2:current-level-time-video", + "GstAdaptiveDemux2:high-watermark-fragments", + "GstAdaptiveDemux2:high-watermark-time", + "GstAdaptiveDemux2:low-watermark-fragments", + "GstAdaptiveDemux2:low-watermark-time", + "GstAdaptiveDemux2:max-bitrate", + "GstAdaptiveDemux2:max-buffering-time", + "GstAdaptiveDemux2:min-bitrate", "GstAdaptiveDemuxClass", "GstAdaptiveDemuxStream", "GstAdaptiveDemuxStreamFragment", @@ -6324,6 +6419,43 @@ "GstAlsaSrc:device", "GstAlsaSrc:device-name", "GstAlsaSrc:use-driver-timestamps", + "GstAmfEncoder", + "GstAmfH264Enc!sink", + "GstAmfH264Enc!src", + "GstAmfH264EncPreset", + "GstAmfH264EncPreset::balanced", + "GstAmfH264EncPreset::default", + "GstAmfH264EncPreset::quality", + "GstAmfH264EncPreset::speed", + "GstAmfH264EncRateControl", + "GstAmfH264EncRateControl::cbr", + "GstAmfH264EncRateControl::cqp", + "GstAmfH264EncRateControl::default", + "GstAmfH264EncRateControl::lcvbr", + "GstAmfH264EncRateControl::vbr", + "GstAmfH264EncUsage", + "GstAmfH264EncUsage::low-latency", + "GstAmfH264EncUsage::transcoding", + "GstAmfH264EncUsage::ultra-low-latency", + "GstAmfH264EncUsage::webcam", + "GstAmfH265Enc!sink", + "GstAmfH265Enc!src", + "GstAmfH265EncPreset", + "GstAmfH265EncPreset::balanced", + "GstAmfH265EncPreset::default", + "GstAmfH265EncPreset::quality", + "GstAmfH265EncPreset::speed", + "GstAmfH265EncRateControl", + "GstAmfH265EncRateControl::cbr", + "GstAmfH265EncRateControl::cqp", + "GstAmfH265EncRateControl::default", + "GstAmfH265EncRateControl::lcvbr", + "GstAmfH265EncRateControl::vbr", + "GstAmfH265EncUsage", + "GstAmfH265EncUsage::low-latency", + "GstAmfH265EncUsage::transcoding", + "GstAmfH265EncUsage::ultra-low-latency", + "GstAmfH265EncUsage::webcam", "GstAmrParse", "GstAmrParse!sink", "GstAmrParse!src", @@ -7630,6 +7762,7 @@ "GstBufferForeachMetaFunc", "GstBufferList", "GstBufferListFunc", + "GstBufferMapInfo", "GstBufferPool", "GstBufferPool.flushing", "GstBufferPool.object", @@ -8001,6 +8134,7 @@ "GstCodecAlphaDemux!alpha", "GstCodecAlphaDemux!sink", "GstCodecAlphaDemux!src", + "GstCodecTimestamper", "GstCollectData", "GstCollectData.ABI.abi.dts", "GstCollectData.buffer", @@ -8139,13 +8273,41 @@ "GstCpuReport!sink", "GstCpuReport!src", "GstCtType", + "GstCudaAllocator", + "GstCudaAllocator.parent", + "GstCudaAllocatorClass.parent_class", "GstCudaBaseFilter", "GstCudaBaseTransform", "GstCudaBaseTransform:cuda-device-id", + "GstCudaBufferCopyType", + "GstCudaBufferPool", + "GstCudaBufferPool.context", + "GstCudaBufferPool.parent", + "GstCudaBufferPool.priv", + "GstCudaBufferPoolClass.parent_class", + "GstCudaContext", + "GstCudaContext.object", + "GstCudaContext:cuda-device-id", + "GstCudaContextClass.parent_class", "GstCudaConvert!sink", "GstCudaConvert!src", "GstCudaDownload!sink", "GstCudaDownload!src", + "GstCudaGraphicsResource", + "GstCudaGraphicsResource.cuda_context", + "GstCudaGraphicsResource.flags", + "GstCudaGraphicsResource.graphics_context", + "GstCudaGraphicsResource.mapped", + "GstCudaGraphicsResource.registered", + "GstCudaGraphicsResource.resource", + "GstCudaGraphicsResource.type", + "GstCudaGraphicsResourceType", + "GstCudaMemory", + "GstCudaMemory.context", + "GstCudaMemory.info", + "GstCudaMemory.mem", + "GstCudaMemoryTransfer", + "GstCudaQuarkId", "GstCudaScale!sink", "GstCudaScale!src", "GstCudaUpload!sink", @@ -8552,6 +8714,10 @@ "GstDashDemux!sink", "GstDashDemux!subtitle_%02u", "GstDashDemux!video_%02u", + "GstDashDemux2!audio_%02u", + "GstDashDemux2!sink", + "GstDashDemux2!subtitle_%02u", + "GstDashDemux2!video_%02u", "GstDashDemux:bandwidth-usage", "GstDashDemux:max-bitrate", "GstDashDemux:max-buffering-time", @@ -8666,6 +8832,10 @@ "GstDecklinkKeyerMode::external", "GstDecklinkKeyerMode::internal", "GstDecklinkKeyerMode::off", + "GstDecklinkMappingFormat", + "GstDecklinkMappingFormat::default", + "GstDecklinkMappingFormat::level-a", + "GstDecklinkMappingFormat::level-b", "GstDecklinkModes", "GstDecklinkModes::1080i50", "GstDecklinkModes::1080i5994", @@ -8697,9 +8867,33 @@ "GstDecklinkModes::2kdcip50", "GstDecklinkModes::2kdcip5994", "GstDecklinkModes::2kdcip60", + "GstDecklinkModes::4kdcip2398", + "GstDecklinkModes::4kdcip24", + "GstDecklinkModes::4kdcip25", + "GstDecklinkModes::4kdcip2997", + "GstDecklinkModes::4kdcip30", + "GstDecklinkModes::4kdcip50", + "GstDecklinkModes::4kdcip5994", + "GstDecklinkModes::4kdcip60", "GstDecklinkModes::720p50", "GstDecklinkModes::720p5994", "GstDecklinkModes::720p60", + "GstDecklinkModes::8kdcip2398", + "GstDecklinkModes::8kdcip24", + "GstDecklinkModes::8kdcip25", + "GstDecklinkModes::8kdcip2997", + "GstDecklinkModes::8kdcip30", + "GstDecklinkModes::8kdcip50", + "GstDecklinkModes::8kdcip5994", + "GstDecklinkModes::8kdcip60", + "GstDecklinkModes::8kp2398", + "GstDecklinkModes::8kp24", + "GstDecklinkModes::8kp25", + "GstDecklinkModes::8kp2997", + "GstDecklinkModes::8kp30", + "GstDecklinkModes::8kp50", + "GstDecklinkModes::8kp5994", + "GstDecklinkModes::8kp60", "GstDecklinkModes::auto", "GstDecklinkModes::ntsc", "GstDecklinkModes::ntsc-p", @@ -10271,6 +10465,10 @@ "GstGLVideoMixerPad:blend-function-dst-rgb", "GstGLVideoMixerPad:blend-function-src-alpha", "GstGLVideoMixerPad:blend-function-src-rgb", + "GstGLVideoMixerPad:crop-bottom", + "GstGLVideoMixerPad:crop-left", + "GstGLVideoMixerPad:crop-right", + "GstGLVideoMixerPad:crop-top", "GstGLVideoMixerPad:height", "GstGLVideoMixerPad:width", "GstGLVideoMixerPad:xpos", @@ -10442,9 +10640,11 @@ "GstGtkGLSink!sink", "GstGtkSink", "GstGtkSink!sink", + "GstGtkWaylandSink!sink", "GstH263Parse", "GstH263Parse!sink", "GstH263Parse!src", + "GstH264BitWriterResult", "GstH264BufferingPeriod", "GstH264ClockTimestamp", "GstH264ContentLightLevel", @@ -10467,6 +10667,7 @@ "GstH264DecoderClass::output_picture", "GstH264DecoderClass::start_picture", "GstH264DecoderCompliance", + "GstH264DecoderConfigRecord", "GstH264Dpb", "GstH264DpbBumpMode", "GstH264FramePacking", @@ -10540,7 +10741,11 @@ "GstH264SliceHdr", "GstH264SliceType", "GstH264StereoVideoInfo", + "GstH264Timestamper!sink", + "GstH264Timestamper!src", + "GstH264UserDataUnregistered", "GstH264VUIParams", + "GstH265BitWriterResult", "GstH265BufferingPeriod", "GstH265ContentLightLevel", "GstH265Decoder", @@ -10553,6 +10758,7 @@ "GstH265DecoderClass.start_picture", "GstH265DecoderClass::decode_slice", "GstH265DecoderClass::end_picture", + "GstH265DecoderClass::get_preferred_output_delay", "GstH265DecoderClass::new_picture", "GstH265DecoderClass::new_sequence", "GstH265DecoderClass::output_picture", @@ -10615,6 +10821,8 @@ "GstH265SliceType", "GstH265SubLayerHRDParams", "GstH265TimeCode", + "GstH265Timestamper!sink", + "GstH265Timestamper!src", "GstH265VPS", "GstH265VUIParams", "GstHDV1394Src", @@ -10627,6 +10835,10 @@ "GstHLSDemux", "GstHLSDemux!sink", "GstHLSDemux!src_%u", + "GstHLSDemux2!audio_%02u", + "GstHLSDemux2!sink", + "GstHLSDemux2!subtitle_%02u", + "GstHLSDemux2!video_%02u", "GstHanddetect", "GstHanddetect!sink", "GstHanddetect!src", @@ -11313,6 +11525,7 @@ "GstMemoryIsSpanFunction", "GstMemoryMapFullFunction", "GstMemoryMapFunction", + "GstMemoryMapInfo", "GstMemoryShareFunction", "GstMemoryUnmapFullFunction", "GstMemoryUnmapFunction", @@ -12120,6 +12333,10 @@ "GstMssDemux!audio_%02u", "GstMssDemux!sink", "GstMssDemux!video_%02u", + "GstMssDemux2!audio_%02u", + "GstMssDemux2!sink", + "GstMssDemux2!subtitle_%02u", + "GstMssDemux2!video_%02u", "GstMssDemux:max-queue-size-buffers", "GstMuLawDec", "GstMuLawDec!sink", @@ -12290,10 +12507,11 @@ "GstNavigationEventType", "GstNavigationInterface.iface", "GstNavigationInterface.send_event", - "GstNavigationInterface::send_event", "GstNavigationInterface.send_event_simple", + "GstNavigationInterface::send_event", "GstNavigationInterface::send_event_simple", "GstNavigationMessageType", + "GstNavigationModifierType", "GstNavigationQueryType", "GstNavigationtest", "GstNavigationtest!sink", @@ -15464,12 +15682,12 @@ "GstShout2send:port", "GstShout2send:protocol", "GstShout2send:public", + "GstShout2send:send-title-info", "GstShout2send:streamname", "GstShout2send:timeout", "GstShout2send:url", - "GstShout2send:username", - "GstShout2send:send-title-info", "GstShout2send:user-agent", + "GstShout2send:username", "GstSidClock", "GstSidClock::ntsc", "GstSidClock::pal", @@ -16065,6 +16283,7 @@ "GstTimeOverlayTimeLine", "GstTimeOverlayTimeLine::buffer-time", "GstTimeOverlayTimeLine::elapsed-running-time", + "GstTimeOverlayTimeLine::reference-timestamp", "GstTimeOverlayTimeLine::running-time", "GstTimeOverlayTimeLine::stream-time", "GstTimeOverlayTimeLine::time-code", @@ -16606,6 +16825,7 @@ "GstVPXEncTuning", "GstVPXEncTuning::psnr", "GstVPXEncTuning::ssim", + "GstVaAllocator", "GstVaBaseTransform", "GstVaDeinterlace!sink", "GstVaDeinterlace!src", @@ -16613,12 +16833,25 @@ "GstVaDeinterlaceMethods::adaptive", "GstVaDeinterlaceMethods::bob", "GstVaDeinterlaceMethods::compensated", + "GstVaDisplay", + "GstVaDisplay.parent", + "GstVaDisplay:description", + "GstVaDisplay:va-display", + "GstVaDisplayClass.parent_class", + "GstVaDisplayClass::create_va_display", + "GstVaDisplayDrm", + "GstVaDisplayDrm:path", + "GstVaDisplayWrapped", + "GstVaDmabufAllocator", + "GstVaFeature", "GstVaH264Dec!sink", "GstVaH264Dec!src", "GstVaH265Dec!sink", "GstVaH265Dec!src", + "GstVaImplementation", "GstVaMpeg2dec!sink", "GstVaMpeg2dec!src", + "GstVaPool", "GstVaPostProc!sink", "GstVaPostProc!src", "GstVaVp8dec!sink", @@ -17267,6 +17500,8 @@ "GstVideoConvert:n-threads", "GstVideoConvert:primaries-mode", "GstVideoConvertSampleCallback", + "GstVideoConvertScale!sink", + "GstVideoConvertScale!src", "GstVideoConverter", "GstVideoCrop", "GstVideoCrop!sink", @@ -17614,6 +17849,11 @@ "GstVideoResampler.taps", "GstVideoResamplerFlags", "GstVideoResamplerMethod", + "GstVideoSEIUserDataUnregisteredMeta", + "GstVideoSEIUserDataUnregisteredMeta.data", + "GstVideoSEIUserDataUnregisteredMeta.meta", + "GstVideoSEIUserDataUnregisteredMeta.size", + "GstVideoSEIUserDataUnregisteredMeta.uuid", "GstVideoScale", "GstVideoScale!sink", "GstVideoScale!src", @@ -18180,6 +18420,8 @@ "GstVulkanMemoryAllocator", "GstVulkanMemoryAllocator.parent", "GstVulkanMemoryAllocatorClass.parent_class", + "GstVulkanOverlayCompositor!sink", + "GstVulkanOverlayCompositor!src", "GstVulkanPhysicalDevice", "GstVulkanPhysicalDevice.device", "GstVulkanPhysicalDevice.device_index", @@ -18201,6 +18443,8 @@ "GstVulkanQueue.parent", "GstVulkanQueue.queue", "GstVulkanQueueClass.parent_class", + "GstVulkanShaderSpv!sink", + "GstVulkanShaderSpv!src", "GstVulkanSink", "GstVulkanSink!sink", "GstVulkanSink:device", @@ -18488,9 +18732,51 @@ "GstWebRTCDataChannelState", "GstWebRTCError", "GstWebRTCFECType", + "GstWebRTCICE", + "GstWebRTCICE._gst_reserved", + "GstWebRTCICE.ice_connection_state", + "GstWebRTCICE.ice_gathering_state", + "GstWebRTCICE.max_rtp_port", + "GstWebRTCICE.min_rtp_port", + "GstWebRTCICE.parent", + "GstWebRTCICE::add-local-ip-address", + "GstWebRTCICE:max-rtp-port", + "GstWebRTCICE:min-rtp-port", + "GstWebRTCICECandidateStats", + "GstWebRTCICECandidateStats._gst_reserved", + "GstWebRTCICECandidateStats.ipaddr", + "GstWebRTCICECandidateStats.port", + "GstWebRTCICECandidateStats.prio", + "GstWebRTCICECandidateStats.proto", + "GstWebRTCICECandidateStats.relay_proto", + "GstWebRTCICECandidateStats.stream_id", + "GstWebRTCICECandidateStats.type", + "GstWebRTCICECandidateStats.url", + "GstWebRTCICEClass._gst_reserved", + "GstWebRTCICEClass.parent_class", + "GstWebRTCICEClass::add_candidate", + "GstWebRTCICEClass::add_stream", + "GstWebRTCICEClass::add_turn_server", + "GstWebRTCICEClass::find_transport", + "GstWebRTCICEClass::gather_candidates", + "GstWebRTCICEClass::get_is_controller", + "GstWebRTCICEClass::get_local_candidates", + "GstWebRTCICEClass::get_remote_candidates", + "GstWebRTCICEClass::get_selected_pair", + "GstWebRTCICEClass::get_stun_server", + "GstWebRTCICEClass::get_turn_server", + "GstWebRTCICEClass::set_force_relay", + "GstWebRTCICEClass::set_is_controller", + "GstWebRTCICEClass::set_local_credentials", + "GstWebRTCICEClass::set_on_ice_candidate", + "GstWebRTCICEClass::set_remote_credentials", + "GstWebRTCICEClass::set_stun_server", + "GstWebRTCICEClass::set_tos", + "GstWebRTCICEClass::set_turn_server", "GstWebRTCICEComponent", "GstWebRTCICEConnectionState", "GstWebRTCICEGatheringState", + "GstWebRTCICEOnCandidateFunc", "GstWebRTCICERole", "GstWebRTCICEStream", "GstWebRTCICEStream.parent", @@ -19470,6 +19756,18 @@ "_GstH264DecRefPicMarking.n_ref_pic_marking", "_GstH264DecRefPicMarking.no_output_of_prior_pics_flag", "_GstH264DecRefPicMarking.ref_pic_marking", + "_GstH264DecoderConfigRecord.bit_depth_chroma_minus8", + "_GstH264DecoderConfigRecord.bit_depth_luma_minus8", + "_GstH264DecoderConfigRecord.chroma_format", + "_GstH264DecoderConfigRecord.chroma_format_present", + "_GstH264DecoderConfigRecord.configuration_version", + "_GstH264DecoderConfigRecord.length_size_minus_one", + "_GstH264DecoderConfigRecord.level_indication", + "_GstH264DecoderConfigRecord.pps", + "_GstH264DecoderConfigRecord.profile_compatibility", + "_GstH264DecoderConfigRecord.profile_indication", + "_GstH264DecoderConfigRecord.sps", + "_GstH264DecoderConfigRecord.sps_ext", "_GstH264FramePacking.content_interpretation_type", "_GstH264FramePacking.current_frame_is_frame0_flag", "_GstH264FramePacking.field_views_flag", @@ -19594,6 +19892,7 @@ "_GstH264SEIMessage.payload.registered_user_data", "_GstH264SEIMessage.payload.stereo_video_info", "_GstH264SEIMessage.payload.unhandled_payload", + "_GstH264SEIMessage.payload.user_data_unregistered", "_GstH264SEIMessage.payloadType", "_GstH264SEIUnhandledPayload.data", "_GstH264SEIUnhandledPayload.payloadType", @@ -19713,6 +20012,9 @@ "_GstH264StereoVideoInfo.next_frame_is_second_view_flag", "_GstH264StereoVideoInfo.right_view_self_contained_flag", "_GstH264StereoVideoInfo.top_field_is_left_view_flag", + "_GstH264UserDataUnregistered.data", + "_GstH264UserDataUnregistered.size", + "_GstH264UserDataUnregistered.uuid", "_GstH264VUIParams.aspect_ratio_idc", "_GstH264VUIParams.aspect_ratio_info_present_flag", "_GstH264VUIParams.bitstream_restriction_flag", @@ -19841,6 +20143,7 @@ "_GstH265PPS.slice_chroma_qp_offsets_present_flag", "_GstH265PPS.slice_segment_header_extension_present_flag", "_GstH265PPS.sps", + "_GstH265PPS.sps_id", "_GstH265PPS.tc_offset_div2", "_GstH265PPS.tiles_enabled_flag", "_GstH265PPS.transform_skip_enabled_flag", @@ -20007,6 +20310,7 @@ "_GstH265SPS.used_by_curr_pic_lt_sps_flag", "_GstH265SPS.valid", "_GstH265SPS.vps", + "_GstH265SPS.vps_id", "_GstH265SPS.vui_parameters_present_flag", "_GstH265SPS.vui_params", "_GstH265SPS.width", @@ -20064,6 +20368,7 @@ "_GstH265SliceHdr.first_slice_segment_in_pic_flag", "_GstH265SliceHdr.five_minus_max_num_merge_cand", "_GstH265SliceHdr.header_size", + "_GstH265SliceHdr.long_term_ref_pic_set_size", "_GstH265SliceHdr.loop_filter_across_slices_enabled_flag", "_GstH265SliceHdr.lt_idx_sps", "_GstH265SliceHdr.mvd_l1_zero_flag", @@ -20174,6 +20479,7 @@ "_GstH265VUIParams.overscan_info_present_flag", "_GstH265VUIParams.par_d", "_GstH265VUIParams.par_n", + "_GstH265VUIParams.parsed", "_GstH265VUIParams.poc_proportional_to_timing_flag", "_GstH265VUIParams.restricted_ref_pic_lists_flag", "_GstH265VUIParams.sar_height", @@ -21031,6 +21337,37 @@ "alsasrc:device", "alsasrc:device-name", "alsasrc:use-driver-timestamps", + "amfh264enc", + "amfh264enc:adapter-luid", + "amfh264enc:aud", + "amfh264enc:bitrate", + "amfh264enc:cabac", + "amfh264enc:gop-size", + "amfh264enc:max-bitrate", + "amfh264enc:max-qp", + "amfh264enc:min-qp", + "amfh264enc:preset", + "amfh264enc:qp-i", + "amfh264enc:qp-p", + "amfh264enc:rate-control", + "amfh264enc:ref-frames", + "amfh264enc:usage", + "amfh265enc", + "amfh265enc:adapter-luid", + "amfh265enc:aud", + "amfh265enc:bitrate", + "amfh265enc:gop-size", + "amfh265enc:max-bitrate", + "amfh265enc:max-qp-i", + "amfh265enc:max-qp-p", + "amfh265enc:min-qp-i", + "amfh265enc:min-qp-p", + "amfh265enc:preset", + "amfh265enc:qp-i", + "amfh265enc:qp-p", + "amfh265enc:rate-control", + "amfh265enc:ref-frames", + "amfh265enc:usage", "amrnbdec", "amrnbdec:variant", "amrnbenc", @@ -21184,6 +21521,7 @@ "audiocheblimit:type", "audioconvert", "audioconvert:dithering", + "audioconvert:dithering-threshold", "audioconvert:mix-matrix", "audioconvert:noise-shaping", "audiodynamic", @@ -32877,6 +33215,7 @@ "cc708overlay:window-h-pos", "cccombiner", "cccombiner:max-scheduled", + "cccombiner:output-padding", "cccombiner:schedule", "ccconverter", "ccconverter:cdp-mode", @@ -33171,6 +33510,12 @@ "d3dvideosink:force-aspect-ratio", "d3dvideosink:stream-stop-on-close", "dashdemux", + "dashdemux2", + "dashdemux2:max-bitrate", + "dashdemux2:max-video-framerate", + "dashdemux2:max-video-height", + "dashdemux2:max-video-width", + "dashdemux2:presentation-delay", "dashdemux:bandwidth-usage", "dashdemux:max-bitrate", "dashdemux:max-buffering-time", @@ -33234,6 +33579,7 @@ "decklinkvideosink:hw-serial-number", "decklinkvideosink:keyer-level", "decklinkvideosink:keyer-mode", + "decklinkvideosink:mapping-format", "decklinkvideosink:mode", "decklinkvideosink:profile", "decklinkvideosink:timecode-format", @@ -35291,6 +35637,8 @@ "fail_unless_equals_uint64_hex", "fail_unless_message_error", "fakeaudiosink", + "fakeaudiosink::handoff", + "fakeaudiosink::preroll-handoff", "fakeaudiosink:async", "fakeaudiosink:blocksize", "fakeaudiosink:can-activate-pull", @@ -35347,6 +35695,8 @@ "fakesrc:sizetype", "fakesrc:sync", "fakevideosink", + "fakevideosink::handoff", + "fakevideosink::preroll-handoff", "fakevideosink:allocation-meta-flags", "fakevideosink:async", "fakevideosink:blocksize", @@ -37647,6 +37997,7 @@ "gst_buffer_add_video_overlay_composition_meta", "gst_buffer_add_video_region_of_interest_meta", "gst_buffer_add_video_region_of_interest_meta_id", + "gst_buffer_add_video_sei_user_data_unregistered_meta", "gst_buffer_add_video_time_code_meta", "gst_buffer_add_video_time_code_meta_full", "gst_buffer_append", @@ -37697,6 +38048,7 @@ "gst_buffer_get_video_overlay_composition_meta", "gst_buffer_get_video_region_of_interest_meta", "gst_buffer_get_video_region_of_interest_meta_id", + "gst_buffer_get_video_sei_user_data_unregistered_meta", "gst_buffer_get_video_time_code_meta", "gst_buffer_has_flags", "gst_buffer_insert_memory", @@ -37749,6 +38101,8 @@ "gst_buffer_pool_config_set_allocator", "gst_buffer_pool_config_set_gl_allocation_params", "gst_buffer_pool_config_set_params", + "gst_buffer_pool_config_set_va_alignment", + "gst_buffer_pool_config_set_va_allocation_params", "gst_buffer_pool_config_set_video_alignment", "gst_buffer_pool_config_validate_params", "gst_buffer_pool_get_config", @@ -38093,6 +38447,7 @@ "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_caps_from_mime_codec", "gst_codec_utils_caps_get_mime_codec", "gst_codec_utils_h264_caps_set_level_and_profile", "gst_codec_utils_h264_get_level", @@ -38149,6 +38504,7 @@ "gst_context_get_context_type", "gst_context_get_gl_display", "gst_context_get_structure", + "gst_context_get_va_display", "gst_context_get_vulkan_device", "gst_context_get_vulkan_display", "gst_context_get_vulkan_instance", @@ -38158,9 +38514,11 @@ "gst_context_is_writable", "gst_context_make_writable", "gst_context_new", + "gst_context_new_cuda_context", "gst_context_ref", "gst_context_replace", "gst_context_set_gl_display", + "gst_context_set_va_display", "gst_context_set_vulkan_device", "gst_context_set_vulkan_display", "gst_context_set_vulkan_instance", @@ -38177,6 +38535,32 @@ "gst_control_point_free", "gst_control_source_get_value", "gst_control_source_get_value_array", + "gst_cuda_allocator_alloc", + "gst_cuda_buffer_copy", + "gst_cuda_buffer_copy_type_to_string", + "gst_cuda_buffer_pool_new", + "gst_cuda_context_can_access_peer", + "gst_cuda_context_get_handle", + "gst_cuda_context_get_texture_alignment", + "gst_cuda_context_new", + "gst_cuda_context_new_wrapped", + "gst_cuda_context_pop", + "gst_cuda_context_push", + "gst_cuda_ensure_element_context", + "gst_cuda_graphics_resource_free", + "gst_cuda_graphics_resource_map", + "gst_cuda_graphics_resource_new", + "gst_cuda_graphics_resource_register_gl_buffer", + "gst_cuda_graphics_resource_unmap", + "gst_cuda_graphics_resource_unregister", + "gst_cuda_handle_context_query", + "gst_cuda_handle_set_context", + "gst_cuda_load_library", + "gst_cuda_memory_init_once", + "gst_cuda_nvrtc_compile", + "gst_cuda_nvrtc_load_library", + "gst_cuda_quark_from_id", + "gst_cuda_result", "gst_custom_meta_get_structure", "gst_custom_meta_has_name", "gst_data_queue_drop_head", @@ -38983,8 +39367,15 @@ "gst_glsl_version_to_string", "gst_guint64_to_gdouble", "gst_h263_parse", + "gst_h264_bit_writer_aud", + "gst_h264_bit_writer_convert_to_nal", + "gst_h264_bit_writer_pps", + "gst_h264_bit_writer_sei", + "gst_h264_bit_writer_slice_hdr", + "gst_h264_bit_writer_sps", "gst_h264_create_sei_memory", "gst_h264_create_sei_memory_avc", + "gst_h264_decoder_config_record_free", "gst_h264_decoder_get_picture", "gst_h264_decoder_set_process_ref_pic_lists", "gst_h264_dpb_add", @@ -39030,6 +39421,7 @@ "gst_h264_parser_identify_nalu_unchecked", "gst_h264_parser_insert_sei", "gst_h264_parser_insert_sei_avc", + "gst_h264_parser_parse_decoder_config_record", "gst_h264_parser_parse_nal", "gst_h264_parser_parse_pps", "gst_h264_parser_parse_sei", @@ -39050,6 +39442,13 @@ "gst_h264_sei_clear", "gst_h264_sps_clear", "gst_h264_video_calculate_framerate", + "gst_h265_bit_writer_aud", + "gst_h265_bit_writer_convert_to_nal", + "gst_h265_bit_writer_pps", + "gst_h265_bit_writer_sei", + "gst_h265_bit_writer_slice_hdr", + "gst_h265_bit_writer_sps", + "gst_h265_bit_writer_vps", "gst_h265_create_sei_memory", "gst_h265_create_sei_memory_hevc", "gst_h265_decoder_get_picture", @@ -39080,6 +39479,7 @@ "gst_h265_parse_sps", "gst_h265_parse_vps", "gst_h265_parser_free", + "gst_h265_parser_identify_and_split_nalu_hevc", "gst_h265_parser_identify_nalu", "gst_h265_parser_identify_nalu_hevc", "gst_h265_parser_identify_nalu_unchecked", @@ -39232,6 +39632,7 @@ "gst_install_plugins_sync", "gst_interpolation_control_source_new", "gst_is_caps_features", + "gst_is_cuda_memory", "gst_is_dmabuf_memory", "gst_is_fd_memory", "gst_is_gl_base_memory", @@ -39636,12 +40037,29 @@ "gst_mpegts_section_send_event", "gst_mpegts_section_unref", "gst_mpegts_t2_delivery_system_descriptor_free", + "gst_navigation_event_get_coordinates", "gst_navigation_event_get_type", + "gst_navigation_event_new_command", + "gst_navigation_event_new_key_press", + "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_move", + "gst_navigation_event_new_mouse_scroll", + "gst_navigation_event_new_touch_cancel", + "gst_navigation_event_new_touch_down", + "gst_navigation_event_new_touch_frame", + "gst_navigation_event_new_touch_motion", + "gst_navigation_event_new_touch_up", "gst_navigation_event_parse_command", "gst_navigation_event_parse_key_event", + "gst_navigation_event_parse_modifier_state", "gst_navigation_event_parse_mouse_button_event", "gst_navigation_event_parse_mouse_move_event", "gst_navigation_event_parse_mouse_scroll_event", + "gst_navigation_event_parse_touch_event", + "gst_navigation_event_parse_touch_up_event", + "gst_navigation_event_set_coordinates", "gst_navigation_message_get_type", "gst_navigation_message_new_angles_changed", "gst_navigation_message_new_commands_changed", @@ -39661,6 +40079,7 @@ "gst_navigation_query_set_commandsv", "gst_navigation_send_command", "gst_navigation_send_event", + "gst_navigation_send_event_simple", "gst_navigation_send_key_event", "gst_navigation_send_mouse_event", "gst_navigation_send_mouse_scroll_event", @@ -40237,6 +40656,7 @@ "gst_query_new_scheduling", "gst_query_new_seeking", "gst_query_new_segment", + "gst_query_new_selectable", "gst_query_new_uri", "gst_query_parse_accept_caps", "gst_query_parse_accept_caps_result", @@ -40263,6 +40683,7 @@ "gst_query_parse_scheduling", "gst_query_parse_seeking", "gst_query_parse_segment", + "gst_query_parse_selectable", "gst_query_parse_uri", "gst_query_parse_uri_redirection", "gst_query_parse_uri_redirection_permanent", @@ -40289,6 +40710,7 @@ "gst_query_set_scheduling", "gst_query_set_seeking", "gst_query_set_segment", + "gst_query_set_selectable", "gst_query_set_uri", "gst_query_set_uri_redirection", "gst_query_set_uri_redirection_permanent", @@ -40669,6 +41091,7 @@ "gst_rtsp_context_get_type", "gst_rtsp_context_pop_current", "gst_rtsp_context_push_current", + "gst_rtsp_context_set_token", "gst_rtsp_extension_after_send", "gst_rtsp_extension_before_send", "gst_rtsp_extension_configure_stream", @@ -41322,6 +41745,7 @@ "gst_structure_get_double", "gst_structure_get_enum", "gst_structure_get_field_type", + "gst_structure_get_flags", "gst_structure_get_flagset", "gst_structure_get_fraction", "gst_structure_get_int", @@ -41719,6 +42143,38 @@ "gst_util_uint64_scale_int_ceil", "gst_util_uint64_scale_int_round", "gst_util_uint64_scale_round", + "gst_va_allocator_alloc", + "gst_va_allocator_flush", + "gst_va_allocator_get_format", + "gst_va_allocator_new", + "gst_va_allocator_prepare_buffer", + "gst_va_allocator_set_format", + "gst_va_allocator_set_hacks", + "gst_va_allocator_setup_buffer", + "gst_va_buffer_create_aux_surface", + "gst_va_buffer_get_aux_surface", + "gst_va_buffer_get_surface", + "gst_va_context_query", + "gst_va_display_drm_new_from_path", + "gst_va_display_get_implementation", + "gst_va_display_get_va_dpy", + "gst_va_display_initialize", + "gst_va_display_wrapped_new", + "gst_va_dmabuf_allocator_flush", + "gst_va_dmabuf_allocator_get_format", + "gst_va_dmabuf_allocator_new", + "gst_va_dmabuf_allocator_prepare_buffer", + "gst_va_dmabuf_allocator_set_format", + "gst_va_dmabuf_allocator_setup_buffer", + "gst_va_dmabuf_memories_setup", + "gst_va_element_propagate_display_context", + "gst_va_ensure_element_data", + "gst_va_handle_context_query", + "gst_va_handle_set_context", + "gst_va_memory_get_surface", + "gst_va_pool_new", + "gst_va_pool_new_with_config", + "gst_va_pool_requires_video_meta", "gst_validate_abort", "gst_validate_action_get_clocktime", "gst_validate_action_get_scenario", @@ -41836,7 +42292,16 @@ "gst_validate_report_add_message", "gst_validate_report_add_repeated_report", "gst_validate_report_check_abort", + "gst_validate_report_get_dotfile_name", + "gst_validate_report_get_issue", "gst_validate_report_get_issue_id", + "gst_validate_report_get_level", + "gst_validate_report_get_message", + "gst_validate_report_get_reporter", + "gst_validate_report_get_reporter_name", + "gst_validate_report_get_reporting_level", + "gst_validate_report_get_timestamp", + "gst_validate_report_get_trace", "gst_validate_report_init", "gst_validate_report_level_from_name", "gst_validate_report_level_get_name", @@ -42024,6 +42489,7 @@ "gst_video_color_matrix_to_iso", "gst_video_color_primaries_from_iso", "gst_video_color_primaries_get_info", + "gst_video_color_primaries_is_equivalent", "gst_video_color_primaries_to_iso", "gst_video_color_range_offsets", "gst_video_color_transfer_decode", @@ -42032,6 +42498,7 @@ "gst_video_color_transfer_to_iso", "gst_video_colorimetry_from_string", "gst_video_colorimetry_is_equal", + "gst_video_colorimetry_is_equivalent", "gst_video_colorimetry_matches", "gst_video_colorimetry_to_string", "gst_video_content_light_level_add_to_caps", @@ -42046,6 +42513,8 @@ "gst_video_converter_frame_finish", "gst_video_converter_free", "gst_video_converter_get_config", + "gst_video_converter_get_in_info", + "gst_video_converter_get_out_info", "gst_video_converter_new", "gst_video_converter_new_with_pool", "gst_video_converter_set_config", @@ -42134,6 +42603,8 @@ "gst_video_format_get_info", "gst_video_format_get_palette", "gst_video_format_info_component", + "gst_video_format_info_extrapolate_stride", + "gst_video_format_info_get_tile_sizes", "gst_video_format_to_fourcc", "gst_video_format_to_string", "gst_video_formats_raw", @@ -42161,6 +42632,7 @@ "gst_video_info_to_caps", "gst_video_interlace_mode_from_string", "gst_video_interlace_mode_to_string", + "gst_video_is_common_aspect_ratio", "gst_video_make_raw_caps", "gst_video_make_raw_caps_with_features", "gst_video_mastering_display_info_add_to_caps", @@ -42241,6 +42713,9 @@ "gst_video_scaler_horizontal", "gst_video_scaler_new", "gst_video_scaler_vertical", + "gst_video_sei_user_data_unregistered_meta_api_get_type", + "gst_video_sei_user_data_unregistered_meta_get_info", + "gst_video_sei_user_data_unregistered_parse_precision_time_stamp", "gst_video_sink_center_rect", "gst_video_tile_get_index", "gst_video_time_code_add_frames", @@ -42512,11 +42987,16 @@ "gst_webrtc_dtls_transport_set_transport", "gst_webrtc_error_quark", "gst_webrtc_ice_add_candidate", + "gst_webrtc_ice_add_stream", "gst_webrtc_ice_add_turn_server", + "gst_webrtc_ice_candidate_stats_copy", + "gst_webrtc_ice_candidate_stats_free", + "gst_webrtc_ice_find_transport", "gst_webrtc_ice_gather_candidates", "gst_webrtc_ice_get_is_controller", "gst_webrtc_ice_get_local_candidates", "gst_webrtc_ice_get_remote_candidates", + "gst_webrtc_ice_get_selected_pair", "gst_webrtc_ice_get_stun_server", "gst_webrtc_ice_get_turn_server", "gst_webrtc_ice_set_force_relay", @@ -42547,6 +43027,9 @@ "gtkglsink", "gtkglsink:rotate-method", "gtksink", + "gtkwaylandsink", + "gtkwaylandsink:rotate-method", + "gtkwaylandsink:widget", "h-263-encoder-cmp-func", "h-263-encoder-cmp-func::bit", "h-263-encoder-cmp-func::chroma", @@ -42643,8 +43126,10 @@ "h264parse", "h264parse:config-interval", "h264parse:update-timecode", + "h264timestamper", "h265parse", "h265parse:config-interval", + "h265timestamper", "handdetect", "handdetect:ROI-HEIGHT", "handdetect:ROI-WIDTH", @@ -42667,6 +43152,8 @@ "hdv1394src:port", "hdv1394src:use-avc", "hlsdemux", + "hlsdemux2", + "hlsdemux2:start-bitrate", "hlssink", "hlssink2", "hlssink2::delete-fragment", @@ -42863,6 +43350,7 @@ "kmssink:display-height", "kmssink:display-width", "kmssink:driver-name", + "kmssink:fd", "kmssink:force-modesetting", "kmssink:plane-id", "kmssink:plane-properties", @@ -63253,6 +63741,7 @@ "msmpeg4v3-encoder-rc-strategy", "msmpeg4v3-encoder-rc-strategy::ffmpeg", "mssdemux", + "mssdemux2", "mssdemux:max-queue-size-buffers", "mulawdec", "mulawenc", @@ -63352,6 +63841,8 @@ "mxfmux", "name", "navigationtest", + "navigationtest:display-mouse", + "navigationtest:display-touch", "navseek", "navseek:hold-eos", "navseek:seek-offset", @@ -63698,6 +64189,7 @@ "plugin-a52dec", "plugin-aasink", "plugin-accurip", + "plugin-adaptivedemux2", "plugin-adder", "plugin-adpcmdec", "plugin-adpcmenc", @@ -63707,6 +64199,7 @@ "plugin-alpha", "plugin-alphacolor", "plugin-alsa", + "plugin-amfcodec", "plugin-amrnb", "plugin-amrwbdec", "plugin-aom", @@ -63745,6 +64238,7 @@ "plugin-chromaprint", "plugin-closedcaption", "plugin-codecalpha", + "plugin-codectimestamper", "plugin-coloreffects", "plugin-colormanagement", "plugin-compositor", @@ -63803,6 +64297,7 @@ "plugin-gs", "plugin-gsm", "plugin-gtk", + "plugin-gtkwayland", "plugin-hls", "plugin-icydemux", "plugin-id3demux", @@ -63881,6 +64376,7 @@ "plugin-pulseaudio", "plugin-qmlgl", "plugin-qroverlay", + "plugin-qsv", "plugin-rawparse", "plugin-realmedia", "plugin-removesilence", @@ -63940,6 +64436,7 @@ "plugin-video4linux2", "plugin-videobox", "plugin-videoconvert", + "plugin-videoconvertscale", "plugin-videocrop", "plugin-videofilter", "plugin-videofiltersbad", @@ -64210,6 +64707,7 @@ "rfbsrc:password", "rfbsrc:port", "rfbsrc:shared", + "rfbsrc:uri", "rfbsrc:use-copyrect", "rfbsrc:version", "rfbsrc:view-only", @@ -64406,6 +64904,7 @@ "rtpbin::request-rtp-decoder", "rtpbin::request-rtp-encoder", "rtpbin::reset-sync", + "rtpbin:add-reference-timestamp-meta", "rtpbin:autoremove", "rtpbin:buffer-mode", "rtpbin:do-lost", @@ -64422,6 +64921,7 @@ "rtpbin:max-streams", "rtpbin:max-ts-offset", "rtpbin:max-ts-offset-adjustment", + "rtpbin:min-ts-offset", "rtpbin:ntp-sync", "rtpbin:ntp-time-source", "rtpbin:rfc7273-sync", @@ -64430,6 +64930,7 @@ "rtpbin:rtcp-sync-send-time", "rtpbin:rtp-profile", "rtpbin:sdes", + "rtpbin:ts-offset-smoothing-factor", "rtpbin:use-pipeline-clock", "rtpbvdepay", "rtpbvpay", @@ -64500,6 +65001,15 @@ "rtphdrextclientaudiolevel", "rtphdrextclientaudiolevel:vad", "rtphdrextcolorspace", + "rtphdrextmid", + "rtphdrextmid:mid", + "rtphdrextntp64", + "rtphdrextntp64:every-packet", + "rtphdrextntp64:interval", + "rtphdrextrepairedstreamid", + "rtphdrextrepairedstreamid:rid", + "rtphdrextstreamid", + "rtphdrextstreamid:rid", "rtphdrexttwcc", "rtphdrexttwcc:n-streams", "rtpilbcdepay", @@ -64515,6 +65025,7 @@ "rtpjitterbuffer::on-npt-stop", "rtpjitterbuffer::request-pt-map", "rtpjitterbuffer::set-active", + "rtpjitterbuffer:add-reference-timestamp-meta", "rtpjitterbuffer:do-lost", "rtpjitterbuffer:do-retransmission", "rtpjitterbuffer:drop-messages-interval", @@ -64540,6 +65051,7 @@ "rtpjitterbuffer:rtx-retry-timeout", "rtpjitterbuffer:rtx-stats-timeout", "rtpjitterbuffer:stats", + "rtpjitterbuffer:sync-interval", "rtpjitterbuffer:ts-offset", "rtpjpegdepay", "rtpjpegpay", @@ -64576,6 +65088,7 @@ "rtponviftimestamp:ntp-offset", "rtponviftimestamp:set-e-bit", "rtponviftimestamp:set-t-bit", + "rtponviftimestamp:use-reference-timestamps", "rtpopusdepay", "rtpopuspay", "rtpopuspay:dtx", @@ -64606,11 +65119,16 @@ "rtprtxqueue:max-size-time", "rtprtxqueue:requests", "rtprtxreceive", + "rtprtxreceive::add-extension", + "rtprtxreceive::clear-extensions", "rtprtxreceive:num-rtx-assoc-packets", "rtprtxreceive:num-rtx-packets", "rtprtxreceive:num-rtx-requests", "rtprtxreceive:payload-type-map", + "rtprtxreceive:ssrc-map", "rtprtxsend", + "rtprtxsend::add-extension", + "rtprtxsend::clear-extensions", "rtprtxsend:clock-rate-map", "rtprtxsend:max-size-packets", "rtprtxsend:max-size-time", @@ -64770,6 +65288,7 @@ "rtspsrc::request-rtcp-key", "rtspsrc::select-stream", "rtspsrc::set-parameter", + "rtspsrc:add-reference-timestamp-meta", "rtspsrc:backchannel", "rtspsrc:buffer-mode", "rtspsrc:connection-speed", @@ -64933,12 +65452,12 @@ "shout2send:port", "shout2send:protocol", "shout2send:public", + "shout2send:send-title-info", "shout2send:streamname", "shout2send:timeout", "shout2send:url", - "shout2send:username", - "shout2send:send-title-info", "shout2send:user-agent", + "shout2send:username", "siddec", "siddec:blocksize", "siddec:clock", @@ -65288,6 +65807,7 @@ "testsink:md5", "testsink:timestamp-deviation", "testsrcbin", + "testsrcbin:expose-sources-async", "testsrcbin:stream-types", "textoverlay", "textrender", @@ -65340,6 +65860,7 @@ "timeoverlay", "timeoverlay:datetime-epoch", "timeoverlay:datetime-format", + "timeoverlay:reference-timestamp-caps", "timeoverlay:show-times-as-dates", "timeoverlay:time-mode", "tinyalsasink", @@ -65480,6 +66001,7 @@ "uridecodebin:download", "uridecodebin:expose-all-streams", "uridecodebin:force-sw-decoders", + "uridecodebin:post-stream-topology", "uridecodebin:ring-buffer-max-size", "uridecodebin:source", "uridecodebin:subtitle-encoding", @@ -65581,6 +66103,11 @@ "v4l2src::prepare-format", "v4l2src:brightness", "v4l2src:contrast", + "v4l2src:crop-bottom", + "v4l2src:crop-bounds", + "v4l2src:crop-left", + "v4l2src:crop-right", + "v4l2src:crop-top", "v4l2src:device", "v4l2src:device-fd", "v4l2src:device-name", @@ -65749,6 +66276,22 @@ "videoconvert:matrix-mode", "videoconvert:n-threads", "videoconvert:primaries-mode", + "videoconvertscale", + "videoconvertscale:add-borders", + "videoconvertscale:alpha-mode", + "videoconvertscale:alpha-value", + "videoconvertscale:chroma-mode", + "videoconvertscale:chroma-resampler", + "videoconvertscale:dither", + "videoconvertscale:dither-quantization", + "videoconvertscale:envelope", + "videoconvertscale:gamma-mode", + "videoconvertscale:matrix-mode", + "videoconvertscale:method", + "videoconvertscale:n-threads", + "videoconvertscale:primaries-mode", + "videoconvertscale:sharpen", + "videoconvertscale:sharpness", "videocrop", "videocrop:bottom", "videocrop:left", @@ -65780,6 +66323,7 @@ "videorate:drop-only", "videorate:duplicate", "videorate:in", + "videorate:max-closing-segment-duplication-duration", "videorate:max-duplication-time", "videorate:max-rate", "videorate:new-pref", @@ -65896,6 +66440,12 @@ "vulkancolorconvert", "vulkandownload", "vulkanimageidentity", + "vulkanoverlaycompositor", + "vulkanshaderspv", + "vulkanshaderspv:fragment", + "vulkanshaderspv:fragment-location", + "vulkanshaderspv:vertex", + "vulkanshaderspv:vertex-location", "vulkansink", "vulkansink:device", "vulkansink:force-aspect-ratio", @@ -65959,6 +66509,8 @@ "waylandsink", "waylandsink:display", "waylandsink:fullscreen", + "waylandsink:render-rectangle", + "waylandsink:rotate-method", "webmmux", "webpdec", "webpdec:bypass-filtering", @@ -65983,6 +66535,8 @@ "webrtcbin::on-ice-candidate", "webrtcbin::on-negotiation-needed", "webrtcbin::on-new-transceiver", + "webrtcbin::prepare-data-channel", + "webrtcbin::request-aux-sender", "webrtcbin::set-local-description", "webrtcbin::set-remote-description", "webrtcbin:bundle-policy", @@ -66199,4 +66753,4 @@ "zbar:message", "zebrastripe", "zebrastripe:threshold" -] +] \ 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 0fdd235..0f6abf4 100644 --- a/subprojects/gst-docs/symbols/symbols_version.txt +++ b/subprojects/gst-docs/symbols/symbols_version.txt @@ -1 +1 @@ -1.20 \ No newline at end of file +1.21 \ No newline at end of file diff --git a/subprojects/gst-editing-services/ChangeLog b/subprojects/gst-editing-services/ChangeLog index 1c7021b..400b45f 100644 --- a/subprojects/gst-editing-services/ChangeLog +++ b/subprojects/gst-editing-services/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-editing-services.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gst-editing-services/NEWS b/subprojects/gst-editing-services/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-editing-services/NEWS +++ b/subprojects/gst-editing-services/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-editing-services/RELEASE b/subprojects/gst-editing-services/RELEASE index e970304..84af768 100644 --- a/subprojects/gst-editing-services/RELEASE +++ b/subprojects/gst-editing-services/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-editing-services 1.20.0. +This is GStreamer gst-editing-services 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-editing-services/gst-editing-services.doap b/subprojects/gst-editing-services/gst-editing-services.doap index 077c182..453f34a 100644 --- a/subprojects/gst-editing-services/gst-editing-services.doap +++ b/subprojects/gst-editing-services/gst-editing-services.doap @@ -32,6 +32,16 @@ GStreamer library for creating audio and video editors + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-editing-services/meson.build b/subprojects/gst-editing-services/meson.build index 79caed7..02e6735 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.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-examples/meson.build b/subprojects/gst-examples/meson.build index a924af9..6cb4f64 100644 --- a/subprojects/gst-examples/meson.build +++ b/subprojects/gst-examples/meson.build @@ -1,4 +1,4 @@ -project('gst-examples', 'c', version : '1.21.0.1', license : 'LGPL') +project('gst-examples', 'c', version : '1.21.1', license : 'LGPL') cc = meson.get_compiler('c') m_dep = cc.find_library('m', required : false) diff --git a/subprojects/gst-integration-testsuites/meson.build b/subprojects/gst-integration-testsuites/meson.build index f37b549..679e4fb 100644 --- a/subprojects/gst-integration-testsuites/meson.build +++ b/subprojects/gst-integration-testsuites/meson.build @@ -1 +1 @@ -project('gst-integration-testsuites', [], version: '1.21.0.1', meson_version : '>= 0.62', license: 'LGPL') +project('gst-integration-testsuites', [], version: '1.21.1', meson_version : '>= 0.62', license: 'LGPL') diff --git a/subprojects/gst-libav/ChangeLog b/subprojects/gst-libav/ChangeLog index ed6c094..57aac8f 100644 --- a/subprojects/gst-libav/ChangeLog +++ b/subprojects/gst-libav/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-libav.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-29 12:42:21 +0100 Tim-Philipp Müller * ext/libav/gstavauddec.c: diff --git a/subprojects/gst-libav/NEWS b/subprojects/gst-libav/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-libav/NEWS +++ b/subprojects/gst-libav/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-libav/RELEASE b/subprojects/gst-libav/RELEASE index dc40f3c..bff3a1b 100644 --- a/subprojects/gst-libav/RELEASE +++ b/subprojects/gst-libav/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-libav 1.20.0. +This is GStreamer gst-libav 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-libav/gst-libav.doap b/subprojects/gst-libav/gst-libav.doap index 50f7d81..75806fe 100644 --- a/subprojects/gst-libav/gst-libav.doap +++ b/subprojects/gst-libav/gst-libav.doap @@ -34,6 +34,16 @@ colorspace conversion elements. + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-libav/meson.build b/subprojects/gst-libav/meson.build index 661de7d..41fa130 100644 --- a/subprojects/gst-libav/meson.build +++ b/subprojects/gst-libav/meson.build @@ -1,5 +1,5 @@ project('gst-libav', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-omx/ChangeLog b/subprojects/gst-omx/ChangeLog index b571f0b..00ae1f1 100644 --- a/subprojects/gst-omx/ChangeLog +++ b/subprojects/gst-omx/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-omx.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gst-omx/NEWS b/subprojects/gst-omx/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-omx/NEWS +++ b/subprojects/gst-omx/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-omx/RELEASE b/subprojects/gst-omx/RELEASE index 3d51f2e6..c15ae00 100644 --- a/subprojects/gst-omx/RELEASE +++ b/subprojects/gst-omx/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-omx 1.20.0. +This is GStreamer gst-omx 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-omx/gst-omx.doap b/subprojects/gst-omx/gst-omx.doap index 9603983..411afbf 100644 --- a/subprojects/gst-omx/gst-omx.doap +++ b/subprojects/gst-omx/gst-omx.doap @@ -33,6 +33,16 @@ a basic collection of elements + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-omx/meson.build b/subprojects/gst-omx/meson.build index 05c4b68..9f9bfe0 100644 --- a/subprojects/gst-omx/meson.build +++ b/subprojects/gst-omx/meson.build @@ -1,5 +1,5 @@ project('gst-omx', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-bad/ChangeLog b/subprojects/gst-plugins-bad/ChangeLog index 78e182d..f578159 100644 --- a/subprojects/gst-plugins-bad/ChangeLog +++ b/subprojects/gst-plugins-bad/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-29 14:34:31 +0300 Sebastian Dröge * gst/gaudieffects/gstgaussblur.c: diff --git a/subprojects/gst-plugins-bad/NEWS b/subprojects/gst-plugins-bad/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-plugins-bad/NEWS +++ b/subprojects/gst-plugins-bad/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-bad/RELEASE b/subprojects/gst-plugins-bad/RELEASE index 2244892..7561065 100644 --- a/subprojects/gst-plugins-bad/RELEASE +++ b/subprojects/gst-plugins-bad/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-plugins-bad 1.20.0. +This is GStreamer gst-plugins-bad 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-plugins-bad/gst-plugins-bad.doap b/subprojects/gst-plugins-bad/gst-plugins-bad.doap index 3ce24dd..b3c89e1 100644 --- a/subprojects/gst-plugins-bad/gst-plugins-bad.doap +++ b/subprojects/gst-plugins-bad/gst-plugins-bad.doap @@ -35,6 +35,16 @@ real live maintainer, or some actual wide use. + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-plugins-bad/meson.build b/subprojects/gst-plugins-bad/meson.build index 8901992..3b8cdbe 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.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-base/ChangeLog b/subprojects/gst-plugins-base/ChangeLog index dbef781..9b1d097 100644 --- a/subprojects/gst-plugins-base/ChangeLog +++ b/subprojects/gst-plugins-base/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-plugins-base.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-10-01 02:33:49 +1000 Jan Schmidt * gst/playback/gstplaysink.c: diff --git a/subprojects/gst-plugins-base/NEWS b/subprojects/gst-plugins-base/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-plugins-base/NEWS +++ b/subprojects/gst-plugins-base/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-base/RELEASE b/subprojects/gst-plugins-base/RELEASE index 7772ac9..5f5444d 100644 --- a/subprojects/gst-plugins-base/RELEASE +++ b/subprojects/gst-plugins-base/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-plugins-base 1.20.0. +This is GStreamer gst-plugins-base 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-plugins-base/gst-plugins-base.doap b/subprojects/gst-plugins-base/gst-plugins-base.doap index 38991a5..0a59d41 100644 --- a/subprojects/gst-plugins-base/gst-plugins-base.doap +++ b/subprojects/gst-plugins-base/gst-plugins-base.doap @@ -36,6 +36,16 @@ A wide range of video and audio decoders, encoders, and filters are included. + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-plugins-base/meson.build b/subprojects/gst-plugins-base/meson.build index 42e2b29..b6c11cf 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.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-good/ChangeLog b/subprojects/gst-plugins-good/ChangeLog index d0e9ac9..0dd3ddd 100644 --- a/subprojects/gst-plugins-good/ChangeLog +++ b/subprojects/gst-plugins-good/ChangeLog @@ -1,3 +1,19 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * docs/gst_plugins_cache.json: + * gst-plugins-good.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-07-27 11:19:50 +0200 Edward Hervey * gst/isomp4/qtdemux.c: diff --git a/subprojects/gst-plugins-good/NEWS b/subprojects/gst-plugins-good/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-plugins-good/NEWS +++ b/subprojects/gst-plugins-good/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-good/RELEASE b/subprojects/gst-plugins-good/RELEASE index e038f04..c6bb6ca 100644 --- a/subprojects/gst-plugins-good/RELEASE +++ b/subprojects/gst-plugins-good/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-plugins-good 1.20.0. +This is GStreamer gst-plugins-good 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json index 80b8db2..216033c 100644 --- a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json +++ b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json @@ -7027,7 +7027,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.21.0.1 FLV muxer", + "default": "GStreamer 1.21.1 FLV muxer", "mutable": "null", "readable": true, "type": "gchararray", @@ -7039,7 +7039,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.21.0.1 FLV muxer", + "default": "GStreamer 1.21.1 FLV muxer", "mutable": "null", "readable": true, "type": "gchararray", @@ -21184,7 +21184,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer/1.21.0.1", + "default": "GStreamer/1.21.1", "mutable": "null", "readable": true, "type": "gchararray", @@ -21728,7 +21728,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer 1.21.0.1", + "default": "GStreamer 1.21.1", "mutable": "null", "readable": true, "type": "gchararray", @@ -23165,7 +23165,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer souphttpsrc 1.21.0.1 ", + "default": "GStreamer souphttpsrc 1.21.1 ", "mutable": "null", "readable": true, "type": "gchararray", diff --git a/subprojects/gst-plugins-good/gst-plugins-good.doap b/subprojects/gst-plugins-good/gst-plugins-good.doap index 232c33c..4be8425 100644 --- a/subprojects/gst-plugins-good/gst-plugins-good.doap +++ b/subprojects/gst-plugins-good/gst-plugins-good.doap @@ -34,6 +34,16 @@ the plug-in code, LGPL or LGPL-compatible for the supporting library). + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-plugins-good/meson.build b/subprojects/gst-plugins-good/meson.build index e3a1b04..dd8eadc 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.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-ugly/ChangeLog b/subprojects/gst-plugins-ugly/ChangeLog index a3f4c40..54b8382 100644 --- a/subprojects/gst-plugins-ugly/ChangeLog +++ b/subprojects/gst-plugins-ugly/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-plugins-ugly.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gst-plugins-ugly/NEWS b/subprojects/gst-plugins-ugly/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-plugins-ugly/NEWS +++ b/subprojects/gst-plugins-ugly/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-plugins-ugly/RELEASE b/subprojects/gst-plugins-ugly/RELEASE index e44e809..76bc24b 100644 --- a/subprojects/gst-plugins-ugly/RELEASE +++ b/subprojects/gst-plugins-ugly/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-plugins-ugly 1.20.0. +This is GStreamer gst-plugins-ugly 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap index 2aa374b..198d096 100644 --- a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap +++ b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap @@ -35,6 +35,16 @@ might be widely known to present patent problems. + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-plugins-ugly/meson.build b/subprojects/gst-plugins-ugly/meson.build index 4bb67f4..03fc6c9 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.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-python/ChangeLog b/subprojects/gst-python/ChangeLog index 3d9374b..7009921 100644 --- a/subprojects/gst-python/ChangeLog +++ b/subprojects/gst-python/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gst-python.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gst-python/NEWS b/subprojects/gst-python/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-python/NEWS +++ b/subprojects/gst-python/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-python/RELEASE b/subprojects/gst-python/RELEASE index 5bb5fdd..3521c87 100644 --- a/subprojects/gst-python/RELEASE +++ b/subprojects/gst-python/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-python 1.20.0. +This is GStreamer gst-python 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-python/gst-python.doap b/subprojects/gst-python/gst-python.doap index 95c22b0..667e30b 100644 --- a/subprojects/gst-python/gst-python.doap +++ b/subprojects/gst-python/gst-python.doap @@ -32,6 +32,16 @@ GStreamer Python Bindings is a set of overrides and Gst fundamental types handli + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-python/meson.build b/subprojects/gst-python/meson.build index 3def112..2748296 100644 --- a/subprojects/gst-python/meson.build +++ b/subprojects/gst-python/meson.build @@ -1,5 +1,5 @@ project('gst-python', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'c_std=gnu99', diff --git a/subprojects/gst-rtsp-server/ChangeLog b/subprojects/gst-rtsp-server/ChangeLog index 274071d..914c9fe 100644 --- a/subprojects/gst-rtsp-server/ChangeLog +++ b/subprojects/gst-rtsp-server/ChangeLog @@ -1,3 +1,19 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * docs/plugins/gst_plugins_cache.json: + * gst-rtsp-server.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gst-rtsp-server/NEWS b/subprojects/gst-rtsp-server/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gst-rtsp-server/NEWS +++ b/subprojects/gst-rtsp-server/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gst-rtsp-server/RELEASE b/subprojects/gst-rtsp-server/RELEASE index 72467c7..521e2ec 100644 --- a/subprojects/gst-rtsp-server/RELEASE +++ b/subprojects/gst-rtsp-server/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gst-rtsp-server 1.20.0. +This is GStreamer gst-rtsp-server 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gst-rtsp-server/docs/plugins/gst_plugins_cache.json b/subprojects/gst-rtsp-server/docs/plugins/gst_plugins_cache.json index 4d08a04..d94ee52 100644 --- a/subprojects/gst-rtsp-server/docs/plugins/gst_plugins_cache.json +++ b/subprojects/gst-rtsp-server/docs/plugins/gst_plugins_cache.json @@ -321,7 +321,7 @@ "construct": false, "construct-only": false, "controllable": false, - "default": "GStreamer/1.21.0.1", + "default": "GStreamer/1.21.1", "mutable": "null", "readable": true, "type": "gchararray", diff --git a/subprojects/gst-rtsp-server/gst-rtsp-server.doap b/subprojects/gst-rtsp-server/gst-rtsp-server.doap index cac5f62..642e928 100644 --- a/subprojects/gst-rtsp-server/gst-rtsp-server.doap +++ b/subprojects/gst-rtsp-server/gst-rtsp-server.doap @@ -32,6 +32,16 @@ RTSP server library based on GStreamer + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gst-rtsp-server/meson.build b/subprojects/gst-rtsp-server/meson.build index eb86469..d613302 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.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : ['warning_level=1', 'buildtype=debugoptimized']) diff --git a/subprojects/gstreamer-sharp/meson.build b/subprojects/gstreamer-sharp/meson.build index ba1ed0f..99ea048 100644 --- a/subprojects/gstreamer-sharp/meson.build +++ b/subprojects/gstreamer-sharp/meson.build @@ -1,4 +1,4 @@ -project('gstreamer-sharp', ['cs', 'c'], version: '1.21.0.1', +project('gstreamer-sharp', ['cs', 'c'], version: '1.21.1', meson_version : '>= 0.62', license: 'LGPL') if host_machine.system() == 'osx' diff --git a/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs b/subprojects/gstreamer-sharp/sources/generated/Gst.PbUtils/Constants.cs index d2039ae..aa16a53 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 = 21; - 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 9c9ce59..93a795e 100644 --- a/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs +++ b/subprojects/gstreamer-sharp/sources/generated/Gst/Constants.cs @@ -170,9 +170,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 = 21; - 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 a4c9b3a..0ad5e1f 100644 --- a/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml +++ b/subprojects/gstreamer-sharp/sources/generated/gstreamer-sharp-api.xml @@ -12127,10 +12127,10 @@ - - - - + + + + @@ -21582,10 +21582,10 @@ - - - - + + + + diff --git a/subprojects/gstreamer-vaapi/ChangeLog b/subprojects/gstreamer-vaapi/ChangeLog index dbd32b0..6839c54 100644 --- a/subprojects/gstreamer-vaapi/ChangeLog +++ b/subprojects/gstreamer-vaapi/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gstreamer-vaapi.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-09-21 19:19:45 +0530 Nirbheek Chauhan * meson.build: diff --git a/subprojects/gstreamer-vaapi/NEWS b/subprojects/gstreamer-vaapi/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gstreamer-vaapi/NEWS +++ b/subprojects/gstreamer-vaapi/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gstreamer-vaapi/RELEASE b/subprojects/gstreamer-vaapi/RELEASE index 24c0ab1..4ceb845 100644 --- a/subprojects/gstreamer-vaapi/RELEASE +++ b/subprojects/gstreamer-vaapi/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer gstreamer-vaapi 1.20.0. +This is GStreamer gstreamer-vaapi 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap b/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap index 0cbaa83..23afbd6 100644 --- a/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap +++ b/subprojects/gstreamer-vaapi/gstreamer-vaapi.doap @@ -27,6 +27,16 @@ + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gstreamer-vaapi/meson.build b/subprojects/gstreamer-vaapi/meson.build index 167f288..4805970 100644 --- a/subprojects/gstreamer-vaapi/meson.build +++ b/subprojects/gstreamer-vaapi/meson.build @@ -1,5 +1,5 @@ project('gstreamer-vaapi', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gstreamer/ChangeLog b/subprojects/gstreamer/ChangeLog index 7da9470..c6dd996 100644 --- a/subprojects/gstreamer/ChangeLog +++ b/subprojects/gstreamer/ChangeLog @@ -1,3 +1,18 @@ +=== release 1.21.1 === + +2022-10-04 01:14:01 +0100 Tim-Philipp Müller + + * NEWS: + * RELEASE: + * gstreamer.doap: + * meson.build: + Release 1.21.1 + +2022-10-04 01:13:59 +0100 Tim-Philipp Müller + + * ChangeLog: + Update ChangeLogs for 1.21.1 + 2022-10-03 11:16:25 +0200 Edward Hervey * plugins/elements/gstqueue2.c: diff --git a/subprojects/gstreamer/NEWS b/subprojects/gstreamer/NEWS index eb637c9..cb59a4e 100644 --- a/subprojects/gstreamer/NEWS +++ b/subprojects/gstreamer/NEWS @@ -1,11 +1,23 @@ -GStreamer 1.20 Release Notes +GStreamer 1.22 Release Notes -GStreamer 1.20.0 was released on 3 February 2022. +GStreamer 1.22 has not been released yet. It is scheduled for release +around the end of December 2022. -See https://gstreamer.freedesktop.org/releases/1.20/ for the latest +1.21.x is the unstable development version that is being developed in +the git master branch and which will eventually result in 1.22, and +1.21.1 is the current development release in that series + +It is expected that feature freeze will be around November 2021, +followed by several 1.21 pre-releases and the new 1.22 stable release +around the end of December 2022. + +1.22 will be backwards-compatible to the stable 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. + +See https://gstreamer.freedesktop.org/releases/1.22/ for the latest version of this document. -Last updated: Wednesday 2 February 2022, 23:30 UTC (log) +Last updated: Tuesday 4 October 2022, 00:00 UTC (log) Introduction @@ -18,1583 +30,167 @@ fixes and other improvements. Highlights -- Development in GitLab was switched to a single git repository - containing all the modules -- GstPlay: new high-level playback library, replaces GstPlayer -- WebM Alpha decoding support -- Encoding profiles can now be tweaked with additional - application-specified element properties -- Compositor: multi-threaded video conversion and mixing -- RTP header extensions: unified support in RTP depayloader and - payloader base classes -- SMPTE 2022-1 2-D Forward Error Correction support -- Smart encoding (pass through) support for VP8, VP9, H.265 in - encodebin and transcodebin -- Runtime compatibility support for libsoup2 and libsoup3 (libsoup3 - support experimental) -- Video decoder subframe support -- Video decoder automatic packet-loss, data corruption, and keyframe - request handling for RTP / WebRTC / RTSP -- mp4 and Matroska muxers now support profile/level/resolution changes - for H.264/H.265 input streams (i.e. codec data changing on the fly) -- mp4 muxing mode that initially creates a fragmented mp4 which is - converted to a regular mp4 on EOS -- Audio support for the WebKit Port for Embedded (WPE) web page source - element -- CUDA based video color space convert and rescale elements and - upload/download elements -- NVIDIA memory:NVMM support for OpenGL glupload and gldownload - elements -- Many WebRTC improvements -- The new VA-API plugin implementation fleshed out with more decoders - and new postproc elements -- AppSink API to retrieve events in addition to buffers and buffer - lists -- AppSrc gained more configuration options for the internal queue - (leakiness, limits in buffers and time, getters to read current - levels) -- Updated Rust bindings and many new Rust plugins -- Improved support for custom minimal GStreamer builds -- Support build against FFmpeg 5.0 -- Linux Stateless CODEC support gained MPEG-2 and VP9 -- Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support -- Lots of new plugins, features, performance improvements and bug - fixes +- this section will be completed in due course Major new features and changes Noteworthy new features and API -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -Development in GitLab was switched to a single git repository containing all the modules - -The GStreamer multimedia framework is a set of libraries and plugins -split into a number of distinct modules which are released independently -and which have so far been developed in separate git repositories in -freedesktop.org GitLab. - -In addition to these separate git repositories there was a gst-build -module that would use the Meson build system’s subproject feature to -download each individual module and then build everything in one go. It -would also provide an uninstalled development environment that made it -easy to work on GStreamer and use or test versions other than the -system-installed GStreamer version. - -All of these modules have now (as of 28 September 2021) been merged into -a single git repository (“Mono repository” or “monorepo”) which should -simplify development workflows and continuous integration, especially -where changes need to be made to multiple modules at once. - -This mono repository merge will primarily affect GStreamer developers -and contributors and anyone who has workflows based on the GStreamer git -repositories. - -The Rust bindings and Rust plugins modules have not been merged into the -mono repository at this time because they follow a different release -cycle. - -The mono repository lives in the existing GStreamer core git repository -in GitLab in the new main branch and all future development will happen -on this branch. - -Modules will continue to be released as separate tarballs. - -For more details, please see the GStreamer mono repository FAQ. - -GstPlay: new high-level playback library replacing GstPlayer - -- GstPlay is a new high-level playback library that replaces the older - GstPlayer API. It is basically the same API as GstPlayer but - refactored to use bus messages for application notifications instead - of GObject signals. There is still a signal adapter object for those - who prefer signals. Since the existing GstPlayer API is already in - use in various applications, it didn’t seem like a good idea to - break it entirely. Instead a new API was added, and it is expected - that this new GstPlay API will be moved to gst-plugins-base in - future. - -- The existing GstPlayer API is scheduled for deprecation and will be - removed at some point in the future (e.g. in GStreamer 1.24), so - application developers are urged to migrate to the new GstPlay API - at their earliest convenience. - -WebM alpha decoding - -- Implement WebM alpha decoding (VP8/VP9 with alpha), which required - support and additions in various places. This is supported both with - software decoders and hardware-accelerated decoders. - -- VP8/VP9 don’t support alpha components natively in the codec, so the - way this is implemented in WebM is by encoding the alpha plane with - transparency data as a separate VP8/VP9 stream. Inside the WebM - container (a variant of Matroska) this is coded as a single video - track with the “normal” VP8/VP9 video data making up the main video - data and each frame of video having an encoded alpha frame attached - to it as extra data ("BlockAdditional"). - -- matroskademux has been extended extract this per-frame alpha side - data and attach it in form of a GstVideoCodecAlphaMeta to the - regular video buffers. Note that this new meta is specific to this - VP8/VP9 alpha support and can’t be used to just add alpha support to - other codecs that don’t support it. Lastly, matroskademux also - advertises the fact that the streams contain alpha in the caps. - -- The new codecalpha plugin contains various bits of infrastructure to - support autoplugging and debugging: - - - codecalphademux splits out the alpha stream from the metas on - the regular VP8/VP9 buffers - - alphacombine takes two decoded raw video streams (one alpha, one - the regular video) and combines it into a video stream with - alpha - - vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use - the regular vp8dec and vp9dec software decoders to decode - regular and alpha streams and combine them again. To decodebin - these look like regular decoders. - - The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can - decode both alpha and non-alpha stream with a single decoder - instance - -- A new AV12 video format was added which is basically NV12 with an - alpha plane, which is more convenient for many hardware-accelerated - decoders. - -- Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support - to GStreamer” for all the details and a demo. - -RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders - -- RTP Header Extensions are specified in RFC 5285 and provide a way to - add small pieces of data to RTP packets in between the RTP header - and the RTP payload. This is often used for per-frame metadata, - extended timestamps or other application-specific extra data. There - are several commonly-used extensions specified in various RFCs, but - senders are free to put any kind of data in there, as long as sender - and receiver both know what that data is. Receivers that don’t know - about the header extensions will just skip the extra data without - ever looking at it. These header extensions can often be combined - with any kind of payload format, so may need to be supported by many - RTP payloader and depayloader elements. - -- Inserting and extracting RTP header extension data has so far been a - bit inconvenient in GStreamer: There are functions to add and - retrieve RTP header extension data from RTP packets, but nothing - works automatically, even for common extensions. People would have - to do the insertion/extraction either in custom elements - before/after the RTP payloader/depayloader, or inside pad probes, - which isn’t very nice. - -- This release adds various pieces of new infrastructure for generic - RTP header extension handling, as well as some implementations for - common extensions: - - - GstRTPHeaderExtension is a new helper base class for reading and - writing RTP header extensions. Nominally this subclasses - GstElement, but only so these extensions are stored in the - registry where they can be looked up by URI or name. They don’t - have pads and don’t get added to the pipeline graph as an - element. - - - "add-extension" and "clear-extension" action signals on RTP - payloaders and depayloaders for manual extension management - - - The "request-extension" signal will be emitted if an extension - is encountered that requires explicit mapping by the application - - - new "auto-header-extension" property on RTP payloaders and - depayloaders for automatic handling of known header extensions. - This is enabled by default. The extensions must be signalled via - caps / SDP. - - - RTP header extension implementations: - - - rtphdrextclientaudiolevel: Client-to-Mixer Audio Level - Indication (RFC 6464) (also see below) - - rtphdrextcolorspace: Color Space extension, extends RTP - packets with color space and high dynamic range (HDR) - information - - rtphdrexttwcc: Transport Wide Congestion Control support - -- gst_rtp_buffer_remove_extension_data() is a new helper function to - remove an RTP header extension from an RTP buffer - -- The existing gst_rtp_buffer_set_extension_data() now also supports - shrinking the extension data in size - -AppSink and AppSrc improvements - -- appsink: new API to pull events out of appsink in addition to - buffers and buffer lists. - - There was previously no way for users to receive incoming events - from appsink properly serialised with the data flow, even if they - are serialised events. The reason for that is that the only way to - intercept events was via a pad probe on the appsink sink pad, but - there is also internal queuing inside of appsink, so it’s difficult - to ascertain the right order of everything in all cases. - - There is now a new "new-serialized-event" signal which will be - emitted when there’s a new event pending (just like the existing - "new-sample" signal). The "emit-signals" property must be set to - TRUE in order to activate this (but it’s also fine to just pull from - the application thread without using the signals). - - gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be - used to pull out either an event or a new sample carrying a buffer - or buffer list, whatever is next in the queue. - - EOS events will be filtered and will not be returned. EOS handling - can be done the usual way, same as with _pull_sample(). - -- appsrc: allow configuration of internal queue limits in time and - buffers and add leaky mode. - - There is internal queuing inside appsrc so the application thread - can push data into the element which will then be picked up by the - source element’s streaming thread and pushed into the pipeline from - that streaming thread. This queue is unlimited by default and until - now it was only possible to set a maximum size limit in bytes. When - that byte limit is reached, the pushing thread (application thread) - would be blocked until more space becomes available. - - A limit in bytes is not particularly useful for many use cases, so - now it is possible to also configure limits in time and buffers - using the new "max-time" and "max-buffers" properties. Of course - there are also matching new read-only"current-level-buffers" and - "current-level-time properties" properties to query the current fill - level of the internal queue in time and buffers. - - And as if that wasn’t enough the internal queue can also be - configured as leaky using the new "leaky-type" property. That way - when the queue is full the application thread won’t be blocked when - it tries to push in more data, but instead either the new buffer - will be dropped or the oldest data in the queue will be dropped. - -Better string serialization of nested GstCaps and GstStructures - -- New string serialisation format for structs and caps that can handle - nested structs and caps properly by using brackets to delimit nested - items (e.g. some-struct, some-field=[nested-struct, nested=true]). - Unlike the default format the new variant can also support more than - one level of nesting. For backwards-compatibility reasons the old - format is still output by default when serialising caps and structs - using the existing API. The new functions gst_caps_serialize() and - gst_structure_serialize() can be used to output strings in the new - format. - -Convenience API for custom GstMetas - -- New convenience API to register and create custom GstMetas: - gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such - custom meta is backed by a GstStructure and does not require that - users of the API expose their GstMeta implementation as public API - for other components to make use of it. In addition, it provides a - simpler interface by ignoring the impl vs. api distinction that the - regular API exposes. This new API is meant to be the meta - counterpart to custom events and messages, and to be more convenient - than the lower-level API when the absolute best performance isn’t a - requirement. The reason it’s less performant than a “proper” meta is - that a proper meta is just a C struct in the end whereas this goes - through the GstStructure API which has a bit more overhead, which - for most scenarios is negligible however. This new API is useful for - experimentation or proprietary metas, but also has some limitations: - it can only be used if there’s a single producer of these metas; - registering the same custom meta multiple times or from multiple - places is not allowed. - -Additional Element Properties on Encoding Profiles - -- GstEncodingProfile: The new "element-properties" and - gst_encoding_profile_set_element_properties() API allows - applications to set additional element properties on encoding - profiles to configure muxers and encoders. So far the encoding - profile template was the only place where this could be specified, - but often what applications want to do is take a ready-made encoding - profile shipped by GStreamer or the application and then tweak the - settings on top of that, which is now possible with this API. Since - applications can’t always know in advance what encoder element will - be used in the end, it’s even possible to specify properties on a - per-element basis. - - Encoding Profiles are used in the encodebin, transcodebin and - camerabin elements and APIs to configure output formats (containers - and elementary streams). - -Audio Level Indication Meta for RFC 6464 - -- New GstAudioLevelMeta containing Audio Level Indication as per RFC - 6464 - -- The level element has been updated to add GstAudioLevelMeta on - buffers if the "audio-level-meta" property is set to TRUE. This can - then in turn be picked up by RTP payloaders to signal the audio - level to receivers through RTP header extensions (see above). - -- New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header - Extension which should be automatically created and used by RTP - payloaders and depayloaders if their "auto-header-extension" - property is enabled and if the extension is part of the RTP caps. - -Automatic packet loss, data corruption and keyframe request handling for video decoders - -- The GstVideoDecoder base class has gained various new APIs to - automatically handle packet loss and data corruption better by - default, especially in RTP, RTSP and WebRTC streaming scenarios, and - to give subclasses more control about how they want to handle - missing data: - - - Video decoder subclasses can mark output frames as corrupted via - the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag - - - A new "discard-corrupted-frames" property allows applications to - configure decoders so that corrupted frames are directly - discarded instead of being forwarded inside the pipeline. This - is a replacement for the "output-corrupt" property of the FFmpeg - decoders. - - - RTP depayloaders can now signal to decoders that data is missing - when sending GAP events for lost packets. GAP events can be sent - for various reason in a GStreamer pipeline. Often they are just - used to let downstream elements know that there isn’t a buffer - available at the moment, so downstream elements can move on - instead of waiting for one. They are also sent by RTP - depayloaders in the case that packets are missing, however, and - so far a decoder was not able to differentiate the two cases. - This has been remedied now: GAP events can be decorated with - gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let - decoders now what happened, and decoders can then use that in - some cases to handle missing data better. - - - The GstVideoDecoder::handle_missing_data vfunc was added to - inform subclasses about packet loss or missing data and let them - handle it in their own way if they like. - - - gst_video_decoder_set_needs_sync_point() lets subclasses signal - that they need the stream to start with a sync point. If - enabled, the base class will discard all non-sync point frames - in the beginning and after a flush and does not pass them to the - subclass. Furthermore, if the first frame is not a sync point, - the base class will try and request a sync frame from upstream - by sending a force-key-unit event (see next items). - - - New "automatic-request-sync-points" and - "automatic-request-sync-point-flags" properties to automatically - request sync points when needed, e.g. on packet loss or if the - first frame is not a keyframe. Applications may want to enable - this on decoders operating in e.g. RTP/WebRTC/RTSP receiver - pipelines. - - - The new "min-force-key-unit-interval" property can be used to - ensure there’s a minimal interval between keyframe requests to - upstream (and/or the sender) and we’re not flooding the sender - with key unit requests. - - - gst_video_decoder_request_sync_point() allows subclasses to - request a new sync point (e.g. if they choose to do their own - missing data handling). This will still honour the - "min-force-key-unit-interval" property if set. - -Improved support for custom minimal GStreamer builds - -- Element registration and registration of other plugin features - inside plugin init functions has been improved in order to - facilitate minimal custom GStreamer builds. - -- A number of new macros have been added to declare and create - per-element and per-plugin feature register functions in all - plugins, and then call those from the per-plugin plugin_init - functions: - - - GST_ELEMENT_REGISTER_DEFINE, - GST_DEVICE_PROVIDER_REGISTER_DEFINE, - GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE - for the actual registration call with GStreamer - - GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER, - GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER, - GST_TYPE_FIND_REGISTER to call the registration function defined - by the REGISTER_DEFINE macro - - GST_ELEMENT_REGISTER_DECLARE, - GST_DEVICE_PROVIDER_REGISTER_DECLARE, - GST_DYNAMIC_TYPE_REGISTER_DECLARE, - GST_TYPE_FIND_REGISTER_DECLARE to declare the registration - function defined by the REGISTER_DEFINE macro - - and various variants for advanced use cases. - -- This means that applications can call the per-element and per-plugin - feature registration functions for only the elements they need - instead of registering plugins as a whole with all kinds of elements - that may not be required (e.g. encoder and decoder instead of just - decoder). In case of static linking all unused functions and their - dependencies would be removed in this case by the linker, which - helps minimise binary size for custom builds. - -- gst_init() will automatically call a gst_init_static_plugins() - function if one exists. - -- See the GStreamer static build documentation and Stéphane’s blog - post Generate a minimal GStreamer build, tailored to your needs for - more details. +- this section will be filled in in due course New elements -- New aesdec and aesenc elements for AES encryption and decryption in - a custom format. - -- New encodebin2 element with dynamic/sometimes source pads in order - to support the option of doing the muxing outside of encodebin, - e.g. in combination with a splitmuxsink. - -- New fakeaudiosink and videocodectestsink elements for testing and - debugging (see below for more details) - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- isac: new plugin wrapping the Internet Speech Audio Codec reference - encoder and decoder from the WebRTC project. - -- asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API - -- gssrc, gssink: add source and sink for Google Cloud Storage - -- onnx: new plugin to apply ONNX neural network models to video - -- openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0) - -- qroverlay, debugqroverlay: new elements that allow overlaying data - on top of video in the form of a QR code - -- cvtracker: new OpenCV-based tracker element - -- av1parse, vp9parse: new parsers for AV1 and VP9 video - -- va: work on the new VA-API plugin implementation for - hardware-accelerated video decoding and encoding has continued at - pace, with various new decoders and filters having joined the - initial vah264dec: - - - vah265dec: VA-API H.265 decoder - - vavp8dec: VA-API VP8 decoder - - vavp9dec: VA-API VP9 decoder - - vaav1dec: VA-API AV1 decoder - - vampeg2dec: VA-API MPEG-2 decoder - - vadeinterlace: : VA-API deinterlace filter - - vapostproc: : VA-API postproc filter (color conversion, - resizing, cropping, color balance, video rotation, skin tone - enhancement, denoise, sharpen) - - See Víctor’s blog post “GstVA in GStreamer 1.20” for more details - and what’s coming up next. - -- vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi) - -- msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media - SDK / oneVPL - -- nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video - encoding and decoding: - - - cudaconvert, cudascale: new CUDA based video color space convert - and rescale elements - - cudaupload, cudadownload: new helper elements for memory - transfer between CUDA and system memory spaces - - nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders - -- Various new hardware-accelerated elements for Windows: - - - d3d11screencapturesrc: new desktop capture element, including a - GstDeviceProvider implementation to enumerate/select target - monitors for capture. - - d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders - - d3d11deinterlace: deinterlacing filter - - d3d11compositor: video composing element - - see Windows section below for more details - -- new Rust plugins: - - - audiornnoise: Removes noise from an audio stream - - awstranscribeparse: Parses AWS audio transcripts into timed text - buffers - - ccdetect: Detects if valid closed captions are present in a - closed captions stream - - cea608tojson: Converts CEA-608 Closed Captions to a JSON - representation - - cmafmux: CMAF fragmented mp4 muxer - - dashmp4mux: DASH fragmented mp4 muxer - - isofmp4mux: ISO fragmented mp4 muxer - - ebur128level: EBU R128 Loudness Level Measurement - - ffv1dec: FFV1 video decoder - - gtk4paintablesink: GTK4 video sink, which provides a - GdkPaintable that can be rendered in various widgets - - hlssink3: HTTP Live Streaming sink - - hrtfrender: Head-Related Transfer Function (HRTF) renderer - - hsvdetector: HSV colorspace detector - - hsvfilter: HSV colorspace filter - - jsongstenc: Wraps buffers containing any valid top-level JSON - structures into higher level JSON objects, and outputs those as - ndjson - - jsongstparse: Parses ndjson as output by jsongstenc - - jsontovtt: converts JSON to WebVTT subtitles - - regex: Applies regular expression operations on text - - roundedcorners: Adds rounded corners to video - - spotifyaudiosrc: Spotify source - - textahead: Display upcoming text buffers ahead (e.g. for - Karaoke) - - transcriberbin: passthrough bin that transcribes raw audio to - closed captions using awstranscriber and puts the captions as - metas onto the video - - tttojson: Converts timed text to a JSON representation - - uriplaylistbin: Playlist source bin - - webpdec-rs: WebP image decoder with animation support - -- New plugin codecalpha with elements to assist with WebM Alpha - decoding - - - codecalphademux: Split stream with GstVideoCodecAlphaMeta into - two streams - - alphacombine: Combine two raw video stream (I420 or NV12) as one - stream with alpha channel (A420 or AV12) - - vp8alphadecodebin: A bin to handle software decoding of VP8 with - alpha - - vp9alphadecodebin: A bin to handle software decoding of VP9 with - alpha - -- New hardware accelerated elements for Linux: - - - v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders - - v4l2slvp9dec: Support for Linux Stateless VP9 decoders - - v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha - layer decoding - - v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha - layer decoding +- this section will be filled in in due course New element features and additions -- assrender: handle more font mime types; better interaction with - matroskademux for embedded fonts - -- audiobuffersplit: Add support for specifying output buffer size in - bytes (not just duration) - -- audiolatency: new "samplesperbuffer" property so users can configure - the number of samples per buffer. The default value is 240 samples - which is equivalent to 5ms latency with a sample rate of 48000, - which might be larger than actual buffer size of audio capture - device. - -- audiomixer, audiointerleave, GstAudioAggregator: now keep a count of - samples that are dropped or processed as statistic and can be made - to post QoS messages on the bus whenever samples are dropped by - setting the "qos-messages" property on input pads. - -- audiomixer, compositor: improved handling of new inputs added at - runtime. New API was added to the GstAggregator base class to allow - subclasses to opt into an aggregation mode where inactive pads are - ignored when processing input buffers - (gst_aggregator_set_ignore_inactive_pads(), - gst_aggregator_pad_is_inactive()). An “inactive pad” in this context - is a pad which, in live mode, hasn’t yet received a first buffer, - but has been waited on at least once. What would happen usually in - this case is that the aggregator would wait for data on this pad - every time, up to the maximum configured latency. This would - inadvertently push mixer elements in live mode to the configured - latency envelope and delay processing when new inputs are added at - runtime until these inputs have actually produced data. This is - usually undesirable. With this new API, new inputs can be added - (requested) and configured and they won’t delay the data processing. - Applications can opt into this new behaviour by setting the - "ignore-inactive-pads" property on compositor, audiomixer or other - GstAudioAggregator-based elements. - -- cccombiner: implement “scheduling” of captions. So far cccombiner’s - behaviour was essentially that of a funnel: it strictly looked at - input timestamps to associate together video and caption buffers. - Now it will try to smoothly schedule caption buffers in order to - have exactly one per output video buffer. This might involve - rewriting input captions, for example when the input is CDP then - sequence counters are rewritten, time codes are dropped and - potentially re-injected if the input video frame had a time code - meta. This can also lead to the input drifting from synchronisation, - when there isn’t enough padding in the input stream to catch up. In - that case the element will start dropping old caption buffers once - the number of buffers in its internal queue reaches a certain limit - (configurable via the "max-scheduled" property). The new original - funnel-like behaviour can be restored by setting the "scheduling" - property to FALSE. - -- ccconverter: new "cdp-mode" property to specify which sections to - include in CDP packets (timecode, CC data, service info). Various - software, including FFmpeg’s Decklink support, fails parsing CDP - packets that contain anything but CC data in the CDP packets. - -- clocksync: new "sync-to-first" property for automatic timestamp - offset setup: if set clocksync will set up the "ts-offset" value - based on the first buffer and the pipeline’s running time when the - first buffer arrived. The newly configured "ts-offset" in this case - would be the value that allows outputting the first buffer without - waiting on the clock. This is useful for example to feed a non-live - input into an already-running pipeline. - -- compositor: - - - multi-threaded input conversion and compositing. Set the - "max-threads" property to activate this. - - new "sizing-policy" property to support display aspect ratio - (DAR)-aware scaling. By default the image is scaled to fill the - configured destination rectangle without padding and without - keeping the aspect ratio. With sizing-policy=keep-aspect-ratio - the input image is scaled to fit the destination rectangle - specified by GstCompositorPad:{xpos, ypos, width, height} - properties preserving the aspect ratio. As a result, the image - will be centered in the destination rectangle with padding if - necessary. - - new "zero-size-is-unscaled" property on input pads. By default - pad width=0 or pad height=0 mean that the stream should not be - scaled in that dimension. But if the "zero-size-is-unscaled" - property is set to FALSE a width or height of 0 is instead - interpreted to mean that the input image on that pad should not - be composited, which is useful when creating animations where an - input image is made smaller and smaller until it disappears. - - improved handling of new inputs at runtime via - "ignore-inactive-pads"property (see above for details) - - allow output format with alpha even if none of the inputs have - alpha (also glvideomixer and other GstVideoAggregator - subclasses) - -- dashsink: add H.265 codec support and signals for allowing custom - playlist/fragment output - -- decodebin3: - - - improved decoder selection, especially for hardware decoders - - make input activation “atomic” when adding inputs dynamically - - better interleave handling: take into account decoder latency - for interleave size - -- decklink: - - - Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro - - decklinkvideosrc: - - More accurate and stable capture timestamps: use the - hardware reference clock time when the frame was finished - being captured instead of a clock time much further down the - road. - - Automatically detect widescreen vs. normal NTSC/PAL - -- encodebin: - - - add “smart encoding” support for H.265, VP8 and VP9 (i.e. only - re-encode where needed and otherwise pass through encoded video - as-is). - - H.264/H.265 smart encoding improvements: respect user-specified - stream-format, but if not specified default to avc3/hvc1 with - in-band SPS/PPS/VPS signalling for more flexibility. - - new encodebin2 element with dynamic/sometimes source pads in - order to support the option of doing the muxing outside of - encodebin, e.g. in combination with splitmuxsink. - - add APIs to set element properties on encoding profiles (see - below) - -- errorignore: new "ignore-eos" property to also ignore FLOW_EOS from - downstream elements - -- giosrc: add support for growing source files: applications can - specify that the underlying file being read is growing by setting - the "is-growing" property. If set, the source won’t EOS when it - reaches the end of the file, but will instead start monitoring it - and will start reading data again whenever a change is detected. The - new "waiting-data" and "done-waiting-data" signals keep the - application informed about the current state. - -- gtksink, gtkglsink: - - - scroll event support: forwarded as navigation events into the - pipeline - - "video-aspect-ratio-override" property to force a specific - aspect ratio - - "rotate-method" property and support automatic rotation based on - image tags - -- identity: new "stats" property allows applications to retrieve the - number of bytes and buffers that have passed through so far. - -- interlace: add support for more formats, esp 10-bit, 12-bit and - 16-bit ones - -- jack: new "low-latency" property for automatic latency-optimized - setting and "port-names" property to select ports explicitly - -- jpegdec: support output conversion to RGB using libjpeg-turbo (for - certain input files) - -- line21dec: - - - "mode" property to control whether and how detected closed - captions should be inserted in the list of existing close - caption metas on the input frame (if any): add, drop, or - replace. - - "ntsc-only" property to only look for captions if video has NTSC - resolution - -- line21enc: new "remove-caption-meta" to remove metas from output - buffers after encoding the captions into the video data; support for - CDP closed captions - -- matroskademux, matroskamux: Add support for ffv1, a lossless - intra-frame video coding format. - -- matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265 - (i.e. stream-format avc3 and hev1) which allows on-the-fly - profile/level/resolution changes. - -- matroskamux: new "cluster-timestamp-offset" property, useful for use - cases where the container timestamps should map to some absolute - wall clock time, for example. - -- rtpsrc: add "caps" property to allow explicit setting of the caps - where needed - -- mpegts: support SCTE-35 pass-through via new "send-scte35-events" - property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections - (e.g. ad placement opportunities) are forwarded as events downstream - where they can be picked up again by mpegtsmux. This required a - semantic change in the SCTE-35 section API: timestamps are now in - running time instead of muxer pts. - -- tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp - handling in certain corner cases and for poorly muxed streams. - -- mpegtsmux: - - - More conformance improvements to make MPEG-TS analysers happy: - - PCR timing accuracy: Improvements to the way mpegtsmux - outputs PCR observations in CBR mode, so that a PCR - observation is always inserted when needed, so that we never - miss the configured pcr-interval, as that triggers various - MPEG-TS analyser errors. - - Improved PCR/SI scheduling - - Don’t write PCR until PAT/PMT are output to make sure streams - start cleanly with a PAT/PMT. - - Allow overriding the automatic PMT PID selection via - application-supplied PMT_%d fields in the prog-map - structure/property. - -- mp4mux: - - - new "first-moov-then-finalise" mode for fragmented output where - the output will start with a self-contained moov atom for the - first fragment, and then produce regular fragments. Then at the - end when the file is finalised, the initial moov is invalidated - and a new moov is written covering the entire file. This way the - file is a “fragmented mp4” file while it is still being written - out, and remains playable at all times, but at the end it is - turned into a regular mp4 file (with former fragment headers - remaining as unused junk data in the file). - - support H.264 avc3 and H.265 hvc1 stream formats as input where - the codec data is signalled in-band inside the bitstream instead - of caps/file headers. - - support profile/level/resolution changes for H.264/H.265 input - streams (i.e. codec data changing on the fly). Each codec_data - is put into its own SampleTableEntry inside the stsd, unless the - input is in avc3 stream format in which case it’s written - in-band and not in the headers. - -- multifilesink: new ""min-keyframe-distance"" property to make - minimum distance between keyframes in next-file=key-frame mode - configurable instead of hard-coding it to 10 seconds. - -- mxfdemux has seen a big refactoring to support non-frame wrappings - and more accurate timestamp/seek handling for some formats - -- msdk plugin for hardware-accelerated video encoding and decoding - using the Intel Media SDK: - - - oneVPL support (Intel oneAPI Video Processing Library) - - AV1 decoding support - - H.264 decoder now supports constrained-high and progressive-high - profiles - - H.264 encoder: - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "dblk-idc" - - H.265 encoder: - - can output main-still-picture profile - - now inserts HDR SEIs (mastering display colour volume and - content light level) - - more configuration options (properties): - "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid", - "b-pyramid", "dblk-idc", "transform-skip" - - support for RGB 10bit format - - External bitrate control in encoders - - Video post proc element msdkvpp gained support for 12-bit pixel - formats P012_LE, Y212_LE and Y412_LE - -- nvh264sldec: interlaced stream support - -- openh264enc: support main, high, constrained-high and - progressive-high profiles - -- openjpeg: support for multithreaded decoding and encoding - -- rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP); - new "ignore-x-server-reply" property to ignore the - x-server-ip-address server header reply in case of HTTP tunneling, - as it is often broken. - -- souphttpsrc: Runtime compatibility support for libsoup2 and - libsoup3. libsoup3 is the latest major version of libsoup, but - libsoup2 and libsoup3 can’t co-exist in the same process because - there is no namespacing or versioning for GObject types. As a - result, it would be awkward if the GStreamer souphttpsrc plugin - linked to a specific version of libsoup, because it would only work - with applications that use the same version of libsoup. To make this - work, the soup plugin now tries to determine the libsoup version - used by the application (and its other dependencies) at runtime on - systems where GStreamer is linked dynamically. libsoup3 support is - still considered somewhat experimental at this point. Distro - packagers please take note of the souphttpsrc plugin dependency - changes mentioned in the build and dependencies section below. - -- srtsrc, srtsink: add signals for the application to accept/reject - incoming connections - -- timeoverlay: new elapsed-running-time time mode which shows the - running time since the first running time (and each flush-stop). - -- udpsrc: new timestamping mode to retrieve packet receive timestamps - from the kernel via socket control messages (SO_TIMESTAMPNS) on - supported platforms - -- uritranscodebin: new setup-source and element-setup signals for - applications to configure elements used - -- v4l2codecs plugin gained support for 4x4 and 32x32 tile formats - enabling some platforms or direct renders. Important memory usage - improvement. - -- v4l2slh264dec now implements the final Linux uAPI as shipped on - Linux 5.11 and later. - -- valve: add "drop-mode" property and provide two new modes of - operation: in drop-mode=forward-sticky-events sticky events - (stream-start, segment, tags, caps, etc.) are forwarded downstream - even when dropping is enabled; drop-mode=transform-to-gap will in - addition also convert buffers into gap events when dropping is - enabled, which lets downstream elements know that time is advancing - and might allow for preroll in many scenarios. By default all events - and all buffers are dropped when dropping is enabled, which can - cause problems with caps negotiation not progressing or branches not - prerolling when dropping is enabled. - -- videocrop: support for many more pixel formats, e.g. planar YUV - formats with > 8bits and GBR* video formats; can now also accept - video not backed by system memory as long as downstream supports the - GstCropMeta - -- videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant - color bars - -- vp8enc: finish support for temporal scalability: two new properties - ("temporal-scalability-layer-flags", - "temporal-scalability-layer-sync-flags") and a unit change on the - "temporal-scalability-target-bitrate" property (now expects bps); - also make temporal scalability details available to RTP payloaders - as buffer metadata. - -- vp9enc: new properties to tweak encoder performance: - - - "aq-mode" to configure adaptive quantization modes - - "frame-parallel-decoding" to configure whether to create a - bitstream that reduces decoding dependencies between frames - which allows staged parallel processing of more than one video - frames in the decoder. (Defaults to TRUE) - - "row-mt", "tile-columns" and "tile-rows" so multithreading can - be enabled on a per-tile basis, instead of on a per tile-column - basis. In combination with the new "tile-rows" property, this - allows the encoder to make much better use of the available CPU - power. - -- vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well - as 8-bit 4:4:4 - -- vp8enc, vp9enc now default to “good quality” for the deadline - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will prefer good-enough quality with better performance instead. - -- wpesrc: - - - implement audio support: a new sometimes source pad will be - created for each audio stream created by the web engine. - - move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also - support audio - - also handles web:// URIs now (same as cefsrc) - - post messages with the estimated load progress on the bus - -- x265enc: add negative DTS support, which means timestamps are now - offset by 1h same as with x264enc - -RTP Payloaders and Depayloaders - -- rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC - audio codec - -- rtph264depay: - - - new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet - loss, consistent with the new property on rtpvp8depay. - - new "wait-for-keyframe" property to make depayloader wait for a - new keyframe at the beginning and after packet loss (only - effective if the depayloader outputs AUs), consistent with the - existing property on rtpvp8depay. - -- rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel - audio in addition to the previously supported multichannel audio - modes - -- rtpopuspay: add DTX (Discontinuous Transmission) support - -- rtpvp8depay: new "request-keyframe" property to make the depayloader - automatically request a new keyframe from the sender on packet loss. - -- rtpvp8pay: temporal scaling support - -- rtpvp9depay: Improved SVC handling (aggregate all layers) - -RTP Infrastructure - -- rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE - 2022-1 2-D Forward Error Correction. More details in Mathieu’s blog - post. - -- rtpreddec: BUNDLE support - -- rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion - Control (TWCC) - -- rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC - reports to be scheduled on a timer instead of per marker-bit. +- this section will be filled in in due course Plugin and library moves +- this section will be filled in in due course + - There were no plugin moves or library moves in this cycle. Plugin removals The following elements or plugins have been removed: -- The ofa audio fingerprinting plugin has been removed. The MusicIP - database has been defunct for years so this plugin is likely neither - useful nor used by anyone. - -- The mms plugin containing mmssrc has been removed. It seems unlikely - anyone still needs this or that there are even any streams left out - there. The MMS protocol was deprecated in 2003 (in favour of RTSP) - and support for it was dropped with Microsoft Media Services 2008, - and Windows Media Player apparently also does not support it any - more. +- this section will be filled in in due course Miscellaneous API additions -Core - -- gst_buffer_new_memdup() is a convenience function for the - widely-used gst_buffer_new_wrapped(g_memdup(data,size),size) - pattern. - -- gst_caps_features_new_single() creates a new single GstCapsFeatures, - avoiding the need to use the vararg function with NULL terminator - for simple cases. - -- gst_element_type_set_skip_documentation() can be used by plugins to - signal that certain elements should not be included in the GStreamer - plugin documentation. This is useful for plugins where elements are - registered dynamically based on hardware capabilities and/or where - the available plugins and properties vary from system to system. - This is used in the d3d11 plugin for example to ensure that only the - list of default elements is advertised in the documentation. - -- gst_type_find_suggest_empty_simple() is a new convenience function - for typefinders for cases where there’s only a media type and no - other fields. - -- New API to create elements and set properties at construction time, - which is not only convenient, but also allows GStreamer elements to - have construct-only properties: gst_element_factory_make_full(), - gst_element_factory_make_valist(), - gst_element_factory_make_with_properties(), - gst_element_factory_create_full(), - gst_element_factory_create_valist(), - gst_element_factory_create_with_properties(). - -- GstSharedTaskPool: new “shared” task pool subclass with slightly - different default behaviour than the existing GstTaskPool which - would create unlimited number of threads for new tasks. The shared - task pool creates up to N threads (default: 1) and then distributes - pending tasks to those threads round-robin style, and blocks if no - thread is available. It is possible to join tasks. This can be used - by plugins to implement simple multi-threaded processing and is used - for the new multi-threaded video conversion and compositing done in - GstVideoAggregator, videoconverter and compositor. - -Plugins Base Utils library - -- GstDiscoverer: - - - gst_discoverer_container_info_get_tags() was added to retrieve - global/container tags (vs. per-stream tags). Per-Stream tags can - be retrieved via the existing - gst_discoverer_stream_info_get_tags(). - gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated - in favour of the container/stream-specific functions. - - gst_discoverer_stream_info_get_stream_number() returns a unique - integer identifier for a given stream within the given - GstDiscoverer context. (If this matches the stream number inside - the container bitstream that’s by coincidence and not by - design.) - -- gst_pb_utils_get_caps_description_flags() can be used to query - whether certain caps represent a container, audio, video, image, - subtitles, tags, or something else. This only works for formats - known to GStreamer. - -- gst_pb_utils_get_file_extension_from_caps() returns a possible file - extension for given caps. - -- gst_codec_utils_h264_get_profile_flags_level(): Parses profile, - flags, and level from H.264 AvcC codec_data. The format of H.264 - AVCC extradata/sequence_header is documented in the ITU-T H.264 - specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15 - section 5.3.3.1.2. - -- gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381 - compatible MIME codec string codec. Useful for providing the codecs - field inside the Content-Type HTTP header for container formats, - such as mp4 or Matroska. - -GStreamer OpenGL integration library and plugins - -- glcolorconvert: added support for converting the video formats A420, - AV12, BGR, BGRA, RGBP and BGRP. - -- Added support to GstGLBuffer for persistent buffer mappings where a - Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU. - This removes a memcpy() when uploading textures or vertices - particularly when software decoders (e.g. libav) are direct - rendering into our memory. Improves transfer performance - significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or - GL_EXT_buffer_storage - -- Added various helper functions for handling 4x4 matrices of affine - transformations as used by GstVideoAffineTransformationMeta. - -- Add support to GstGLContext for allowing the application to control - the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL - context. This allows the ability to choose between RGB16 or RGB10A2 - or RGBA8 back/front buffer configurations that were previously - hardcoded. GstGLContext also supports retrieving the configuration - it was created with or from an externally provide OpenGL context - handle. This infrastructure is also used to create a compatible - config from an application/externally provided OpenGL context in - order to improve compatibility with other OpenGL frameworks and GUI - toolkits. A new environment variable GST_GL_CONFIG was also added to - be able to request a specific configuration from the command line. - Note: different platforms will have different functionality - available. - -- Add support for choosing between EGL and WGL at runtime when running - on Windows. Previously this was a build-time switch. Allows use in - e.g. Gtk applications on Windows that target EGL/ANGLE without - recompiling GStreamer. gst_gl_display_new_with_type() can be used by - applications to choose a specific display type to use. - -- Build fixes to explicitly check for Broadcom-specific libraries on - older versions of the Raspberry Pi platform. The Broadcom OpenGL ES - and EGL libraries have different filenames. Using the vc4 Mesa - driver on the Raspberry Pi is not affected. - -- Added support to glupload and gldownload for transferring RGBA - buffers using the memory:NVMM available on the Nvidia Tegra family - of embedded devices. - -- Added support for choosing libOpenGL and libGLX as used in a GLVND - environment on unix-based platforms. This allows using desktop - OpenGL and EGL without pulling in any GLX symbols as would be - required with libGL. - -Video library - -- New raw video formats: - - - AV12 (NV12 with alpha plane) - - RGBP and BGRP (planar RGB formats) - - ARGB64 variants with specified endianness instead of host - endianness: - - ARGB64_LE, ARGB64_BE - - RGBA64_BE, RGBA64_LE - - BGRA64_BE, BGRA64_LE - - ABGR64_BE, ABGR64_LE - -- gst_video_orientation_from_tag() is new convenience API to parse the - image orientation from a GstTagList. - -- GstVideoDecoder subframe support (see below) - -- GstVideoCodecState now also carries some HDR metadata - -- Ancillary video data: implement transform functions for AFD/Bar - metas, so they will be forwarded in more cases - -MPEG-TS library - -This library only handles section parsing and such, see above for -changes to the actual mpegtsmux and mpegtsdemux elements. - -- many additions and improvements to SCTE-35 section parsing -- new API for fetching extended descriptors: - gst_mpegts_find_descriptor_with_extension() -- add support for SIT sections (Selection Information Tables) -- expose event-from-section constructor gst_event_new_mpegts_section() -- parse Audio Preselection Descriptor needed for Dolby AC-4 - -GstWebRTC library + webrtcbin - -- Change the way in which sink pads and transceivers are matched - together to support easier usage. If a pad is created without a - specific index (i.e. using sink_%u as the pad template), then an - available compatible transceiver will be searched for. If a specific - index is requested (i.e. sink_1) then if a transceiver for that - m-line already exists, that transceiver must match the new sink pad - request. If there is no transceiver available in either scenario, a - new transceiver is created. If a mixture of both sink_1 and sink_%u - requests result in an impossible situation, an error will be - produced at pad request time or from create offer/answer. - -- webrtcbin now uses regular ICE nomination instead of libnice’s - default of aggressive ICE nomination. Regular ICE nomination is the - default recommended by various relevant standards and improves - connectivity in specific network scenarios. - -- Add support for limiting the port range used for RTP with the - addition of the min-rtp-port and max-rtp-port properties on the ICE - object. - -- Expose the SCTP transport as a property on webrtcbin to more closely - match the WebRTC specification. - -- Added support for taking into account the data channel transport - state when determining the value of the "connection-state" property. - Previous versions of the WebRTC spec did not include the data - channel state when computing this value. - -- Add configuration for choosing the size of the underlying sockets - used for transporting media data - -- Always advertise support for the transport-cc RTCP feedback protocol - as rtpbin supports it. For full support, the configured caps (input - or through codec-preferences) need to include the relevant RTP - header extension. - -- Numerous fixes to caps and media handling to fail-fast when an - incompatible situation is detected. - -- Improved support for attaching the required media after a remote - offer has been set. - -- Add support for dynamically changing the amount of FEC used for a - particular stream. - -- webrtcbin now stops further SDP processing at the first error it - encounters. - -- Completed support for either local or the remote closing a data - channel. - -- Various fixes when performing BUNDLEing of the media streams in - relation to RTX and FEC usage. - -- Add support for writing out QoS DSCP marking on outgoing packets to - improve reliability in some network scenarios. - -- Improvements to the statistics returned by the get-stats signal - including the addition of the raw statistics from the internal - RTPSource, the TWCC stats when available. - -- The webrtc library does not expose any objects anymore with public - fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -GstCodecs and Video Parsers - -- Support for render delays to improve throughput across all CODECs - (used with NVDEC and V4L2). -- lots of improvements to parsers and the codec parsing decoder base - classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various - hardware-accelerated decoder APIs. - -Bindings support - -- gst_allocation_params_new() allocates a GstAllocationParams struct - on the heap. This should only be used by bindings (and freed via - gst_allocation_params_free() afterwards). In C code you would - allocate this on the stack and only init it in place. - -- gst_debug_log_literal() can be used to log a string to the debug log - without going through any printf format expansion and associated - overhead. This is mostly useful for bindings such as the Rust - bindings which may have done their own formatting already . - -- Provide non-inlined versions of refcounting APIs for various - GStreamer mini objects, so that they can be consumed by bindings - (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref, - gst_clear_buffer, gst_buffer_copy, gst_buffer_replace, - gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list, - gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take, - gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace, - gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy, - gst_context_replace, gst_event_replace, gst_event_steal, - gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event, - gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref, - gst_message_unref, gst_clear_message, gst_message_copy, - gst_message_replace, gst_message_take, gst_promise_ref, - gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query, - gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref, - gst_sample_unref, gst_sample_copy, gst_tag_list_ref, - gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace, - gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref, - gst_clear_uri. - -- expose a GType for GstMiniObject - -- gst_device_provider_probe() now returns non-floating device object - -API Deprecations - -- gst_element_get_request_pad() has been deprecated in favour of the - newly-added gst_element_request_pad_simple() which does the exact - same thing but has a less confusing name that hopefully makes clear - that the function request a new pad rather than just retrieves an - already-existing request pad. - -- gst_discoverer_info_get_tags(), which for many files returns a - confusing mix of stream and container tags, has been deprecated in - favour of the container-specific and stream-specific functions, - gst_discoverer_container_info_get_tags() and - gst_discoverer_stream_info_get_tags(). - -- gst_video_sink_center_rect() was deprecated in favour of the more - generic newly-added gst_video_center_rect(). - -- The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends - to cause problems and prevents sub-buffering. If pooling or lifetime - tracking is required, memories should be allocated through a custom - GstAllocator instead of relying on the lifetime of the buffers the - memories were originally attached to, which is fragile anyway. - -- The GstPlayer high-level playback library is being replaced with the - new GstPlay library (see above). GstPlayer should be considered - deprecated at this point and will be marked as such in the next - development cycle. Applications should be ported to GstPlay. - -- Gstreamer Editing Services: ges_video_transition_set_border(), - ges_video_transition_get_border() - ges_video_transition_set_inverted() - ges_video_transition_is_inverted() have been deprecated, use - ges_timeline_element_set_children_properties() instead. +- this section will be filled in in due course Miscellaneous performance, latency and memory optimisations -More video conversion fast paths - -- v210 ↔ I420, YV12, Y42B, UYVY and YUY2 -- A420 → RGB - -Less jitter when waiting on the system clock - -- Better system clock wait accuracy, less jitter: where available, - clock_nanosleep is used for higher accuracy for waits below 500 - usecs, and waits below 2ms will first use the regular waiting system - and then clock_nanosleep for the remainder. The various wait - implementation have a latency ranging from 50 to 500+ microseconds. - While this is not a major issue when dealing with a low number of - waits per second (for ex: video), it does introduce a non-negligible - jitter for synchronisation of higher packet rate systems. - -Video decoder subframe support - -- The GstVideoDecoder base class gained API to process input at the - sub-frame level. That way video decoders can start decoding slices - before they have received the full input frame in its entirety (to - the extent this is supported by the codec, of course). This helps - with CPU utilisation and reduces latency. - -- This functionality is now being used in the OpenJPEG JPEG 2000 - decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and - the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input). +- this section will be filled in in due course Miscellaneous other changes and enhancements -- GstDeviceMonitor no longer fails to start just because one of the - device providers failed to start. That could happen for example on - systems where the pulseaudio device provider is installed, but - pulseaudio isn’t actually running but ALSA is used for audio - instead. In the same vein the device monitor now keeps track of - which providers have been started (via the new - gst_device_provider_is_started()) and only stops actually running - device providers when stopping the device monitor. - -- On embedded systems it can be useful to create a registry that can - be shared and read by multiple processes running as different users. - It is now possible to set the new GST_REGISTRY_MODE environment - variable to specify the file mode for the registry file, which by - default is set to be only user readable/writable. - -- GstNetClientClock will signal lost sync in case the remote time - resets (e.g. because device power cycles), by emitting the “synced” - signal with synced=FALSE parameter, so applications can take action. - -- gst_value_deserialize_with_pspec() allows deserialisation with a - hint for what the target GType should be. This allows for example - passing arrays of flags through the command line or - gst_util_set_object_arg(), eg: foo="". - -- It’s now possible to create an empty GstVideoOverlayComposition - without any rectangles by passing a NULL rectangle to - gst_video_overlay_composition_new(). This is useful for bindings and - simplifies application code in some places. - -Tracing framework, debugging and testing improvements - -- New factories tracer to list loaded elements (and other plugin - features). This can be useful to collect a list of elements needed - for an application, which in turn can be used to create a tailored - minimal GStreamer build that contains just the elements needed and - nothing else. -- New plugin-feature-loaded tracing hook for use by tracers like the - new factories tracer - -- GstHarness: Add gst_harness_set_live() so that harnesses can be set - to non-live and return is-live=false in latency queries if needed. - Default behaviour is to always return is-live=true in latency - queries. - -- navseek: new "hold-eos" property. When enabled, the element will - hold back an EOS event until the next keystroke (via navigation - events). This can be used to keep a video sink showing the last - frame of a video pipeline until a key is pressed instead of tearing - it down immediately on EOS. - -- New fakeaudiosink element: mimics an audio sink and can be used for - testing and CI pipelines on systems where no audio system is - installed or running. It differs from fakesink in that it only - support audio caps and syncs to the clock by default like a normal - audio sink. It also implements the GstStreamVolume interface like - most audio sinks do. - -- New videocodectestsink element for video codec conformance testing: - Calculates MD5 checksums for video frames and skips any padding - whilst doing so. Can optionally also write back the video data with - padding removed into a file for easy byte-by-byte comparison with - reference data. - -Tools - -gst-inspect-1.0 +- this section will be filled in in due course -- Can sort the list of plugins by passing --sort=name as command line - option +Tracing framework and debugging improvements -gst-launch-1.0 +- this section will be filled in in due course -- will now error out on top-level properties that don’t exist and - which were silently ignored before -- On Windows the high-resolution clock is enabled now, which provides - better clock and timer performance on Windows (see Windows section - below for more details). - -gst-play-1.0 - -- New --start-position command line argument to start playback from - the specified position -- Audio can be muted/unmuted in interactive mode by pressing the m - key. -- On Windows the high-resolution clock is enabled now (see Windows - section below for more details) - -gst-device-monitor-1.0 - -- New --include-hidden command line argument to also show “hidden” - device providers - -ges-launch-1.0 +Tools -- New interactive mode that allows seeking and such. Can be disabled - by passing the --no-interactive argument on the command line. -- Option to forward tags -- Allow using an existing clip to determine the rendering format (both - topology and profile) via new --profile-from command line argument. +- this section will be filled in in due course GStreamer RTSP server -- GstRTSPMediaFactory gained API to disable RTCP - (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property). - Previously RTCP was always allowed for all RTSP medias. With this - change it is possible to disable RTCP completely, irrespective of - whether the client wants to do RTCP or not. - -- Make a mount point of / work correctly. While not allowed by the - RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the - wild. It is now possible to use / as a mount path in - gst-rtsp-server, e.g. rtsp://example.com/ would work with this now. - Note that query/fragment parts of the URI are not necessarily - correctly handled, and behaviour will differ between various - client/server implementations; so use it if you must but don’t bug - us if it doesn’t work with third party clients as you’d hoped. - -- multithreading fixes (races, refcounting issues, deadlocks) - -- ONVIF audio backchannel fixes - -- ONVIF trick mode optimisations - -- rtspclientsink: new "update-sdp" signal that allows updating the SDP - before sending it to the server via ANNOUNCE. This can be used to - add additional metadata to the SDP, for example. The order and - number of medias must not be changed, however. +- this section will be filled in in due course GStreamer VAAPI -- new AV1 decoder element (vaapiav1dec) - -- H.264 decoder: handle stereoscopic 3D video with frame packing - arrangement SEI messages - -- H.265 encoder: added Screen Content Coding extensions support - -- H.265 decoder: gained MAIN_444_12 profile support (decoded to - Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE) - -- vaapipostproc: gained BT2020 color standard support - -- vaapidecode: now generates caps templates dynamically at runtime in - order to advertise actually supported caps instead of all - theoretically supported caps. - -- GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM - device when a DRM display is used. It is ignored when other types of - displays are used. By default /dev/dri/renderD128 is used for DRM - display. +- this section will be filled in in due course GStreamer OMX -- subframe support in H.264/H.265 decoders +- this section will be filled in in due course GStreamer Editing Services and NLE -- framepositioner: new "operator" property to access blending modes in - the compositor -- timeline: Implement snapping to markers -- smart-mixer: Add support for d3d11compositor and glvideomixer -- titleclip: add "draw-shadow" child property -- ges:// URI support to define a timeline from a description. -- command-line-formatter - - Add track management to timeline description - - Add keyframe support -- ges-launch-1.0: - - Add an interactive mode where we can seek etc… - - Add option to forward tags - - Allow using an existing clip to determine the rendering format - (both topology and profile) via new --profile-from command line - argument. -- Fix static build +- this section will be filled in in due course GStreamer validate -- report: Add a way to force backtraces on reports even if not a - critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE) -- Add a flag to gst_validate_replace_variables_in_string() allow - defining how to resolve variables in structs -- Add gst_validate_bin_monitor_get_scenario() to get the bin monitor - scenario, which is useful for applications that use Validate - directly. -- Add an expected-values parameter to wait, message-type=XX allowing - more precise filtering of the message we are waiting for. -- Add config file support: each test can now use a config file for the - given media file used to test. -- Add support to check properties of object properties -- scenario: Add an "action-done" signal to signal when an action is - done -- scenario: Add a "run-command" action type -- scenario: Allow forcing running action on idle from scenario file -- scenario: Allow iterating over arrays in foreach -- scenario: Rename ‘interlaced’ action to ‘non-blocking’ -- scenario: Add a non-blocking flag to the wait signal +- this section will be filled in in due course GStreamer Python Bindings -- Fixes for Python 3.10 -- Various build fixes -- at least one known breaking change caused by g-i annotation changes - (see below) +- this section will be filled in in due course GStreamer C# Bindings -- Fix GstDebugGraphDetails enum -- Updated to latest GtkSharp -- Updated to include GStreamer 1.20 API +- this section will be filled in in due course GStreamer Rust Bindings and Rust Plugins -- The GStreamer Rust bindings are released separately with a different - release cadence that’s tied to gtk-rs, but the latest release has - already been updated for the upcoming new GStreamer 1.20 API (v1_20 - feature). - -- gst-plugins-rs, the module containing GStreamer plugins written in - Rust, has also seen lots of activity with many new elements and - plugins. See the New Elements section above for a list of new Rust - elements. +The GStreamer Rust bindings are released separately with a different +release cadence that’s tied to gtk-rs, but the latest release has +already been updated for the upcoming new GStreamer 1.22 API. + +gst-plugins-rs, the module containing GStreamer plugins written in Rust, +has also seen lots of activity with many new elements and plugins. + +What follows is a list of elements and plugins available in +gst-plugins-rs, so people don’t miss out on all those potentially useful +elements that have no C equivalent. + +- FIXME: add new elements + +Rust audio plugins + +- audiornnoise: New element for audio denoising which implements the + noise removal algorithm of the Xiph RNNoise library, in Rust +- rsaudioecho: Port of the audioecho element from gst-plugins-good + rsaudioloudnorm: Live audio loudness normalization element based on + the FFmpeg af_loudnorm filter +- claxondec: FLAC lossless audio codec decoder element based on the + pure-Rust claxon implementation +- csoundfilter: Audio filter that can use any filter defined via the + Csound audio programming language +- lewtondec: Vorbis audio decoder element based on the pure-Rust + lewton implementation + +Rust video plugins + +- cdgdec/cdgparse: Decoder and parser for the CD+G video codec based + on a pure-Rust CD+G implementation, used for example by karaoke CDs +- cea608overlay: CEA-608 Closed Captions overlay element +- cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT + subtitles) converter +- tttocea608: CEA-608 Closed Captions from timed-text converter +- mccenc/mccparse: MacCaption Closed Caption format encoder and parser +- sccenc/sccparse: Scenarist Closed Caption format encoder and parser +- dav1dec: AV1 video decoder based on the dav1d decoder implementation + by the VLC project +- rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e + encoder implementation +- rsflvdemux: Alternative to the flvdemux FLV demuxer element from + gst-plugins-good, not feature-equivalent yet +- rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust + implementations by the image-rs project + +Rust text plugins + +- textwrap: Element for line-wrapping timed text (e.g. subtitles) for + better screen-fitting, including hyphenation support for some + languages + +Rust network plugins + +- reqwesthttpsrc: HTTP(S) source element based on the Rust + reqwest/hyper HTTP implementations and almost feature-equivalent + with the main GStreamer HTTP source souphttpsrc +- s3src/s3sink: Source/sink element for the Amazon S3 cloud storage +- awstranscriber: Live audio to timed text transcription element using + the Amazon AWS Transcribe API + +Generic Rust plugins + +- sodiumencrypter/sodiumdecrypter: Encryption/decryption element based + on libsodium/NaCl +- togglerecord: Recording element that allows to pause/resume + recordings easily and considers keyframe boundaries +- fallbackswitch/fallbacksrc: Elements for handling potentially + failing (network) sources, restarting them on errors/timeout and + showing a fallback stream instead +- threadshare: Set of elements that provide alternatives for various + existing GStreamer elements but allow to share the streaming threads + between each other to reduce the number of threads +- rsfilesrc/rsfilesink: File source/sink elements as replacements for + the existing filesrc/filesink elements Build and Dependencies -- Meson 0.59 or newer is now required to build GStreamer. +- this section will be filled in in due course -- The GLib requirement has been bumped to GLib 2.56 or newer (from - March 2018). +gst-build -- The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8 - -- The souphttpsrc plugin is no longer linked against libsoup but - instead tries to pick up either libsoup2 or libsoup3 dynamically at - runtime. Distro packagers please ensure to add a dependency on one - of the libsoup runtimes to the gst-plugins-good package so that - there is actually a libsoup for the plugin to find! - -Explicit opt-in required for build of certain plugins with (A)GPL dependencies - -Some plugins have GPL- or AGPL-licensed dependencies and those plugins -will no longer be built by default unless you have explicitly opted in -to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson, -even if the required dependencies are available. - -See Building plugins with (A)GPL-licensed dependencies for more details -and a non-exhaustive list of plugins affected. - -gst-build: replaced by mono repository - -See mono repository section above and the GStreamer mono repository FAQ. +- this section will be filled in in due course Cerbero @@ -1602,297 +198,132 @@ 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 Cerbero improvements +General improvements -- Plugin removed: libvisual -- New plugins: rtpmanagerbad and rist +- this section will be filled in in due course -macOS / iOS specific Cerbero improvements +macOS / iOS -- XCode 12 support -- macOS OS release support is now future-proof, similar to iOS -- macOS Apple Silicon (ARM64) cross-compile support has been added, - including Universal binaries. There is a known bug regarding this on - ARM64. -- Running Cerbero itself on macOS Apple Silicon (ARM64) is currently - experimental and is known to have bugs +- this section will be filled in in due course -Windows specific Cerbero improvements +Windows -- Visual Studio 2022 support has been added -- bootstrap is faster since it requires building fewer build-tools - recipes on Windows -- package is faster due to better scheduling of recipe stages and - elimination of unnecessary autotools regeneration -- The following plugins are no longer built on Windows: - - a52dec (another decoder is still available in libav) - - dvdread - - resindvd +- this section will be filled in in due course Windows MSI installer -- no major changes +- this section will be filled in in due course -Linux specific Cerbero improvements +Linux -- Fedora, Debian OS release support is now more future-proof -- Amazon Linux 2 support has been added +- this section will be filled in in due course -Android specific Cerbero improvements +Android -- no major changes +- this section will be filled in in due course Platform-specific changes and improvements Android -- No major changes +- this section will be filled in in due course macOS and iOS -- applemedia: add ProRes support to vtenc and vtdec - -- The GStreamer.framework location is now relocatable and is not - required to be /Library/Frameworks/ - -- Cerbero now supports cross-compiling to macOS running on Apple - Silicon (ARM64), and Universal binaries are now available that can - be used on both X86_64 and ARM64 macOS. +- this section will be filled in in due course Windows -- On Windows the high-resolution clock is enabled now in the - gst-launch-1.0 and gst-play-1.0 command line tools, which provides - better clock and timer performance on Windows, at the cost of higher - power consumption. By default, without the high-resolution clock - enabled, the timer precision on Windows is system-dependent and may - be as bad as 15ms which is not good enough for many multimedia - applications. Developers may want to do the same in their Windows - applications if they think it’s a good idea for their application - use case, and depending on the Windows version they target. This is - not done automatically by GStreamer because on older Windows - versions (pre-Windows 10) this affects a global Windows setting and - also there’s a power consumption vs. performance trade-off that may - differ from application to application. - -- dxgiscreencapsrc now supports resolution changes - -- The wasapi2 audio plugin was rewritten and now has a higher rank - than the old wasapi plugin since it has a number of additional - features such as automatic stream routing, and no - known-but-hard-to-fix issues. The plugin is always built if the - Windows 10 SDK is available now. - -- The wasapi device providers now detect and notify dynamic device - additions/removals - -- d3d11screencapturesrc: new desktop capture element, including - GstDeviceProvider implementation to enumerate/select target monitors - for capture. - -- Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs - (d3d11av1dec, d3d11mpeg2dec) - -- VP9 decoding got more reliable and stable thanks to a newly written - codec parser - -- Support for decoding interlaced H.264/AVC streams +- this section will be filled in in due course -- Hardware-accelerated video deinterlacing (d3d11deinterlace) and - video mixing (d3d11compositor) - -- Video mixing with the Direct3D11 API (d3d11compositor) +Linux -- MediaFoundation API based hardware encoders gained the ability to - receive Direct3D11 textures as an input +- this section will be filled in in due course -- Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff - you’ll find in the 1.20 release” describes many of the - Windows-related improvements in more detail +Documentation improvements -Linux +- this section will be filled in in due course -- bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink, - as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio - encoder (ldacenc) +Possibly Breaking Changes -- kmssink: gained support for NV24, NV61, RGB16/BGR16 formats; - auto-detect NVIDIA Tegra driver +- this section will be filled in in due course -Documentation improvements +Known Issues -- hardware-accelerated GPU plugins will now no longer always list all - the element variants for all available GPUs, since those are - system-dependent and it’s confusing for users to see those in the - documentation just because the GStreamer developer who generated the - docs had multiple GPUs to play with at the time. Instead just show - the default elements. - -Possibly Breaking and Other Noteworthy Behavioural Changes - -- gst_parse_launch(), gst_parse_bin_from_description() and friends - will now error out when setting properties that don’t exist on - top-level bins. They were silently ignored before. - -- The GstWebRTC library does not expose any objects anymore with - public fields. Instead properties have been added to replace that - functionality. If you are accessing such fields in your application, - switch to the corresponding properties. - -- playbin and uridecodebin now emit the source-setup signal before the - element is added to the bin and linked so that the source element is - already configured before any scheduling query comes in, which is - useful for elements such as appsrc or giostreamsrc. - -- The source element inside urisourcebin (used inside uridecodebin3 - which is used inside playbin3) is no longer called "source". This - shouldn’t affect anyone hopefully, because there’s a "setup-source" - signal to configure the source element and no one should rely on - names of internal elements anyway. - -- The vp8enc element now expects bps (bits per second) for the - "temporal-scalability-target-bitrate" property, which is consistent - with the "target-bitrate" property. Since additional configuration - is required with modern libvpx to make temporal scaling work anyway, - chances are that very few people will have been using this property - -- vp8enc and vp9enc now default to “good quality” for the "deadline" - property rather then “best quality”. Having the deadline set to best - quality causes the encoder to be absurdly slow, most real-life users - will want the good quality tradeoff instead. - -- The experimental GstTranscoder library API in gst-plugins-bad was - changed from a GObject signal-based notification mechanism to a - GstBus/message-based mechanism akin to GstPlayer/GstPlay. - -- MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands: - timestamps passed by the application should be in running time now, - since users of the API can’t really be expected to predict the local - PTS of the muxer. - -- The GstContext used by souphttpsrc to share the session between - multiple element instances has changed. Previously it provided - direct access to the internal SoupSession object, now it only - provides access to an opaque, internal type. This change is - necessary because SoupSession is not thread-safe at all and can’t be - shared safely between arbitrary external code and souphttpsrc. - -- Python bindings: GObject-introspection related Annotation fixes have - led to a case of a GstVideo.VideoInfo-related function signature - changing in the Python bindings (possibly one or two other cases - too). This is for a function that should never have been exposed in - the first place though, so the bindings are being updated to throw - an exception in that case, and the correct replacement API has been - added in form of an override. +- this section will be filled in in due course -Known Issues +- Known regressions/blockers: -- nothing in particular at this point (but also see possibly breaking - changes section above) + - FIXME Contributors -Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro -González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley, -Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew -Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa -Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien -Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong, -Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko -Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris -White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone, -david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar, -Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet, -Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot, -Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice -Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier -Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson, -George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther, -Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan) -Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut -Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro, -Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade -Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan -Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme -Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John -Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose -Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig -Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut -Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew -Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke -Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut, -Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp, -Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule, -Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter, -Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi, -Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen, -Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier -Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand, -Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał -Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh -Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul -Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin -Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan -Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei -Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M, -Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling -Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp -Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui, -tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk, -Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne -Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier -Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang -Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun, -Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite, -Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García, -Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel -Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine, -fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger, -He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig), -Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis, -Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark -Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters, -Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert -Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang, -Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo -Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do, -Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim -Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao, -Yoshiharu Hirose, Zhao, +Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, +Aleix Conchillo Flaqué, Alicia Boya García, Alireza Miryazdi, Andoni +Morales Alastruey, Andrew Pritchard, Bastian Krause, Bastien Nocera, +Benjamin Gaignard, Brad Hards, Branko Subasic, Bruce Liang, Camilo Celis +Guzman, Carlos Falgueras García, Carlos Rafael Giani, Célestin Marot, +Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, +Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel Almeida, +Daniel Morin, Daniel Stone, Danny Smith, David Svensson Fors, Devin +Anderson, Diogo Goncalves, Dmitry Osipenko, Dongil Park, Doug Nazar, +Edward Hervey, Eli Schwartz, Elliot Chen, Enrique Ocaña González, Eric +Knapp, Erwann Gouesbet, Fabian Orccon, Fabrice Fontaine, Fan F He, +fduncanh, Filip Hanes, Florian Zwoch, Fuga Kato, George Kiagiadakis, +Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff, +Heiko Becker, He Junyan, Hoonhee Lee, Hosang Lee, Hou Qi, Ignacio Casal +Quinteiro, Ignazio Pillai, Igor V. Kovalenko, Jakub Adam, James Cowgill, +James Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Jianhui +Dai, jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan +Petridis, Joseph Donofry, Jose Quaresma, Junsoo Park, Khem Raj, Krystian +Wojtas, László Károlyi, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek +Vasut, Mark Nauwelaerts, Martin Dørum, Martin Reboredo, Mart Raudsepp, +Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias Clasen, +Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Mikhail Fludkov, Ming +Qian, Myles Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, +Patricia Muscalu, Paweł Stawicki, Philippe Normand, Philipp Zabel, +Pierre Bourré, Piotr Brzeziński, Rabindra Harlalka, Rafael Caricio, +Rafael Sobral, Raul Tambre, Robert Mader, Robert Rosengren, Rouven +Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul Lee, Sebastian +Dröge, Sebastian Fricke, Sebastian Groß, Sebastian Mueller, Sebastian +Wick, Sergei Kovalev, Seungha Yang, Sherrill Lin, Shingo Kitagawa, +Stéphane Cerveau, Thibault Saunier, Tim Mooney, Tim-Philipp Müller, +Tomasz Andrzejak, Tom Schuring, Tong Wu, toor, Tristan Matthews, Tulio +Beloqui, U. Artie Eoff, Víctor Manuel Jáquez Leal, Vincent Cheah Beng +Keat, Vivia Nikolaidou, Vivienne Watermeier, WANG Xuerui, Wonchul Lee, +Wu Tong, Xabier Rodriguez Calvar, Xavier Claessens, Yatin Maan, Yeongjin +Jeong, Zebediah Figura, Zhao Zhili, Zhiyuan Liu, … and many others who have contributed bug reports, translations, sent suggestions or helped testing. -Stable 1.20 branch +Stable 1.22 branch -After the 1.20.0 release there will be several 1.20.x bug-fix releases +After the 1.22.0 release there will be several 1.22.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.20.x bug-fix releases will be made from -the git 1.20 branch, which will be a stable branch. +a bug-fix release usually. The 1.22.x bug-fix releases will be made from +the git 1.22 branch, which will be a stable branch. -1.20.0 +1.22.0 -1.20.0 was released on 3 February 2022. +1.22.0 is scheduled to be released around December 2022. -Schedule for 1.22 +Schedule for 1.24 -Our next major feature release will be 1.22, and 1.21 will be the -unstable development version leading up to the stable 1.22 release. The -development of 1.21/1.22 will happen in the git main branch. +Our next major feature release will be 1.24, and 1.23 will be the +unstable development version leading up to the stable 1.24 release. The +development of 1.23/1.24 will happen in the git main branch of the +GStreamer mono repository. -The plan for the 1.22 development cycle is yet to be confirmed. Assuming -no major project-wide reorganisations in the 1.22 cycle we might try and -aim for a release around August 2022. +The plan for the 1.24 development cycle is yet to be confirmed. -1.22 will be backwards-compatible to the stable 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. +1.24 will be backwards-compatible to the stable 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 Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan, -Sebastian Dröge and Seungha Yang. +contributions from … License: CC BY-SA 4.0 diff --git a/subprojects/gstreamer/RELEASE b/subprojects/gstreamer/RELEASE index d358469..99eeb16 100644 --- a/subprojects/gstreamer/RELEASE +++ b/subprojects/gstreamer/RELEASE @@ -1,17 +1,15 @@ -This is GStreamer core 1.20.0. +This is GStreamer core 1.21.1. -The GStreamer team is thrilled to announce a new major feature release -of your favourite cross-platform multimedia framework! +GStreamer 1.21 is the unstable development branch leading up to the next major +stable version which will be 1.22. -As always, this release is again packed with new features, bug fixes and -other improvements. +The 1.21 development series adds new features on top of the 1.20 series and is +part of the API and ABI-stable 1.x release series of the GStreamer multimedia +framework. -The 1.20 release series adds new features on top of the 1.18 series and is -part of the API and ABI-stable 1.x release series. +Full release notes will one day be found at: -Full release notes can be found at: - - https://gstreamer.freedesktop.org/releases/1.20/ + https://gstreamer.freedesktop.org/releases/1.22/ Binaries for Android, iOS, Mac OS X and Windows will usually be provided shortly after the release. @@ -80,7 +78,8 @@ for more details. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). -There is also a #gstreamer IRC channel on the OFTC IRC network. +There is also a #gstreamer IRC channel on the OFTC IRC network, which is +also bridged into the Matrix network. Please do not submit support requests in GitLab, we only use it for bug tracking and merge requests review. diff --git a/subprojects/gstreamer/gstreamer.doap b/subprojects/gstreamer/gstreamer.doap index 0129e65..0a7568e 100644 --- a/subprojects/gstreamer/gstreamer.doap +++ b/subprojects/gstreamer/gstreamer.doap @@ -40,6 +40,16 @@ hierarchy, and a set of media-agnostic core elements. + 1.21.1 + main + + 2022-10-04 + + + + + + 1.20.0 main diff --git a/subprojects/gstreamer/meson.build b/subprojects/gstreamer/meson.build index c719e79..5ef0242 100644 --- a/subprojects/gstreamer/meson.build +++ b/subprojects/gstreamer/meson.build @@ -1,5 +1,5 @@ project('gstreamer', 'c', - version : '1.21.0.1', + version : '1.21.1', meson_version : '>= 0.62', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) -- 2.7.4