Release 1.22.0
[platform/upstream/gstreamer.git] / subprojects / gst-plugins-good / NEWS
index 0e581c3..9802493 100644 (file)
@@ -1,23 +1,11 @@
-GStreamer 1.20 Release Notes
+GStreamer 1.22 Release Notes
 
-GStreamer 1.20 has not been released yet. It is scheduled for release
-around October/November 2021.
+GStreamer 1.22.0 was originally released on 23 January 2023.
 
-1.19.x is the unstable development version that is being developed in
-the git main branch and which will eventually result in 1.20, and 1.19.2
-is the current development release in that series
-
-It is expected that feature freeze will be in early October 2021,
-followed by one or two 1.19.9x pre-releases and the new 1.20 stable
-release around October/November 2021.
-
-1.20 will be backwards-compatible to the stable 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.20/ for the latest
+See https://gstreamer.freedesktop.org/releases/1.22/ for the latest
 version of this document.
 
-Last updated: Wednesday 22 September 2021, 18:00 UTC (log)
+Last updated: Monday 23 January 2023, 17:00 UTC (log)
 
 Introduction
 
@@ -30,270 +18,1222 @@ fixes and other improvements.
 
 Highlights
 
--   this section will be completed in due course
+-   AV1 video codec support improvements
+-   New HLS, DASH and Microsoft Smooth Streaming adaptive streaming
+    clients
+-   Qt6 support for rendering video inside a QML scene
+-   Minimal builds optimised for binary size, including only the
+    individual elements needed
+-   Playbin3, Decodebin3, UriDecodebin3, Parsebin enhancements and
+    stabilisation
+-   WebRTC simulcast support and support for Google Congestion Control
+-   WebRTC-based media server ingestion/egress (WHIP/WHEP) support
+-   New easy to use batteries-included WebRTC sender plugin
+-   Easy RTP sender timestamp reconstruction for RTP and RTSP
+-   ONVIF timed metadata support
+-   New fragmented MP4 muxer and non-fragmented MP4 muxer
+-   New plugins for Amazon AWS storage and audio transcription services
+-   New gtk4paintablesink and gtkwaylandsink renderers
+-   New videocolorscale element that can convert and scale in one go for
+    better performance
+-   High bit-depth video improvements
+-   Touchscreen event support in navigation API
+-   Rust plugins now shipped in macOS and Windows/MSVC binary packages
+-   H.264/H.265 timestamp correction elements for PTS/DTS reconstruction
+    before muxers
+-   Improved design for DMA buffer sharing and modifier handling for
+    hardware-accelerated video decoders/encoders/filters and
+    capturing/rendering on Linux
+-   Video4Linux2 hardware accelerated decoder improvements
+-   CUDA integration and Direct3D11 integration and plugin improvements
+-   New H.264 / AVC, H.265 / HEVC and AV1 hardware-accelerated video
+    encoders for AMD GPUs using the Advanced Media Framework (AMF) SDK
+-   applemedia: H.265 / HEVC video encoding + decoding support
+-   androidmedia: H.265 / HEVC video encoding support
+-   New “force-live” property for audiomixer, compositor, glvideomixer,
+    d3d11compositor etc.
+-   Lots of new plugins, features, performance improvements and bug
+    fixes
 
 Major new features and changes
 
-Noteworthy new features and API
+AV1 video codec support improvements
+
+AV1 is a royalty free next-generation video codec by AOMedia and a free
+alternative to H.265/HEVC.
+
+While supported in earlier versions of GStreamer already, this release
+saw a lot of improvements across the board:
+
+-   Support for hardware encoding and decoding via VAAPI/VA, AMF, D3D11,
+    NVCODEC, QSV and Intel MediaSDK. Hardware codecs for AV1 are slowly
+    becoming available in embedded systems and desktop GPUs (AMD, Intel,
+    NVIDIA), and these can now be used via GStreamer.
+
+-   New AV1 RTP payloader and depayloader elements.
+
+-   New encoder settings in the AOM reference encoder-based av1enc
+    element.
+
+-   Various improvements in the AV1 parser and in the MP4/Matroska/WebM
+    muxers/demuxers.
+
+-   dav1d and rav1e based software decoder/encoder elements shipped as
+    part of the binaries.
+
+-   AV1 parser improvements and various bugfixes all over the place.
+
+Touchscreen event support in Navigation API
+
+The Navigation API supports the sending of key press events and mouse
+events through a GStreamer pipeline. Typically these will be picked up
+by a video sink on which these events happen and then the event is
+transmitted into the pipeline so it can be handled by elements inside
+the pipeline if it wasn’t handled by the application.
+
+This has traditionally been used for DVD menu support, but can also be
+used to forward such inputs to source elements that render a web page
+using a browser engine such as WebKit or Chromium.
+
+This API has now gained support for touchscreen events, and this has
+been implemented in various plugins such as the GTK, Qt, XV, and x11
+video sinks as well as the wpevideosrc element.
+
+GStreamer CUDA integration
+
+-   New gst-cuda library
+-   integration with D3D11 and NVIDIA dGPU NVMM elements
+-   new cudaconvertscale element
+
+GStreamer Direct3D11 integration
+
+-   New gst-d3d11 public library
+    -   gst-d3d11 library is not integrated with GStreamer documentation
+        system yet. Please refer to the examples
+-   d3d11screencapture: Add Windows Graphics Capture API based capture
+    mode, including Win32 application window capturing
+-   d3d11videosink and d3d11convert can support flip/rotation and crop
+    meta
+-   d3d11videosink: New emit-present property and present signal so that
+    applications can overlay an image on Direct3D11 swapchain’s
+    backbuffer via Direct3D/Direct2D APIs. See also C++ and Rust
+    examples
+-   d3d11compositor supports YUV blending/composing without intermediate
+    RGB(A) conversion to improve performance
+-   Direct3D11 video decoders are promoted to GST_RANK_PRIMARY or
+    higher, except for the MPEG2 decoder
+
+H.264/H.265 timestamp correction elements
+
+-   Muxers are often picky and need proper PTS/DTS timestamps set on the
+    input buffers, but that can be a problem if the encoded input media
+    stream comes from a source that doesn’t provide proper signalling of
+    DTS, such as is often the case for RTP, RTSP and WebRTC streams or
+    Matroska container files. Theoretically parsers should be able to
+    fix this up, but it would probably require fairly invasive changes
+    in the parsers, so two new elements h264timestamper and
+    h265timestamper bridge the gap in the meantime and can reconstruct
+    missing PTS/DTS.
+
+Easy sender timestamp reconstruction for RTP and RTSP
+
+-   it was always possible to reconstruct and retrieve the original RTP
+    sender timestamps in GStreamer, but required a fair bit of
+    understanding of the internal mechanisms and the right property
+    configuration and clock setup.
+
+-   rtspsrc and rtpjitterbuffer gained a new
+    “add-reference-timestamp-meta” property that if set puts the
+    original absolute reconstructed sender timestamps on the output
+    buffers via a meta. This is particularly useful if the sender is
+    synced to an NTP clock or PTP clock. The original sender timestamps
+    are either based on the RTCP NTP times, NTP RTP header extensions
+    (RFC6051) or RFC7273-style clock signalling.
+
+Qt6 support
+
+-   new qml6glsink element for Qt6 similar to the existing Qt5 element.
+    Matching source and overlay elements will hopefully follow in the
+    near future.
+
+OpenGL + Video library enhancements
+
+-   Support for new video formats (NV12_4L4, NV12_16L32S, NV12_8L128,
+    NV12_10BE_8L128) and dmabuf import in more formats (Y410, Y212_LE,
+    Y212_BE, Y210, NV21, NV61)
+
+-   Improved support for tiled formats with arbitrary tile dimensions,
+    as needed by certain hardware decoders/encoders
+
+-   glvideomixer: New “crop-left,”crop-right, “crop-top” and
+    “crop-bottom” pad properties for cropping inputs
+
+-   OpenGL support for gst_video_sample_convert():
+
+    -   Used for video snapshotting and thumbnailing, to convert buffers
+        retrieved from appsinks or sink “last-sample” properties in
+        JPG/PNG thumbnails.
+    -   This function can now take samples and buffers backed by GL
+        textures as input and will automatically plug a gldownload
+        element in that case.
+
+High bit-depth support (10, 12, 16 bits per component value) improvements
+
+-   compositor can now handle any supported input format and also mix
+    high-bitdepth (10-16 bit) formats (naively)
+
+-   videoflip has gained support for higher bit depth formats.
+
+-   vp9enc, vp9dec now support 12-bit formats and also 10-bit 4:4:4
+
+WebRTC
+
+-   Allow insertion of bandwidth estimation elements e.g. for Google
+    Congestion Control (GCC) support
+
+-   Initial support for sending or receiving simulcast streams
+
+-   Support for asynchronous host resolution for STUN/TURN servers
+
+-   GstWebRTCICE was split into base classes and implementation to make
+    it possible to plug custom ICE implementations
+
+-   webrtcsink: batteries-included WebRTC sender (Rust)
+
+-   whipsink: WebRTC HTTP ingest (WHIP) to a MediaServer (Rust)
+
+-   whepsrc: WebRTC HTTP egress (WHEP) from a MediaServer (Rust)
+
+-   Many other improvements and bug fixes
+
+New HLS, DASH and MSS adaptive streaming clients
+
+A new set of “adaptive demuxers” to support HLS, DASH and MSS adaptive
+streaming protocols has been added. They provide improved performance,
+new features and better stream compatibility compared to the previous
+elements. These new elements require a “streams-aware” pipeline such as
+playbin3, uridecodebin3 or urisourcebin.
+
+The previous elements’ design prevented implementing several use-cases
+and fixing long-standing issues. The new elements were re-designed from
+scratch to tackle those:
+
+-   Scheduling Only 3 threads are present, regardless of the number of
+    streams selected. One in charge of downloading fragments and
+    manifests, one in charge of outputting parsed data downstream, and
+    one in charge of scheduling. This improves performance, resource
+    usage and latency.
+
+-   Better download control The elements now directly control the
+    scheduling and download of manifests and fragments using libsoup
+    directly instead of depending on external elements for downloading.
+
+-   Stream selection, only the selected streams are downloaded. This
+    improves bandwith usage. Switching stream is done in such a way to
+    ensure there are no gaps, meaning the new stream will be switched to
+    only once enough data for it has been downloaded.
+
+-   Internal parsing, the downloaded streams are parsed internally. This
+    allows the element to fully respect the various specifications and
+    offer accurate buffering, seeking and playback. This is especially
+    important for HLS streams which require parsing for proper
+    positioning of streams.
+
+-   Buffering and adaptive rate switching, the new elements handle
+    buffering internally which allows them to have a more accurate
+    visibility of which bandwith variant to switch to.
+
+Playbin3, Decodebin3, UriDecodebin3, Parsebin improvements
+
+The “new” playback elements introduced in 1.18 (playbin3 and its various
+components) have been refactored to allow more use-cases and improve
+performance. They are no longer considered experimental, so applications
+using the legacy playback elements (playbin and (uri)decodebin) can
+migrate to the new components to benefit from these improvements.
+
+-   Gapless The “gapless” feature allows files and streams to be
+    fetched, buffered and decoded in order to provide a “gapless”
+    output. This feature has been refactored extensively in the new
+    components:
+    -   A single (uri)decodebin3 (and therefore a single set of
+        decoders) is used. This improves memory and cpu usage, since on
+        identical codecs a single decoder will be used.
+    -   The “next” stream to play will be pre-rolled “just-in-time”
+        thanks to the buffering improvements in urisourcebin (see below)
+    -   This feature is now handled at the uridecodebin3 level.
+        Applications that wish to have a “gapless” stream and process it
+        (instead of just outputting it, for example for transcoding,
+        retransmission, …) can now use uridecodebin3 directly. Note that
+        a streamsynchronizer element is required in that case.
+-   Buffering improvements The urisourcebin element is in charge of
+    fetching and (optionally) buffering/downloading the stream. It has
+    been extended and improved:
+    -   When the parse-streams property is used (by default in
+        uridecodebin3 and playbin3), compatible streams will be demuxed
+        and parsed (via parsebin) and buffering will be done on the
+        elementary streams. This provides a more accurate handling of
+        buffering. Previously buffering was done on a best-effort basis
+        and was mostly wrong (i.e. downloading more than needed).
+    -   Applications can use urisourcebin with this property as a
+        convenient way of getting elementary streams from a given URI.
+    -   Elements can handle buffering themselves (such as the new
+        adaptive demuxers) by answering the GST_QUERY_BUFFERING query.
+        In that case urisourcebin will not handle it.
+-   Stream Selection Efficient stream selection was previously only
+    possible within decodebin3. The downside is that this meant that
+    upstream elements had to provide all the streams from which to chose
+    from, which is inefficient. With the addition of the
+    GST_QUERY_SELECTABLE query, this can now be handled by elements
+    upstream (i.e. sources)
+    -   Elements that can handle stream selection internally (such as
+        the new adaptive demuxer elements) answer that query, and handle
+        the stream selection events themselves.
+    -   In this case, decodebin3 will always process all streams that
+        are provided to it.
+-   Instant URI switching This new feature allows switching URIs
+    “instantly” in playbin3 (and uridecodebin3) without having to change
+    states. This mimics switching channels on a television.
+    -   If compatible, decoders will be re-used, providing lower
+        latency/cpu/memory than by switching states.
+    -   This is enabled by setting the instant-uri property to true,
+        setting the URI to switch to immediately, and then disabling the
+        instant-uri property again afterwards.
+-   playbin3, decodebin3, uridecodebin3, parsebin, and urisrc are no
+    longer experimental
+    -   They were originally marked as ‘technology preview’ but have
+        since seen extensive usage in production settings, so are
+        considered ready for general use now.
+
+Fraunhofer AAC audio encoder HE-AAC and AAC-LD profile support
+
+-   fdkaacenc:
+    -   Support for encoding to HE-AACv1 and HE-AACv2 profile
+    -   Support for encoding to AAC Low Delay (LD) profile
+    -   Advanced bitrate control options via new “rate-control”,
+        “vbr-preset”, “peak-bitrate”, and “afterburner” properties
+
+RTP rapid synchronization support in the RTP stack (RFC6051)
+
+RTP provides several mechanisms how streams can be synchronized relative
+to each other, and how absolute sender times for RTP packets can be
+obtained. One of these mechanisms is via RTCP, which has the
+disadvantage that the synchronization information is only distributed
+out-of-band and usually some time after the start.
+
+GStreamer’s RTP stack, specifically the rtpbin, rtpsession and
+rtpjitterbuffer elements, now also have support for retrieving and
+sending the same synchronization information in-band via RTP header
+extensions according to RFC6051 (Rapid Synchronisation of RTP Flows).
+Only 64-bit timestamps are supported currently.
+
+This provides per packet synchronization information from the very
+beginning of a stream and allows accurate inter-stream, and (depending
+on setup) inter-device, synchronization at the receiver side.
+
+ONVIF XML Timed Metadata support
+
+The ONVIF standard implemented by various security cameras also
+specifies a format for timed metadata that is transmitted together with
+the audio/video streams, usually over RTSP.
+
+Support for this timed metadata is implemented in the MP4 demuxer now as
+well as the new fragmented MP4 muxer and the new non-fragmented MP4
+muxer from the GStreamer Rust plugins. Additionally, the new onvif
+plugin ‒ which is part of the GStreamer Rust plugins ‒ provides general
+elements for handling the metadata and e.g. overlaying certain parts of
+it over a video stream.
+
+As part of this support for absolute UTC times was also implemented
+according to the requirements of the ONVIF standards in the
+corresponding elements.
+
+MP3 gapless playback support
+
+While MP3 can probably considered a legacy format at this point, a new
+feature was added with this release.
+
+When playing back plain MP3 files, i.e. outside a container format,
+switches between files can now be completely gapless if the required
+metadata is provided inside the file. There is no standardized metadata
+for this, but the LAME MP3 encoder writes metadata that can be parsed by
+the mpegaudioparse element now and forwarded to decoders for ensuring
+removal of padding samples at the front and end of MP3 files.
+
+“force-live” property for audio + video aggregators
+
+This is a quality of life fix for playout and streaming applications
+where it is common to have audio and video mixer elements that should
+operate in live mode from the start and produce output continuously.
+
+Often one would start a pipeline without any inputs hooked up to these
+mixers in the beginning, and up until now there was no way to easily
+force these elements into live mode from the start. One would have to
+add an initial live video or audio test source as dummy input to achieve
+this.
+
+The new “force-live” property makes these audio and video aggregators
+start in live mode without the need for any dummy inputs, which is
+useful for scenarios where inputs are only added after starting the
+pipeline.
+
+This new property should usually be used in connection with the
+“min-upstream-latency” property, i.e. you should always set a non-0
+minimum upstream latency then.
+
+This is now supported in all GstAudioAggregator and GstVideoAggregator
+subclasses such as audiomixer, audiointerleave, compositor,
+glvideomixer, d3d11compositor, etc.
+
+New elements and plugins
+
+-   new cudaconvertscale element that can convert and scale in one pass
+
+-   new gtkwaylandsink element based on gtksink, but similar to
+    waylandsink and uses Wayland APIs directly instead of rendering with
+    Gtk/Cairo primitives. This approach is only compatible with Gtk3,
+    and like gtksink this element only supports Gtk3.
+
+-   new h264timestamper and h265timestamper elements to reconstruct
+    missing pts/dts from inputs that might not provide them such as
+    e.g. RTP/RTSP/WebRTC inputs (see above)
+
+-   mfaacdec, mfmp3dec: Windows MediaFoundation AAC and MP3 decoders
+
+-   new msdkav1enc AV1 video encoder element
+
+-   new nvcudah264enc, nvcudah265enc, nvd3d11h264enc, and nvd3d11h265enc
+    NVIDIA GPU encoder elements to support zero-copy encoding, via CUDA
+    and Direct3D11 APIs, respectively
+
+-   new nvautogpuh264enc and nvautogpuh265enc NVIDIA GPU encoder
+    elements: The auto GPU elements will automatically select a target
+    GPU instance in case multiple NVIDIA desktop GPUs are present, also
+    taking into account the input memory. On Windows CUDA or Direct3D11
+    mode will be determined by the elements automatically as well. Those
+    new elements are useful if target GPU and/or API mode (either CUDA
+    or Direct3D11 in case of Windows) is undeterminable from the encoder
+    point of view at the time when pipeline is configured, and therefore
+    lazy target GPU and/or API selection are required in order to avoid
+    unnecessary memory copy operations.
+
+-   new nvav1dec AV1 NVIDIA desktop GPU decoder element
+
+-   new qml6glsink element to render video with Qt6
+
+-   qsv: New Intel OneVPL/MediaSDK (a.k.a Intel Quick Sync) based
+    decoder and encoder elements, with gst-d3d11 (on Windows) and gst-va
+    (on Linux) integration
+
+    -   Support multi-GPU environment, for example, concurrent video
+        encoding using Intel iGPU and dGPU in a single pipeline
+    -   H.264 / H.265 / VP9 and JPEG decoders
+    -   H.264 / H.265 / VP9 / AV1 / JPEG encoders with dynamic encoding
+        bitrate update
+    -   New plugin does not require external SDK for building on Windows
+
+-   vulkanoverlaycompositor: new vulkan overlay compositor element to
+    overlay upstream GstVideoOverlayCompositonMeta onto the video
+    stream.
 
--   this section will be filled in in due course
+-   vulkanshaderspv: performs operations with SPIRV shaders in Vulkan
 
-New elements
+-   win32ipcvideosink, win32ipcvideosrc: new shared memory videosrc/sink
+    elements for Windows
 
--   this section will be filled in in due course
+-   wicjpegdec, wicpngdec: Windows Imaging Component (WIC) based JPEG
+    and PNG decoder elements.
+
+-   Many exciting new Rust elements, see Rust section below
 
 New element features and additions
 
--   this section will be filled in in due course
+-   audioconvert: Dithering now uses a slightly slower, less biased PRNG
+    which results in better quality output. Also dithering can now be
+    enabled via the new “dithering-threshold” property for target bit
+    depths of more than 20 bits.
+
+-   av1enc: Add “keyframe-max-dist” property for controlling max
+    distance between keyframes, as well as “enc-pass”, “keyframe-mode”,
+    “lag-in-frames” and “usage-profile” properties.
+
+-   cccombiner: new “output-padding” property
+
+-   decklink: Add support for 4k DCI, 8k/UHD2 and 8k DCI modes
+
+-   dvbsubenc: Support for >SD resolutions is working correctly now.
+
+-   fdkaacenc: Add HE-AAC / HE-AACv2 profile support
+
+-   glvideomixer: New “crop-left,”crop-right, “crop-top” and
+    “crop-bottom” pad properties for cropping inputs
+
+-   gssink: new ‘content-type’ property. Useful when one wants to upload
+    a video as video/mp4 instead of ’video/quicktime` for example.
+
+-   jpegparse: Rewritten using the common parser library
+
+-   msdk:
+
+    -   new msdkav1enc AV1 video encoder element
+    -   msdk decoders: Add support for Scaler Format Converter (SFC) on
+        supported Intel platforms for hardware accelerated conversion
+        and scaling
+    -   msdk encoders: support import of dmabuf, va memory and D3D11
+        memory
+    -   msdk encoders: add properties for low delay bitrate control and
+        max frame sizes for I/P frames
+    -   msdkh264enc, msdkh265enc: more properties to control intra
+        refresh
+    -   note that on systems with multi GPUs the Windows D3D11
+        integration might only work reliably if the Intel GPU is the
+        primary GPU
+
+-   mxfdemux: Add support for Canon XF-HEVC
+
+-   openaptx: Support the freeaptx library
+
+-   qroverlay:
+
+    -   new “qrcode-case-sensitive” property allows encoding case
+        sensitive strings like wifi SSIDs or passwords.
+    -   added the ability to pick up data to render from an
+        upstream-provided custom GstQROverlay meta
+
+-   qtdemux: Add support for ONVIF XML Timed MetaData and AVC-Intra
+    video
+
+-   rfbsrc now supports the uri handler interface, so applications can
+    use RFB/VNC sources in uridecodebin(3) and playbin, with
+    e.g. rfb://:password@10.1.2.3:5903?shared=1
+
+-   rtponviftimestamp: Add support for using reference timestamps
+
+-   rtpvp9depay now has the same keyframe-related properties as
+    rtpvp8depay and rtph264depay: “request-keyframe” and
+    “wait-for-keyframe”
+
+-   rtspsrc: Various RTSP servers are using invalid URL operations for
+    constructing the control URL. Until GStreamer 1.16 these worked
+    correctly because GStreamer was just appending strings itself to
+    construct the control URL, but starting version 1.18 the correct URL
+    operations were used. With GStreamer 1.22, rtspsrc now first tries
+    with the correct control URL and if that fails it will retry with
+    the wrongly constructed control URL to restore support for such
+    servers.
+
+-   rtspsrc and rtpjitterbuffer gained a new
+    “add-reference-timestamp-meta” property that makes them put the
+    unmodified original sender timestamp on output buffers for NTP or
+    PTP clock synced senders
+
+-   srtsrc, srtsink: new “auto-reconnect” property to make it possible
+    to disable automatic reconnects (in caller mode) and make the
+    elements post an error immediately instead; also stats improvements
+
+-   srtsrc: new “keep-listening” property to avoid EOS on disconnect and
+    keep the source running while it waits for a new connection.
+
+-   videocodectestsink: added YUV 4:2:2 support
+
+-   wasapi2src: Add support for process loopback capture
+
+-   wpesrc: Add support for modifiers in key/touch/pointer events
 
 Plugin and library moves
 
--   this section will be filled in in due course
+-   The xingmux plugin has been moved from gst-plugins-ugly into
+    gst-plugins-good.
 
--   There were no plugin moves or library moves in this cycle.
+-   The various Windows directshow plugins in gst-plugins-bad have been
+    unified into a single directshow plugin.
 
 Plugin removals
 
-The following elements or plugins have been removed:
-
--   this section will be filled in in due course
+-   The dxgiscreencapsrc element has been removed, use
+    d3d11screencapturesrc instead
 
 Miscellaneous API additions
 
--   this section will be filled in in due course
+-   GST_AUDIO_FORMAT_INFO_IS_VALID_RAW() and
+    GST_VIDEO_FORMAT_INFO_IS_VALID_RAW() can be used to check if a
+    GstAudioFormatInfo or GstVideoFormatInfo has been initialised to a
+    valid raw format.
+
+-   Video SEI meta: new GstVideoSEIUserDataUnregisteredMeta to carry
+    H.264 and H.265 metadata from SEI User Data Unregistered messages.
+
+-   vulkan: Expose gst_vulkan_result_to_string()
 
 Miscellaneous performance, latency and memory optimisations
 
--   this section will be filled in in due course
+-   liborc 0.4.33 adds support for aarch64 (64-bit ARM) architecture
+    (not enabled by default on Windows yet though) and improvements for
+    32-bit ARM and should greatly enhance performance for certain
+    operations that use ORC.
+
+-   as always there have been plenty of performance, latency and memory
+    optimisations all over the place.
 
 Miscellaneous other changes and enhancements
 
--   this section will be filled in in due course
+-   the audio/video decoder base classes will not consider decoding
+    errors a hard error by default anymore but will continue trying to
+    decode. Previously more than 10 consecutive errors were considered a
+    hard error but this caused various partially broken streams to fail.
+    The threshold is configurable via the “max-errors” property.
+
+-   compatibility of the GStreamer PTP clock implementation with
+    different PTP server implementations was improved, and
+    synchronization is achieved successfully in various scenarios that
+    failed before.
 
 Tracing framework and debugging improvements
 
--   this section will be filled in in due course
+New tracers
+
+-   buffer-lateness: Records lateness of buffers and the reported
+    latency for each pad in a CSV file. Comes with a script for
+    visualisation.
+
+-   pipeline-snapshot: Creates a .dot file of all pipelines in the
+    application whenever requested via SIGUSR1 (on UNIX systems)
+
+-   queue-levels: Records queue levels for each queue in a CSV file.
+    Comes with a script for visualisation.
+
+Debug logging system improvements
+
+-   new log macros GST_LOG_ID, GST_DEBUG_ID, GST_INFO_ID,
+    GST_WARNING_ID, GST_ERROR_ID, and GST_TRACE_ID allow passing a
+    string identifier instead of a GObject. This makes it easier to log
+    non-gobject-based items and also has performance benefits.
 
 Tools
 
--   this section will be filled in in due course
+-   gst-play-1.0 gained a --no-position command line option to suppress
+    position/duration queries, which can be useful to reduce debug log
+    noise.
+
+GStreamer FFMPEG wrapper
+
+-   Fixed bitrate management and timestamp inaccuracies for video
+    encoders
+
+-   Fix synchronization issues and errors created by the (wrong)
+    forwarding of upstream segment events by ffmpeg demuxers.
+
+-   Clipping meta support for gapless mp3 playback
 
 GStreamer RTSP server
 
--   this section will be filled in in due course
+-   Add RFC5576 Source-specific media attribute to the SDP media for
+    signalling the CNAME
 
-GStreamer VAAPI
+-   Add support for adjusting request response on pipeline errors
 
--   this section will be filled in in due course
+    -   Give the application the possibility to adjust the error code
+        when responding to a request. For that purpose the pipeline’s
+        bus messages are emitted to subscribers through a
+        “handle-message” signal. The subscribers can then check those
+        messages for errors and adjust the response error code by
+        overriding the virtual method
+        GstRTSPClientClass::adjust_error_code().
+
+-   Add gst_rtsp_context_set_token() method to make it possible to set
+    the RTSPToken on some RTSPContext from bindings such as the Python
+    bindings.
+
+-   rtspclientsink gained a “publish-clock-mode” property to configure
+    whether the pipeline clock should be published according to RFC7273
+    (RTP Clock Source Signalling), similar to the same API on
+    GstRTSPMedia.
+
+GStreamer VA-API support
+
+-   Development activity has shifted towards the new va plugin, with
+    gstreamer-vaapi now basically in maintenance-only mode. Most of the
+    below refers to the va plugin (not gstreamer-vaapi).
+
+-   new gst-va library for GStreamer VA-API integration
+
+-   vajpegdec: new JPEG decoder
+
+-   vah264enc, vah265enc: new H.264/H.265 encoders
+
+-   vah264lpenc, vah265lpenc: new low power mode encoders
+
+-   vah265enc: Add extended formats support such as 10/12 bits, 4:2:2
+    and 4:4:4
+
+-   Support encoder reconfiguration
+
+-   vacompositor: Add new compositor element using the VA-API VPP
+    interface
+
+-   vapostproc:
+
+    -   new “scale-method” property
+    -   Process HDR caps if supported
+    -   parse video orientation from tags
+
+-   vaapipostproc: Enable the use of DMA-Buf import and export
+    (gstreamer-vaapi)
+
+GStreamer Video4Linux2 support
+
+-   Added support for Mediatek Stateless CODEC (VP8, H.264, VP9)
+
+-   Stateless H.264 interlaced decoder support
+
+-   Stateless H.265 decoder support
+
+-   Stateful decoder support for driver resolution change events
+
+-   Stateful decoding support fixes for NXP/Amphion driver
+
+-   Support for hardware crop in v4l2src
+
+-   Conformance test improvement for stateful decoders
+
+-   Fixes for Raspberry Pi CODEC
 
 GStreamer OMX
 
--   this section will be filled in in due course
+-   There were no changes in this module
 
 GStreamer Editing Services and NLE
 
--   this section will be filled in in due course
+-   Handle compositors that are bins around the actual compositor
+    implementation (like glvideomixers which wraps several elements)
+
+-   Add a mode to disable timeline editing API so the user can be in
+    full control of its layout (meaning that the user is responsible for
+    ensuring its validity/coherency)
+
+-   Add a new fade-in transition type
+
+-   Add support for non-1/1 PAR source videos
+
+-   Fix frame accuracy when working with very low framerate streams
 
 GStreamer validate
 
--   this section will be filled in in due course
+-   Clean up and stabilize API so we can now generate rust bindings
+
+-   Enhance the appsrc-push action type allowing to find tune the
+    buffers more in details
+
+-   Add an action type to verify currently configured pad caps
+
+-   Add a way to run checks from any thread after executing a ‘wait’
+    action. This is useful when waiting on a signal and want to check
+    the value of a property right when it is emited for example.
 
 GStreamer Python Bindings
 
--   this section will be filled in in due course
+-   Add a Gst.init_python() function to be called from plugins which
+    will initialise everything needed for the GStreamer Python bindings
+    but not call Gst.init() again since this will have been called
+    already.
+
+-   Add support for the GstURIHandlerInterface that allows elements to
+    advertise what URI protocols they support.
 
 GStreamer C# Bindings
 
--   this section will be filled in in due course
+-   Fix AppSrc and AppSink constructors
+
+-   The C# bindings have yet to be updated to include new 1.22 API,
+    which requires improvements in various places in the bindings /
+    binding generator stack. See issue #1718 in GitLab for more
+    information and to track progress.
 
 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.
+already been updated for the new GStreamer 1.22 API. Check the bindings
+release notes for details of the changes since 0.18, which was released
+around GStreamer 1.20.
 
 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
+has also seen lots of activity with many new elements and plugins. A
+list of all Rust plugins and elements provided with the 0.9 release can
+be found in the repository.
+
+-   33% of GStreamer commits are now in Rust (bindings + plugins), and
+    the Rust plugins module is also where most of the new plugins are
+    added these days.
+
+-   The Rust plugins are now shipped as part of the Windows MSVC + macOS
+    binary packages. See below for the list of shipped plugins and the
+    status of Rust support in cerbero.
+
+-   The Rust plugins are also part of the documentation on the GStreamer
+    website now.
+
+-   Rust plugins can be used from any programming language. To the
+    outside they look just like a plugin written in C or C++.
+
+New Rust plugins and elements
+
+-   rtpav1pay / rtpav1depay: RTP (de)payloader for the AV1 video codec
+-   gtk4paintablesink: a GTK4 video sink that provides a GdkPaintable
+    for rendering a video in any place inside a GTK UI. Supports
+    zero-copy rendering via OpenGL on Linux and macOS.
+-   ndi: source, sink and device provider for NewTek NDI protocol
+-   onvif: Various elements for parsing, RTP (de)payloading, overlaying
+    of ONVIF timed metadata.
+-   livesync: Element for converting a live stream into a continuous
+    stream without gaps and timestamp jumps while preserving live
+    latency requirements.
+-   raptorq: Encoder/decoder elements for the RaptorQ FEC mechanism that
+    can be used for RTP streams (RFC6330).
+
+WebRTC elements
+
+-   webrtcsink: a WebRTC sink (batteries included WebRTC sender with
+    specific signalling)
+-   whipsink: WebRTC HTTP ingest (WHIP) to MediaServer
+-   whepsrc: WebRTC HTTP egress (WHEP) from MediaServer
+-   rtpgccbwe: RTP bandwidth estimator based on the Google Congestion
+    Control algorithm (GCC), used by webrtcsink
+
+Amazon AWS services
+
+-   awss3src / awss3sink: A source and sink element to talk to the
+    Amazon S3 object storage system.
+-   awss3hlssink: A sink element to store HLS streams on Amazon S3.
+-   awstranscriber: an element wrapping the AWS Transcriber service.
+-   awstranscribeparse: an element parsing the packets of the AWS
+    Transcriber service.
+
+Video Effects (videofx)
+
+-   roundedcorners: Element to make the corners of a video rounded via
+    the alpha channel.
+-   colordetect: A pass-through filter able to detect the dominant
+    color(s) on incoming frames, using color-thief.
+-   videocompare: Compare similarity of video frames. The element can
+    use different hashing algorithms like Blockhash, DSSIM, and others.
+
+New MP4 muxer + Fragmented MP4 muxer
+
+-   fmp4mux: New fragmented MP4/ISOBMFF/CMAF muxer for generating
+    e.g. DASH/HLS media fragments.
+-   isomp4mux: New non-fragmented, normal MP4 muxer.
+
+Both plugins provides elements that replace the existing qtmux/mp4mux
+element from gst-plugins-good. While not feature-equivalent yet, the new
+codebase and using separate elements for the fragment and non-fragmented
+case allows for easier extensability in the future.
+
+Cerbero Rust support
+
+-   Starting this release, cerbero has support for building and shipping
+    Rust code on Linux, Windows (MSVC) and macOS. The Windows (MSVC) and
+    macOS binaries also ship the GStreamer Rust plugins in this release.
+    Only dynamic plugins are built and shipped currently.
+
+-   Preliminary support for Android, iOS and Windows (MinGW) exists but
+    more work is needed. Check the tracker issue for more details about
+    future work.
+
+-   The following plugins are included currently: audiofx, aws, cdg,
+    claxon, closedcaption, dav1d, fallbackswitch, ffv1, fmp4, gif,
+    hlssink3, hsv, json, livesync, lewton, mp4, ndi, onvif, rav1e,
+    regex, reqwest, raptorq, png, rtp, textahead, textwrap, threadshare,
+    togglerecord, tracers, uriplaylistbin, videofx, webrtc, webrtchttp.
 
 Build and Dependencies
 
--   this section will be filled in in due course
+-   meson 0.62 or newer is required
+
+-   GLib >= 2.62 is now required (but GLib >= 2.64 is strongly
+    recommended)
+
+-   libnice >= 0.1.21 is now required and contains important fixes for
+    GStreamer’s WebRTC stack.
+
+-   liborc >= 0.4.33 is recommended for 64-bit ARM support and 32-bit
+    ARM improvements
+
+-   onnx: OnnxRT >= 1.13.1 is now required
+
+-   openaptx: can now be built against libfreeaptx
+
+-   opencv: allow building against any 4.x version
+
+-   shout: libshout >= 2.4.3 is now required
+
+-   gstreamer-vaapi’s Meson build options have been switched from a
+    custom combo type (yes/no/auto) to the built-in Meson feature type
+    (enabled/disabled/auto)
 
-gst-build
+-   The GStreamer Rust plugins module gst-plugins-rs is now considered
+    an essential part of the GStreamer plugin offering and packagers and
+    distributors are strongly encouraged to package and ship those
+    plugins alongside the existing plugin modules.
 
--   this section will be filled in in due course
+-   we now make use of Meson’s install tags feature which allows
+    selective installation of installl components and might be useful
+    for packagers.
+
+Monorepo build (gst-build)
+
+-   new “orc-source” build option to allow build against a
+    system-installed liborc instead of forcing the use of orc as a
+    subproject.
+
+-   GStreamer command line tools can now be linked to the gstreamer-full
+    library if it’s built
 
 Cerbero
 
 Cerbero is a meta build system used to build GStreamer plus dependencies
 on platforms where dependencies are not readily available, such as
-Windows, Android, iOS and macOS.
+Windows, Android, iOS, and macOS.
 
 General improvements
 
--   this section will be filled in in due course
+-   Rust support was added for all support configurations, controlled by
+    the rust variant; see above for more details
+-   All pkgconfig files are now reliably relocatable without requiring
+    pkg-config --define-prefix. This also fixes statically linking with
+    GStreamer plugins using the corresponding pkgconfig files.
+-   New documentation on how to build a custom GStreamer repository
+    using Cerbero, please see the README
+-   HTTPS certificate checking is enabled for downloads on all platforms
+    now
+-   Fetching now automatically retries on error for robustness against
+    transient errors
+-   Support for building the new Qt6 plugin was added
+-   pkgconfig files for various recipes were fixed
+-   Several recipes were updated to newer versions
+-   New plugins: adaptivedemux2 aes codectimestamper dav1d
+-   New libraries: cuda webrtcnice
 
 macOS / iOS
 
--   this section will be filled in in due course
+-   Added support for running Cerbero on ARM64 macOS
+-   GStreamer.framework and all libraries in it are now relocatable,
+    which means they use LC_RPATH entries to find dependencies instead
+    of using an absolute path. If you link to GStreamer using the
+    pkgconfig files, no action is necessary. However, if you use the
+    framework directly or link to the libraries inside the framework by
+    hand, then you need to pass -Wl,-rpath,<path_to_libdir> to the
+    linker.
+-   Apple bitcode support was dropped, since Apple has deprecated it
+-   macOS installer now correctly advertises support for both x86_64 and
+    arm64
+-   macOS framework now ships the gst-rtsp-server-1.0 library
+-   Various fixes were made to make static linking to gstreamer
+    libraries and plugins work correctly on macOS
+-   When statically linking to the applemedia plugin using Xcode 13, you
+    will need to pass -fno-objc-msgsend-selector-stubs which works
+    around a backwards-incompatible change in Xcode 14. This is not
+    required for the rest of GStreamer at present, but will be in the
+    future.
+-   macOS installer now shows the GStreamer logo correctly
 
 Windows
 
--   this section will be filled in in due course
+-   MSVC is now required by default on Windows, and the Visual Studio
+    variant is enabled by default
+    -   To build with MinGW, use the mingw variant
+-   Visual Studio props files were updated for newer Visual Studio
+    versions
+-   Visual Studio 2015 support was dropped
+-   MSYS2 is now supported as the base instead of MSYS. Please see the
+    README for more details. Some advantages include:
+    -   Faster build times, since parallel make works
+    -   Faster bootstrap, since some tools are provided by MSYS2
+    -   Other speed-ups due to using MSYS2 tools instead of MSYS
+-   Faster download by using powershell instead of hand-rolled Python
+    code
+-   Many recipes were ported from Autotools to Meson, speeding up the
+    build
+-   Universal Windows Platform is no longer supported, and binaries are
+    no longer shipped for it
+-   New documentation on how to force a specific Visual Studio
+    installation in Cerbero, please see the README
+-   New plugins: qsv wavpack directshow amfcodec wic win32ipc
+-   New libraries: d3d11
 
 Windows MSI installer
 
--   this section will be filled in in due course
+-   Universal Windows Platform prebuilt binaries are no longer available
 
 Linux
 
--   this section will be filled in in due course
+-   Various fixes for RHEL/CentOS 7 support
+-   Added support for running on Linux ARM64
 
 Android
 
--   this section will be filled in in due course
+-   Android support now requires Android API version 21 (Lollipop)
+-   Support for Android Gradle plugin 7.2
 
 Platform-specific changes and improvements
 
 Android
 
--   this section will be filled in in due course
+-   Android SDK 21 is required now as minimum SDK version
+
+-   androidmedia: Add H.265 / HEVC video encoder mapping
+
+-   Implement JNI_OnLoad() to register static plugins etc. automatically
+    in case GStreamer is loaded from Java using System.loadLibrary(),
+    which is also useful for the gst-full deployment scenario.
+
+Apple macOS and iOS
+
+-   The GLib version shipped with the GStreamer binaries does not
+    initialize an NSApp and does not run a NSRunLoop on the main thread
+    anymore. This was a custom GLib patch and caused it to behave
+    different from the GLib shipped by Homebrew or anybody else.
+
+    The change was originally introduced because various macOS APIs
+    require a NSRunLoop to run on the main thread to function correctly
+    but as this change will never get merged into GLib and it was
+    reverted for 1.22. Applications that relied on this behaviour should
+    move to the new gst_macos_main() function, which also does not
+    require the usage of a GMainLoop.
+
+    See e.g. gst-play.c for an example for the usage of
+    gst_macos_main().
+
+-   GStreamer.framework and all libraries in it are now relocatable,
+    which means they use LC_RPATH entries to find dependencies instead
+    of using an absolute path. If you link to GStreamer using the
+    pkgconfig files, no action is necessary. However, if you use the
+    framework directly or link to the libraries inside the framework by
+    hand, then you need to pass -Wl,-rpath,<path_to_libdir> to the
+    linker.
 
-macOS and iOS
+-   avfvideosrc: Allow specifying crop coordinates during screen capture
 
--   this section will be filled in in due course
+-   vtenc, vtdec: H.265 / HEVC video encoding + decoding support
+
+-   osxaudiosrc: Support a device as both input and output
+
+    -   osxaudiodeviceprovider now probes devices more than once to
+        determine if the device can function as both an input AND and
+        output device. Previously, if the device provider detected that
+        a device had any output capabilities, it was treated solely as
+        an Audio/Sink. This caused issues for devices that have both
+        input and output capabilities (for example, USB interfaces for
+        professional audio have both input and output channels). Such
+        devicesare now listed as both an Audio/Sink as well as an
+        Audio/Source.
+
+-   osxaudio: support hidden devices on macOS
+
+    -   These are devices that will not be shown in the macOS UIs and
+        that cannot be retrieved without having the specific UID of the
+        hidden device. There are cases when you might want to have a
+        hidden device, for example when having a virtual speaker that
+        forwards the data to a virtual hidden input device from which
+        you can then grab the audio. The blackhole project supports
+        these hidden devices and this change provides a way that if the
+        device id is a hidden device it will use it instead of checkinf
+        the hardware list of devices to understand if the device is
+        valid.
 
 Windows
 
--   this section will be filled in in due course
+-   win32ipcvideosink, win32ipcvideosrc: new shared memory videosrc/sink
+    elements
+
+-   wasapi2: Add support for process loopback capture for a specified
+    PID (requires Windows 11/Windows Server 2022)
+
+-   The Windows universal UWP build is currently non-functional and will
+    need updating after the recent GLib upgrade. It is unclear if anyone
+    is using these binaries, so if you are please make yourself known.
+
+-   wicjpegdec, wicpngdec: Windows Imaging Component (WIC) based JPEG
+    and PNG decoder elements.
+
+-   mfaacdec, mfmp3dec: Windows MediaFoundation AAC and MP3 decoders
+
+-   The uninstalled development environment supports PowerShell 7 now
 
 Linux
 
--   this section will be filled in in due course
+-   Improved design for DMA buffer sharing and modifier handling for
+    hardware-accelerated video decoders/encoders/filters and
+    capture/rendering on Linux and Linux-like system.
+
+-   kmssink
+
+    -   new “fd” property which allows an application to provide their
+        own opened DRM device fd handle to kmssink. That way an
+        application can lease multiple fd’s from a DRM master to display
+        on different CRTC outputs at the same time with multiple kmssink
+        instances, for example.
+    -   new “skip-vsync” property to achieve full framerate with legacy
+        emulation in drivers.
+    -   HDR10 infoframe support
+
+-   va plugin and gstreamer-vaapi improvements (see above)
+
+-   waylandsink: Add “rotate-method” property and “render-rectangle”
+    property
+
+-   new gtkwaylandsink element based on gtksink, but similar to
+    waylandsink and uses Wayland APIs directly instead of rendering with
+    Gtk/Cairo primitives. This approach is only compatible with Gtk3,
+    and like gtksink this element only supports Gtk3.
 
 Documentation improvements
 
--   this section will be filled in in due course
+-   The GStreamer Rust plugins are now included and documented in the
+    plugin documentation.
 
 Possibly Breaking Changes
 
--   this section will be filled in in due course
--   MPEG-TS SCTE-35 API changes (FIXME: flesh out)
--   gst_parse_launch() and friends now error out on non-existing
-    properties on top-level bins where they would silently fail and
-    ignore those before.
+-   the Opus audio RTP payloader and depayloader no longer accept the
+    lower case encoding-format=multiopus but instead produce and accept
+    only the upper case variant encoding-format=MULTIOPUS, since those
+    should always be upper case in GStreamer (caps fields are always
+    case sensitive). This should hopefully only affect applications
+    where RTP caps are set manually and multi-channel audio (>= 3
+    channels) is used.
+
+-   wpesrc: the URI handler protocols changed from wpe:// and web:// to
+    web+http://, web+https://, and web+file:// which means URIs are RFC
+    3986 compliant and the source can simply strip the prefix from the
+    protocol.
+
+-   The Windows screen capture element dxgiscreencapsrc has been
+    removed, please use d3d11screencapturesrc instead.
+
+-   On Android the minimum supported Android API version is now version
+    21 and has been increased from 16.
+
+-   On macOS, the GLib version shipped with the GStreamer binaries will
+    no longer initialize an NSApp or run an NSRunLoop on the main
+    thread. See macOS/iOS section above for details.
+
+-   decklink: The decklink plugin is now using the 12.2.2 version of the
+    SDK and will not work with drivers older than version 12.
+
+-   On iOS Apple Bitcode support was removed from the binaries. This
+    feature is deprecated since XCode 14 and not used on the App Store
+    anymore.
+
+-   The MP4/Matroska/WebM muxers now require the “stream-format” to be
+    provided as part of the AV1 caps as only the original “obu-stream”
+    format is supported in these containers and not the “annexb” format.
 
 Known Issues
 
--   this section will be filled in in due course
+-   The Windows UWP build in Cerbero needs fixing after the recent GLib
+    upgrade (see above)
+
+-   The C# bindings have not been updated to include new 1.22 API yet
+    (see above)
+
+Statistics
+
+-   4072 commits
+
+-   2224 Merge Requests
+
+-   716 Issues
+
+-   200+ Contributors
+
+-   ~33% of all commits and Merge Requests were in Rust modules
+
+-   4747 files changed
+
+-   469633 lines added
 
--   There are a couple of known WebRTC-related regressions/blockers:
+-   209842 lines deleted
 
-    -   webrtc: DTLS setup with Chrome is broken
-    -   webrtcbin: First keyframe is usually lost
+-   259791 lines added (net)
 
 Contributors
 
--   this section will be filled in in due course
+Ádám Balázs, Adam Doupe, Adrian Fiergolski, Adrian Perez de Castro, Alba
+Mendez, Aleix Conchillo Flaqué, Aleksandr Slobodeniuk, Alicia Boya
+García, Alireza Miryazdi, Andoni Morales Alastruey, Andrew Pritchard,
+Arun Raghavan, A. Wilcox, Bastian Krause, Bastien Nocera, Benjamin
+Gaignard, Bill Hofmann, Bo Elmgreen, Boyuan Zhang, Brad Hards, Branko
+Subasic, Bruce Liang, Bunio FH, byran77, Camilo Celis Guzman, Carlos
+Falgueras García, Carlos Rafael Giani, Célestin Marot, Christian Wick,
+Christopher Obbard, Christoph Reiter, Chris Wiggins, Chun-wei Fan, Colin
+Kinloch, Corentin Damman, Corentin Noël, Damian Hobson-Garcia, Daniel
+Almeida, Daniel Morin, Daniel Stone, Daniels Umanovskis, Danny Smith,
+David Svensson Fors, Devin Anderson, Diogo Goncalves, Dmitry Osipenko,
+Dongil Park, Doug Nazar, Edward Hervey, ekwange, Eli Schwartz, Elliot
+Chen, Enrique Ocaña González, Eric Knapp, Erwann Gouesbet, Evgeny
+Pavlov, Fabian Orccon, Fabrice Fontaine, Fan F He, F. Duncanh, Filip
+Hanes, Florian Zwoch, François Laignel, Fuga Kato, George Kiagiadakis,
+Guillaume Desmottes, Gu Yanjie, Haihao Xiang, Haihua Hu, Havard Graff,
+Heiko Becker, He Junyan, Henry Hoegelow, Hiero32, Hoonhee Lee, Hosang
+Lee, Hou Qi, Hugo Svirak, Ignacio Casal Quinteiro, Ignazio Pillai, Igor
+V. Kovalenko, Jacek Skiba, Jakub Adam, James Cowgill, James Hilliard,
+Jan Alexander Steffens (heftig), Jan Lorenz, Jan Schmidt, Jianhui Dai,
+jinsl00000, Johan Sternerup, Jonas Bonn, Jonas Danielsson, Jordan
+Petridis, Joseph Donofry, Jose Quaresma, Julian Bouzas, Junsoo Park,
+Justin Chadwell, Khem Raj, Krystian Wojtas, László Károlyi, Linus
+Svensson, Loïc Le Page, Ludvig Rappe, Marc Leeman, Marek Olejnik, Marek
+Vasut, Marijn Suijten, Mark Nauwelaerts, Martin Dørum, Martin Reboredo,
+Mart Raudsepp, Mathieu Duponchelle, Matt Crane, Matthew Waters, Matthias
+Clasen, Matthias Fuchs, Mengkejiergeli Ba, MGlolenstine, Michael Gruner,
+Michiel Konstapel, Mikhail Fludkov, Ming Qian, Mingyang Ma, Myles
+Inglis, Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, Pablo Marcos
+Oltra, Patricia Muscalu, Patrick Griffis, Paweł Stawicki, Peter
+Stensson, Philippe Normand, Philipp Zabel, Pierre Bourré, Piotr
+Brzeziński, Rabindra Harlalka, Rafael Caricio, Rafael Sobral, Rafał
+Dzięgiel, Raul Tambre, Robert Mader, Robert Rosengren, Rodrigo
+Bernardes, Rouven Czerwinski, Ruben Gonzalez, Sam Van Den Berge,
+Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Sebastian Fricke,
+Sebastian Groß, Sebastian Mueller, Sebastian Wick, Sergei Kovalev,
+Seungha Yang, Seungmin Kim, sezanzeb, Sherrill Lin, Shingo Kitagawa,
+Stéphane Cerveau, Talha Khan, Taruntej Kanakamalla, 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, Wojciech Kapsa, Wonchul Lee, Wu Tong, Xabier
+Rodriguez Calvar, Xavier Claessens, Yatin Mann, Yeongjin Jeong, Zebediah
+Figura, Zhao Zhili, Zhiyuaniu, مهدي شينون (Mehdi Chinoune),
 
 … 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 is scheduled to be released around October/November 2021.
+1.22.0 was originally released on 23 January 2023.
 
-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.
+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 …
+contributions from Edward Hervey, Matthew Waters, Nicolas Dufresne,
+Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, and
+Thibault Saunier.
 
 License: CC BY-SA 4.0