"Fossies" - the Fresh Open Source Software Archive

Member "gst-plugins-good-1.20.3/NEWS" (15 Jun 2022, 110445 Bytes) of package /linux/misc/gst-plugins-good-1.20.3.tar.xz:

As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "NEWS": 1.20.2_vs_1.20.3.

    1 GStreamer 1.20 Release Notes
    3 GStreamer 1.20.0 was originally released on 3 February 2022.
    5 The latest bug-fix release in the 1.20 series is 1.20.3 and was released
    6 on 15 June 2022.
    8 See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
    9 version of this document.
   11 Last updated: Monday 15 June 2022, 17:00 UTC (log)
   13 Introduction
   15 The GStreamer team is proud to announce a new major feature release in
   16 the stable 1.x API series of your favourite cross-platform multimedia
   17 framework!
   19 As always, this release is again packed with many new features, bug
   20 fixes and other improvements.
   22 Highlights
   24 -   Development in GitLab was switched to a single git repository
   25     containing all the modules
   26 -   GstPlay: new high-level playback library, replaces GstPlayer
   27 -   WebM Alpha decoding support
   28 -   Encoding profiles can now be tweaked with additional
   29     application-specified element properties
   30 -   Compositor: multi-threaded video conversion and mixing
   31 -   RTP header extensions: unified support in RTP depayloader and
   32     payloader base classes
   33 -   SMPTE 2022-1 2-D Forward Error Correction support
   34 -   Smart encoding (pass through) support for VP8, VP9, H.265 in
   35     encodebin and transcodebin
   36 -   Runtime compatibility support for libsoup2 and libsoup3 (libsoup3
   37     support experimental)
   38 -   Video decoder subframe support
   39 -   Video decoder automatic packet-loss, data corruption, and keyframe
   40     request handling for RTP / WebRTC / RTSP
   41 -   mp4 and Matroska muxers now support profile/level/resolution changes
   42     for H.264/H.265 input streams (i.e. codec data changing on the fly)
   43 -   mp4 muxing mode that initially creates a fragmented mp4 which is
   44     converted to a regular mp4 on EOS
   45 -   Audio support for the WebKit Port for Embedded (WPE) web page source
   46     element
   47 -   CUDA based video color space convert and rescale elements and
   48     upload/download elements
   49 -   NVIDIA memory:NVMM support for OpenGL glupload and gldownload
   50     elements
   51 -   Many WebRTC improvements
   52 -   The new VA-API plugin implementation fleshed out with more decoders
   53     and new postproc elements
   54 -   AppSink API to retrieve events in addition to buffers and buffer
   55     lists
   56 -   AppSrc gained more configuration options for the internal queue
   57     (leakiness, limits in buffers and time, getters to read current
   58     levels)
   59 -   Updated Rust bindings and many new Rust plugins
   60 -   Improved support for custom minimal GStreamer builds
   61 -   Support build against FFmpeg 5.0
   62 -   Linux Stateless CODEC support gained MPEG-2 and VP9
   63 -   Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support
   64 -   Lots of new plugins, features, performance improvements and bug
   65     fixes
   67 Major new features and changes
   69 Noteworthy new features and API
   71 -   gst_element_get_request_pad() has been deprecated in favour of the
   72     newly-added gst_element_request_pad_simple() which does the exact
   73     same thing but has a less confusing name that hopefully makes clear
   74     that the function request a new pad rather than just retrieves an
   75     already-existing request pad.
   77 Development in GitLab was switched to a single git repository containing all the modules
   79 The GStreamer multimedia framework is a set of libraries and plugins
   80 split into a number of distinct modules which are released independently
   81 and which have so far been developed in separate git repositories in
   82 freedesktop.org GitLab.
   84 In addition to these separate git repositories there was a gst-build
   85 module that would use the Meson build system’s subproject feature to
   86 download each individual module and then build everything in one go. It
   87 would also provide an uninstalled development environment that made it
   88 easy to work on GStreamer and use or test versions other than the
   89 system-installed GStreamer version.
   91 All of these modules have now (as of 28 September 2021) been merged into
   92 a single git repository (“Mono repository” or “monorepo”) which should
   93 simplify development workflows and continuous integration, especially
   94 where changes need to be made to multiple modules at once.
   96 This mono repository merge will primarily affect GStreamer developers
   97 and contributors and anyone who has workflows based on the GStreamer git
   98 repositories.
  100 The Rust bindings and Rust plugins modules have not been merged into the
  101 mono repository at this time because they follow a different release
  102 cycle.
  104 The mono repository lives in the existing GStreamer core git repository
  105 in GitLab in the new main branch and all future development will happen
  106 on this branch.
  108 Modules will continue to be released as separate tarballs.
  110 For more details, please see the GStreamer mono repository FAQ.
  112 GstPlay: new high-level playback library replacing GstPlayer
  114 -   GstPlay is a new high-level playback library that replaces the older
  115     GstPlayer API. It is basically the same API as GstPlayer but
  116     refactored to use bus messages for application notifications instead
  117     of GObject signals. There is still a signal adapter object for those
  118     who prefer signals. Since the existing GstPlayer API is already in
  119     use in various applications, it didn’t seem like a good idea to
  120     break it entirely. Instead a new API was added, and it is expected
  121     that this new GstPlay API will be moved to gst-plugins-base in
  122     future.
  124 -   The existing GstPlayer API is scheduled for deprecation and will be
  125     removed at some point in the future (e.g. in GStreamer 1.24), so
  126     application developers are urged to migrate to the new GstPlay API
  127     at their earliest convenience.
  129 WebM alpha decoding
  131 -   Implement WebM alpha decoding (VP8/VP9 with alpha), which required
  132     support and additions in various places. This is supported both with
  133     software decoders and hardware-accelerated decoders.
  135 -   VP8/VP9 don’t support alpha components natively in the codec, so the
  136     way this is implemented in WebM is by encoding the alpha plane with
  137     transparency data as a separate VP8/VP9 stream. Inside the WebM
  138     container (a variant of Matroska) this is coded as a single video
  139     track with the “normal” VP8/VP9 video data making up the main video
  140     data and each frame of video having an encoded alpha frame attached
  141     to it as extra data ("BlockAdditional").
  143 -   matroskademux has been extended extract this per-frame alpha side
  144     data and attach it in form of a GstVideoCodecAlphaMeta to the
  145     regular video buffers. Note that this new meta is specific to this
  146     VP8/VP9 alpha support and can’t be used to just add alpha support to
  147     other codecs that don’t support it. Lastly, matroskademux also
  148     advertises the fact that the streams contain alpha in the caps.
  150 -   The new codecalpha plugin contains various bits of infrastructure to
  151     support autoplugging and debugging:
  153     -   codecalphademux splits out the alpha stream from the metas on
  154         the regular VP8/VP9 buffers
  155     -   alphacombine takes two decoded raw video streams (one alpha, one
  156         the regular video) and combines it into a video stream with
  157         alpha
  158     -   vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use
  159         the regular vp8dec and vp9dec software decoders to decode
  160         regular and alpha streams and combine them again. To decodebin
  161         these look like regular decoders.
  162     -   The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can
  163         decode both alpha and non-alpha stream with a single decoder
  164         instance
  166 -   A new AV12 video format was added which is basically NV12 with an
  167     alpha plane, which is more convenient for many hardware-accelerated
  168     decoders.
  170 -   Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support
  171     to GStreamer” for all the details and a demo.
  173 RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders
  175 -   RTP Header Extensions are specified in RFC 5285 and provide a way to
  176     add small pieces of data to RTP packets in between the RTP header
  177     and the RTP payload. This is often used for per-frame metadata,
  178     extended timestamps or other application-specific extra data. There
  179     are several commonly-used extensions specified in various RFCs, but
  180     senders are free to put any kind of data in there, as long as sender
  181     and receiver both know what that data is. Receivers that don’t know
  182     about the header extensions will just skip the extra data without
  183     ever looking at it. These header extensions can often be combined
  184     with any kind of payload format, so may need to be supported by many
  185     RTP payloader and depayloader elements.
  187 -   Inserting and extracting RTP header extension data has so far been a
  188     bit inconvenient in GStreamer: There are functions to add and
  189     retrieve RTP header extension data from RTP packets, but nothing
  190     works automatically, even for common extensions. People would have
  191     to do the insertion/extraction either in custom elements
  192     before/after the RTP payloader/depayloader, or inside pad probes,
  193     which isn’t very nice.
  195 -   This release adds various pieces of new infrastructure for generic
  196     RTP header extension handling, as well as some implementations for
  197     common extensions:
  199     -   GstRTPHeaderExtension is a new helper base class for reading and
  200         writing RTP header extensions. Nominally this subclasses
  201         GstElement, but only so these extensions are stored in the
  202         registry where they can be looked up by URI or name. They don’t
  203         have pads and don’t get added to the pipeline graph as an
  204         element.
  206     -   "add-extension" and "clear-extension" action signals on RTP
  207         payloaders and depayloaders for manual extension management
  209     -   The "request-extension" signal will be emitted if an extension
  210         is encountered that requires explicit mapping by the application
  212     -   new "auto-header-extension" property on RTP payloaders and
  213         depayloaders for automatic handling of known header extensions.
  214         This is enabled by default. The extensions must be signalled via
  215         caps / SDP.
  217     -   RTP header extension implementations:
  219         -   rtphdrextclientaudiolevel: Client-to-Mixer Audio Level
  220             Indication (RFC 6464) (also see below)
  221         -   rtphdrextcolorspace: Color Space extension, extends RTP
  222             packets with color space and high dynamic range (HDR)
  223             information
  224         -   rtphdrexttwcc: Transport Wide Congestion Control support
  226 -   gst_rtp_buffer_remove_extension_data() is a new helper function to
  227     remove an RTP header extension from an RTP buffer
  229 -   The existing gst_rtp_buffer_set_extension_data() now also supports
  230     shrinking the extension data in size
  232 AppSink and AppSrc improvements
  234 -   appsink: new API to pull events out of appsink in addition to
  235     buffers and buffer lists.
  237     There was previously no way for users to receive incoming events
  238     from appsink properly serialised with the data flow, even if they
  239     are serialised events. The reason for that is that the only way to
  240     intercept events was via a pad probe on the appsink sink pad, but
  241     there is also internal queuing inside of appsink, so it’s difficult
  242     to ascertain the right order of everything in all cases.
  244     There is now a new "new-serialized-event" signal which will be
  245     emitted when there’s a new event pending (just like the existing
  246     "new-sample" signal). The "emit-signals" property must be set to
  247     TRUE in order to activate this (but it’s also fine to just pull from
  248     the application thread without using the signals).
  250     gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be
  251     used to pull out either an event or a new sample carrying a buffer
  252     or buffer list, whatever is next in the queue.
  254     EOS events will be filtered and will not be returned. EOS handling
  255     can be done the usual way, same as with _pull_sample().
  257 -   appsrc: allow configuration of internal queue limits in time and
  258     buffers and add leaky mode.
  260     There is internal queuing inside appsrc so the application thread
  261     can push data into the element which will then be picked up by the
  262     source element’s streaming thread and pushed into the pipeline from
  263     that streaming thread. This queue is unlimited by default and until
  264     now it was only possible to set a maximum size limit in bytes. When
  265     that byte limit is reached, the pushing thread (application thread)
  266     would be blocked until more space becomes available.
  268     A limit in bytes is not particularly useful for many use cases, so
  269     now it is possible to also configure limits in time and buffers
  270     using the new "max-time" and "max-buffers" properties. Of course
  271     there are also matching new read-only"current-level-buffers" and
  272     "current-level-time properties" properties to query the current fill
  273     level of the internal queue in time and buffers.
  275     And as if that wasn’t enough the internal queue can also be
  276     configured as leaky using the new "leaky-type" property. That way
  277     when the queue is full the application thread won’t be blocked when
  278     it tries to push in more data, but instead either the new buffer
  279     will be dropped or the oldest data in the queue will be dropped.
  281 Better string serialization of nested GstCaps and GstStructures
  283 -   New string serialisation format for structs and caps that can handle
  284     nested structs and caps properly by using brackets to delimit nested
  285     items (e.g. some-struct, some-field=[nested-struct, nested=true]).
  286     Unlike the default format the new variant can also support more than
  287     one level of nesting. For backwards-compatibility reasons the old
  288     format is still output by default when serialising caps and structs
  289     using the existing API. The new functions gst_caps_serialize() and
  290     gst_structure_serialize() can be used to output strings in the new
  291     format.
  293 Convenience API for custom GstMetas
  295 -   New convenience API to register and create custom GstMetas:
  296     gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such
  297     custom meta is backed by a GstStructure and does not require that
  298     users of the API expose their GstMeta implementation as public API
  299     for other components to make use of it. In addition, it provides a
  300     simpler interface by ignoring the impl vs. api distinction that the
  301     regular API exposes. This new API is meant to be the meta
  302     counterpart to custom events and messages, and to be more convenient
  303     than the lower-level API when the absolute best performance isn’t a
  304     requirement. The reason it’s less performant than a “proper” meta is
  305     that a proper meta is just a C struct in the end whereas this goes
  306     through the GstStructure API which has a bit more overhead, which
  307     for most scenarios is negligible however. This new API is useful for
  308     experimentation or proprietary metas, but also has some limitations:
  309     it can only be used if there’s a single producer of these metas;
  310     registering the same custom meta multiple times or from multiple
  311     places is not allowed.
  313 Additional Element Properties on Encoding Profiles
  315 -   GstEncodingProfile: The new "element-properties" and
  316     gst_encoding_profile_set_element_properties() API allows
  317     applications to set additional element properties on encoding
  318     profiles to configure muxers and encoders. So far the encoding
  319     profile template was the only place where this could be specified,
  320     but often what applications want to do is take a ready-made encoding
  321     profile shipped by GStreamer or the application and then tweak the
  322     settings on top of that, which is now possible with this API. Since
  323     applications can’t always know in advance what encoder element will
  324     be used in the end, it’s even possible to specify properties on a
  325     per-element basis.
  327     Encoding Profiles are used in the encodebin, transcodebin and
  328     camerabin elements and APIs to configure output formats (containers
  329     and elementary streams).
  331 Audio Level Indication Meta for RFC 6464
  333 -   New GstAudioLevelMeta containing Audio Level Indication as per RFC
  334     6464
  336 -   The level element has been updated to add GstAudioLevelMeta on
  337     buffers if the "audio-level-meta" property is set to TRUE. This can
  338     then in turn be picked up by RTP payloaders to signal the audio
  339     level to receivers through RTP header extensions (see above).
  341 -   New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header
  342     Extension which should be automatically created and used by RTP
  343     payloaders and depayloaders if their "auto-header-extension"
  344     property is enabled and if the extension is part of the RTP caps.
  346 Automatic packet loss, data corruption and keyframe request handling for video decoders
  348 -   The GstVideoDecoder base class has gained various new APIs to
  349     automatically handle packet loss and data corruption better by
  350     default, especially in RTP, RTSP and WebRTC streaming scenarios, and
  351     to give subclasses more control about how they want to handle
  352     missing data:
  354     -   Video decoder subclasses can mark output frames as corrupted via
  355         the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag
  357     -   A new "discard-corrupted-frames" property allows applications to
  358         configure decoders so that corrupted frames are directly
  359         discarded instead of being forwarded inside the pipeline. This
  360         is a replacement for the "output-corrupt" property of the FFmpeg
  361         decoders.
  363     -   RTP depayloaders can now signal to decoders that data is missing
  364         when sending GAP events for lost packets. GAP events can be sent
  365         for various reason in a GStreamer pipeline. Often they are just
  366         used to let downstream elements know that there isn’t a buffer
  367         available at the moment, so downstream elements can move on
  368         instead of waiting for one. They are also sent by RTP
  369         depayloaders in the case that packets are missing, however, and
  370         so far a decoder was not able to differentiate the two cases.
  371         This has been remedied now: GAP events can be decorated with
  372         gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let
  373         decoders now what happened, and decoders can then use that in
  374         some cases to handle missing data better.
  376     -   The GstVideoDecoder::handle_missing_data vfunc was added to
  377         inform subclasses about packet loss or missing data and let them
  378         handle it in their own way if they like.
  380     -   gst_video_decoder_set_needs_sync_point() lets subclasses signal
  381         that they need the stream to start with a sync point. If
  382         enabled, the base class will discard all non-sync point frames
  383         in the beginning and after a flush and does not pass them to the
  384         subclass. Furthermore, if the first frame is not a sync point,
  385         the base class will try and request a sync frame from upstream
  386         by sending a force-key-unit event (see next items).
  388     -   New "automatic-request-sync-points" and
  389         "automatic-request-sync-point-flags" properties to automatically
  390         request sync points when needed, e.g. on packet loss or if the
  391         first frame is not a keyframe. Applications may want to enable
  392         this on decoders operating in e.g. RTP/WebRTC/RTSP receiver
  393         pipelines.
  395     -   The new "min-force-key-unit-interval" property can be used to
  396         ensure there’s a minimal interval between keyframe requests to
  397         upstream (and/or the sender) and we’re not flooding the sender
  398         with key unit requests.
  400     -   gst_video_decoder_request_sync_point() allows subclasses to
  401         request a new sync point (e.g. if they choose to do their own
  402         missing data handling). This will still honour the
  403         "min-force-key-unit-interval" property if set.
  405 Improved support for custom minimal GStreamer builds
  407 -   Element registration and registration of other plugin features
  408     inside plugin init functions has been improved in order to
  409     facilitate minimal custom GStreamer builds.
  411 -   A number of new macros have been added to declare and create
  412     per-element and per-plugin feature register functions in all
  413     plugins, and then call those from the per-plugin plugin_init
  414     functions:
  419         for the actual registration call with GStreamer
  422         GST_TYPE_FIND_REGISTER to call the registration function defined
  423         by the REGISTER_DEFINE macro
  427         GST_TYPE_FIND_REGISTER_DECLARE to declare the registration
  428         function defined by the REGISTER_DEFINE macro
  429     -   and various variants for advanced use cases.
  431 -   This means that applications can call the per-element and per-plugin
  432     feature registration functions for only the elements they need
  433     instead of registering plugins as a whole with all kinds of elements
  434     that may not be required (e.g. encoder and decoder instead of just
  435     decoder). In case of static linking all unused functions and their
  436     dependencies would be removed in this case by the linker, which
  437     helps minimise binary size for custom builds.
  439 -   gst_init() will automatically call a gst_init_static_plugins()
  440     function if one exists.
  442 -   See the GStreamer static build documentation and Stéphane’s blog
  443     post Generate a minimal GStreamer build, tailored to your needs for
  444     more details.
  446 New elements
  448 -   New aesdec and aesenc elements for AES encryption and decryption in
  449     a custom format.
  451 -   New encodebin2 element with dynamic/sometimes source pads in order
  452     to support the option of doing the muxing outside of encodebin,
  453     e.g. in combination with a splitmuxsink.
  455 -   New fakeaudiosink and videocodectestsink elements for testing and
  456     debugging (see below for more details)
  458 -   rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC
  459     audio codec
  461 -   rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE
  462     2022-1 2-D Forward Error Correction. More details in Mathieu’s blog
  463     post.
  465 -   isac: new plugin wrapping the Internet Speech Audio Codec reference
  466     encoder and decoder from the WebRTC project.
  468 -   asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API
  470 -   gssrc, gssink: add source and sink for Google Cloud Storage
  472 -   onnx: new plugin to apply ONNX neural network models to video
  474 -   openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0)
  476 -   qroverlay, debugqroverlay: new elements that allow overlaying data
  477     on top of video in the form of a QR code
  479 -   cvtracker: new OpenCV-based tracker element
  481 -   av1parse, vp9parse: new parsers for AV1 and VP9 video
  483 -   va: work on the new VA-API plugin implementation for
  484     hardware-accelerated video decoding and encoding has continued at
  485     pace, with various new decoders and filters having joined the
  486     initial vah264dec:
  488     -   vah265dec: VA-API H.265 decoder
  489     -   vavp8dec: VA-API VP8 decoder
  490     -   vavp9dec: VA-API VP9 decoder
  491     -   vaav1dec: VA-API AV1 decoder
  492     -   vampeg2dec: VA-API MPEG-2 decoder
  493     -   vadeinterlace: : VA-API deinterlace filter
  494     -   vapostproc: : VA-API postproc filter (color conversion,
  495         resizing, cropping, color balance, video rotation, skin tone
  496         enhancement, denoise, sharpen)
  498     See Víctor’s blog post “GstVA in GStreamer 1.20” for more details
  499     and what’s coming up next.
  501 -   vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi)
  503 -   msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media
  504     SDK / oneVPL
  506 -   nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video
  507     encoding and decoding:
  509     -   cudaconvert, cudascale: new CUDA based video color space convert
  510         and rescale elements
  511     -   cudaupload, cudadownload: new helper elements for memory
  512         transfer between CUDA and system memory spaces
  513     -   nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders
  515 -   Various new hardware-accelerated elements for Windows:
  517     -   d3d11screencapturesrc: new desktop capture element, including a
  518         GstDeviceProvider implementation to enumerate/select target
  519         monitors for capture.
  520     -   d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders
  521     -   d3d11deinterlace: deinterlacing filter
  522     -   d3d11compositor: video composing element
  523     -   see Windows section below for more details
  525 -   new Rust plugins:
  527     -   audiornnoise: Removes noise from an audio stream
  528     -   awstranscribeparse: Parses AWS audio transcripts into timed text
  529         buffers
  530     -   ccdetect: Detects if valid closed captions are present in a
  531         closed captions stream
  532     -   cea608tojson: Converts CEA-608 Closed Captions to a JSON
  533         representation
  534     -   cmafmux: CMAF fragmented mp4 muxer
  535     -   dashmp4mux: DASH fragmented mp4 muxer
  536     -   isofmp4mux: ISO fragmented mp4 muxer
  537     -   ebur128level: EBU R128 Loudness Level Measurement
  538     -   ffv1dec: FFV1 video decoder
  539     -   gtk4paintablesink: GTK4 video sink, which provides a
  540         GdkPaintable that can be rendered in various widgets
  541     -   hlssink3: HTTP Live Streaming sink
  542     -   hrtfrender: Head-Related Transfer Function (HRTF) renderer
  543     -   hsvdetector: HSV colorspace detector
  544     -   hsvfilter: HSV colorspace filter
  545     -   jsongstenc: Wraps buffers containing any valid top-level JSON
  546         structures into higher level JSON objects, and outputs those as
  547         ndjson
  548     -   jsongstparse: Parses ndjson as output by jsongstenc
  549     -   jsontovtt: converts JSON to WebVTT subtitles
  550     -   regex: Applies regular expression operations on text
  551     -   roundedcorners: Adds rounded corners to video
  552     -   spotifyaudiosrc: Spotify source
  553     -   textahead: Display upcoming text buffers ahead (e.g. for
  554         Karaoke)
  555     -   transcriberbin: passthrough bin that transcribes raw audio to
  556         closed captions using awstranscriber and puts the captions as
  557         metas onto the video
  558     -   tttojson: Converts timed text to a JSON representation
  559     -   uriplaylistbin: Playlist source bin
  560     -   webpdec-rs: WebP image decoder with animation support
  562 -   New plugin codecalpha with elements to assist with WebM Alpha
  563     decoding
  565     -   codecalphademux: Split stream with GstVideoCodecAlphaMeta into
  566         two streams
  567     -   alphacombine: Combine two raw video stream (I420 or NV12) as one
  568         stream with alpha channel (A420 or AV12)
  569     -   vp8alphadecodebin: A bin to handle software decoding of VP8 with
  570         alpha
  571     -   vp9alphadecodebin: A bin to handle software decoding of VP9 with
  572         alpha
  574 -   New hardware accelerated elements for Linux:
  576     -   v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders
  577     -   v4l2slvp9dec: Support for Linux Stateless VP9 decoders
  578     -   v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha
  579         layer decoding
  580     -   v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha
  581         layer decoding
  583 New element features and additions
  585 -   assrender: handle more font mime types; better interaction with
  586     matroskademux for embedded fonts
  588 -   audiobuffersplit: Add support for specifying output buffer size in
  589     bytes (not just duration)
  591 -   audiolatency: new "samplesperbuffer" property so users can configure
  592     the number of samples per buffer. The default value is 240 samples
  593     which is equivalent to 5ms latency with a sample rate of 48000,
  594     which might be larger than actual buffer size of audio capture
  595     device.
  597 -   audiomixer, audiointerleave, GstAudioAggregator: now keep a count of
  598     samples that are dropped or processed as statistic and can be made
  599     to post QoS messages on the bus whenever samples are dropped by
  600     setting the "qos-messages" property on input pads.
  602 -   audiomixer, compositor: improved handling of new inputs added at
  603     runtime. New API was added to the GstAggregator base class to allow
  604     subclasses to opt into an aggregation mode where inactive pads are
  605     ignored when processing input buffers
  606     (gst_aggregator_set_ignore_inactive_pads(),
  607     gst_aggregator_pad_is_inactive()). An “inactive pad” in this context
  608     is a pad which, in live mode, hasn’t yet received a first buffer,
  609     but has been waited on at least once. What would happen usually in
  610     this case is that the aggregator would wait for data on this pad
  611     every time, up to the maximum configured latency. This would
  612     inadvertently push mixer elements in live mode to the configured
  613     latency envelope and delay processing when new inputs are added at
  614     runtime until these inputs have actually produced data. This is
  615     usually undesirable. With this new API, new inputs can be added
  616     (requested) and configured and they won’t delay the data processing.
  617     Applications can opt into this new behaviour by setting the
  618     "ignore-inactive-pads" property on compositor, audiomixer or other
  619     GstAudioAggregator-based elements.
  621 -   cccombiner: implement “scheduling” of captions. So far cccombiner’s
  622     behaviour was essentially that of a funnel: it strictly looked at
  623     input timestamps to associate together video and caption buffers.
  624     Now it will try to smoothly schedule caption buffers in order to
  625     have exactly one per output video buffer. This might involve
  626     rewriting input captions, for example when the input is CDP then
  627     sequence counters are rewritten, time codes are dropped and
  628     potentially re-injected if the input video frame had a time code
  629     meta. This can also lead to the input drifting from synchronisation,
  630     when there isn’t enough padding in the input stream to catch up. In
  631     that case the element will start dropping old caption buffers once
  632     the number of buffers in its internal queue reaches a certain limit
  633     (configurable via the "max-scheduled" property). The new original
  634     funnel-like behaviour can be restored by setting the "scheduling"
  635     property to FALSE.
  637 -   ccconverter: new "cdp-mode" property to specify which sections to
  638     include in CDP packets (timecode, CC data, service info). Various
  639     software, including FFmpeg’s Decklink support, fails parsing CDP
  640     packets that contain anything but CC data in the CDP packets.
  642 -   clocksync: new "sync-to-first" property for automatic timestamp
  643     offset setup: if set clocksync will set up the "ts-offset" value
  644     based on the first buffer and the pipeline’s running time when the
  645     first buffer arrived. The newly configured "ts-offset" in this case
  646     would be the value that allows outputting the first buffer without
  647     waiting on the clock. This is useful for example to feed a non-live
  648     input into an already-running pipeline.
  650 -   compositor:
  652     -   multi-threaded input conversion and compositing. Set the
  653         "max-threads" property to activate this.
  654     -   new "sizing-policy" property to support display aspect ratio
  655         (DAR)-aware scaling. By default the image is scaled to fill the
  656         configured destination rectangle without padding and without
  657         keeping the aspect ratio. With sizing-policy=keep-aspect-ratio
  658         the input image is scaled to fit the destination rectangle
  659         specified by GstCompositorPad:{xpos, ypos, width, height}
  660         properties preserving the aspect ratio. As a result, the image
  661         will be centered in the destination rectangle with padding if
  662         necessary.
  663     -   new "zero-size-is-unscaled" property on input pads. By default
  664         pad width=0 or pad height=0 mean that the stream should not be
  665         scaled in that dimension. But if the "zero-size-is-unscaled"
  666         property is set to FALSE a width or height of 0 is instead
  667         interpreted to mean that the input image on that pad should not
  668         be composited, which is useful when creating animations where an
  669         input image is made smaller and smaller until it disappears.
  670     -   improved handling of new inputs at runtime via
  671         "ignore-inactive-pads"property (see above for details)
  672     -   allow output format with alpha even if none of the inputs have
  673         alpha (also glvideomixer and other GstVideoAggregator
  674         subclasses)
  676 -   dashsink: add H.265 codec support and signals for allowing custom
  677     playlist/fragment output
  679 -   decodebin3:
  681     -   improved decoder selection, especially for hardware decoders
  682     -   make input activation “atomic” when adding inputs dynamically
  683     -   better interleave handling: take into account decoder latency
  684         for interleave size
  686 -   decklink:
  688     -   Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro
  689     -   decklinkvideosrc:
  690         -   More accurate and stable capture timestamps: use the
  691             hardware reference clock time when the frame was finished
  692             being captured instead of a clock time much further down the
  693             road.
  694         -   Automatically detect widescreen vs. normal NTSC/PAL
  696 -   encodebin:
  698     -   add “smart encoding” support for H.265, VP8 and VP9 (i.e. only
  699         re-encode where needed and otherwise pass through encoded video
  700         as-is).
  701     -   H.264/H.265 smart encoding improvements: respect user-specified
  702         stream-format, but if not specified default to avc3/hvc1 with
  703         in-band SPS/PPS/VPS signalling for more flexibility.
  704     -   new encodebin2 element with dynamic/sometimes source pads in
  705         order to support the option of doing the muxing outside of
  706         encodebin, e.g. in combination with splitmuxsink.
  707     -   add APIs to set element properties on encoding profiles (see
  708         below)
  710 -   errorignore: new "ignore-eos" property to also ignore FLOW_EOS from
  711     downstream elements
  713 -   giosrc: add support for growing source files: applications can
  714     specify that the underlying file being read is growing by setting
  715     the "is-growing" property. If set, the source won’t EOS when it
  716     reaches the end of the file, but will instead start monitoring it
  717     and will start reading data again whenever a change is detected. The
  718     new "waiting-data" and "done-waiting-data" signals keep the
  719     application informed about the current state.
  721 -   gtksink, gtkglsink:
  723     -   scroll event support: forwarded as navigation events into the
  724         pipeline
  725     -   "video-aspect-ratio-override" property to force a specific
  726         aspect ratio
  727     -   "rotate-method" property and support automatic rotation based on
  728         image tags
  730 -   identity: new "stats" property allows applications to retrieve the
  731     number of bytes and buffers that have passed through so far.
  733 -   interlace: add support for more formats, esp 10-bit, 12-bit and
  734     16-bit ones
  736 -   jack: new "low-latency" property for automatic latency-optimized
  737     setting and "port-names" property to select ports explicitly
  739 -   jpegdec: support output conversion to RGB using libjpeg-turbo (for
  740     certain input files)
  742 -   line21dec:
  744     -   "mode" property to control whether and how detected closed
  745         captions should be inserted in the list of existing close
  746         caption metas on the input frame (if any): add, drop, or
  747         replace.
  748     -   "ntsc-only" property to only look for captions if video has NTSC
  749         resolution
  751 -   line21enc: new "remove-caption-meta" to remove metas from output
  752     buffers after encoding the captions into the video data; support for
  753     CDP closed captions
  755 -   matroskademux, matroskamux: Add support for ffv1, a lossless
  756     intra-frame video coding format.
  758 -   matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265
  759     (i.e. stream-format avc3 and hev1) which allows on-the-fly
  760     profile/level/resolution changes.
  762 -   matroskamux: new "cluster-timestamp-offset" property, useful for use
  763     cases where the container timestamps should map to some absolute
  764     wall clock time, for example.
  766 -   rtpsrc: add "caps" property to allow explicit setting of the caps
  767     where needed
  769 -   mpegts: support SCTE-35 pass-through via new "send-scte35-events"
  770     property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections
  771     (e.g. ad placement opportunities) are forwarded as events downstream
  772     where they can be picked up again by mpegtsmux. This required a
  773     semantic change in the SCTE-35 section API: timestamps are now in
  774     running time instead of muxer pts.
  776 -   tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp
  777     handling in certain corner cases and for poorly muxed streams.
  779 -   mpegtsmux:
  781     -   More conformance improvements to make MPEG-TS analysers happy:
  782         -   PCR timing accuracy: Improvements to the way mpegtsmux
  783             outputs PCR observations in CBR mode, so that a PCR
  784             observation is always inserted when needed, so that we never
  785             miss the configured pcr-interval, as that triggers various
  786             MPEG-TS analyser errors.
  787         -   Improved PCR/SI scheduling
  788     -   Don’t write PCR until PAT/PMT are output to make sure streams
  789         start cleanly with a PAT/PMT.
  790     -   Allow overriding the automatic PMT PID selection via
  791         application-supplied PMT_%d fields in the prog-map
  792         structure/property.
  794 -   mp4mux:
  796     -   new "first-moov-then-finalise" mode for fragmented output where
  797         the output will start with a self-contained moov atom for the
  798         first fragment, and then produce regular fragments. Then at the
  799         end when the file is finalised, the initial moov is invalidated
  800         and a new moov is written covering the entire file. This way the
  801         file is a “fragmented mp4” file while it is still being written
  802         out, and remains playable at all times, but at the end it is
  803         turned into a regular mp4 file (with former fragment headers
  804         remaining as unused junk data in the file).
  805     -   support H.264 avc3 and H.265 hvc1 stream formats as input where
  806         the codec data is signalled in-band inside the bitstream instead
  807         of caps/file headers.
  808     -   support profile/level/resolution changes for H.264/H.265 input
  809         streams (i.e. codec data changing on the fly). Each codec_data
  810         is put into its own SampleTableEntry inside the stsd, unless the
  811         input is in avc3 stream format in which case it’s written
  812         in-band and not in the headers.
  814 -   multifilesink: new ""min-keyframe-distance"" property to make
  815     minimum distance between keyframes in next-file=key-frame mode
  816     configurable instead of hard-coding it to 10 seconds.
  818 -   mxfdemux has seen a big refactoring to support non-frame wrappings
  819     and more accurate timestamp/seek handling for some formats
  821 -   msdk plugin for hardware-accelerated video encoding and decoding
  822     using the Intel Media SDK:
  824     -   oneVPL support (Intel oneAPI Video Processing Library)
  825     -   AV1 decoding support
  826     -   H.264 decoder now supports constrained-high and progressive-high
  827         profiles
  828     -   H.264 encoder:
  829         -   more configuration options (properties):
  830             "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid",
  831             "dblk-idc"
  832     -   H.265 encoder:
  833         -   can output main-still-picture profile
  834         -   now inserts HDR SEIs (mastering display colour volume and
  835             content light level)
  836         -   more configuration options (properties):
  837             "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid",
  838             "b-pyramid", "dblk-idc", "transform-skip"
  839         -   support for RGB 10bit format
  840     -   External bitrate control in encoders
  841     -   Video post proc element msdkvpp gained support for 12-bit pixel
  842         formats P012_LE, Y212_LE and Y412_LE
  844 -   nvh264sldec: interlaced stream support
  846 -   openh264enc: support main, high, constrained-high and
  847     progressive-high profiles
  849 -   openjpeg: support for multithreaded decoding and encoding
  851 -   rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP);
  852     new "ignore-x-server-reply" property to ignore the
  853     x-server-ip-address server header reply in case of HTTP tunneling,
  854     as it is often broken.
  856 -   souphttpsrc: Runtime compatibility support for libsoup2 and
  857     libsoup3. libsoup3 is the latest major version of libsoup, but
  858     libsoup2 and libsoup3 can’t co-exist in the same process because
  859     there is no namespacing or versioning for GObject types. As a
  860     result, it would be awkward if the GStreamer souphttpsrc plugin
  861     linked to a specific version of libsoup, because it would only work
  862     with applications that use the same version of libsoup. To make this
  863     work, the soup plugin now tries to determine the libsoup version
  864     used by the application (and its other dependencies) at runtime on
  865     systems where GStreamer is linked dynamically. libsoup3 support is
  866     still considered somewhat experimental at this point. Distro
  867     packagers please take note of the souphttpsrc plugin dependency
  868     changes mentioned in the build and dependencies section below.
  870 -   srtsrc, srtsink: add signals for the application to accept/reject
  871     incoming connections
  873 -   timeoverlay: new elapsed-running-time time mode which shows the
  874     running time since the first running time (and each flush-stop).
  876 -   udpsrc: new timestamping mode to retrieve packet receive timestamps
  877     from the kernel via socket control messages (SO_TIMESTAMPNS) on
  878     supported platforms
  880 -   uritranscodebin: new setup-source and element-setup signals for
  881     applications to configure elements used
  883 -   v4l2codecs plugin gained support for 4x4 and 32x32 tile formats
  884     enabling some platforms or direct renders. Important memory usage
  885     improvement.
  887 -   v4l2slh264dec now implements the final Linux uAPI as shipped on
  888     Linux 5.11 and later.
  890 -   valve: add "drop-mode" property and provide two new modes of
  891     operation: in drop-mode=forward-sticky-events sticky events
  892     (stream-start, segment, tags, caps, etc.) are forwarded downstream
  893     even when dropping is enabled; drop-mode=transform-to-gap will in
  894     addition also convert buffers into gap events when dropping is
  895     enabled, which lets downstream elements know that time is advancing
  896     and might allow for preroll in many scenarios. By default all events
  897     and all buffers are dropped when dropping is enabled, which can
  898     cause problems with caps negotiation not progressing or branches not
  899     prerolling when dropping is enabled.
  901 -   videocrop: support for many more pixel formats, e.g. planar YUV
  902     formats with > 8bits and GBR* video formats; can now also accept
  903     video not backed by system memory as long as downstream supports the
  904     GstCropMeta
  906 -   videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant
  907     color bars
  909 -   vp8enc: finish support for temporal scalability: two new properties
  910     ("temporal-scalability-layer-flags",
  911     "temporal-scalability-layer-sync-flags") and a unit change on the
  912     "temporal-scalability-target-bitrate" property (now expects bps);
  913     also make temporal scalability details available to RTP payloaders
  914     as buffer metadata.
  916 -   vp9enc: new properties to tweak encoder performance:
  918     -   "aq-mode" to configure adaptive quantization modes
  919     -   "frame-parallel-decoding" to configure whether to create a
  920         bitstream that reduces decoding dependencies between frames
  921         which allows staged parallel processing of more than one video
  922         frames in the decoder. (Defaults to TRUE)
  923     -   "row-mt", "tile-columns" and "tile-rows" so multithreading can
  924         be enabled on a per-tile basis, instead of on a per tile-column
  925         basis. In combination with the new "tile-rows" property, this
  926         allows the encoder to make much better use of the available CPU
  927         power.
  929 -   vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well
  930     as 8-bit 4:4:4
  932 -   vp8enc, vp9enc now default to “good quality” for the deadline
  933     property rather then “best quality”. Having the deadline set to best
  934     quality causes the encoder to be absurdly slow, most real-life users
  935     will prefer good-enough quality with better performance instead.
  937 -   wpesrc:
  939     -   implement audio support: a new sometimes source pad will be
  940         created for each audio stream created by the web engine.
  941     -   move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also
  942         support audio
  943     -   also handles web:// URIs now (same as cefsrc)
  944     -   post messages with the estimated load progress on the bus
  946 -   x265enc: add negative DTS support, which means timestamps are now
  947     offset by 1h same as with x264enc
  949 RTP Payloaders and Depayloaders
  951 -   rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC
  952     audio codec
  954 -   rtph264depay:
  956     -   new "request-keyframe" property to make the depayloader
  957         automatically request a new keyframe from the sender on packet
  958         loss, consistent with the new property on rtpvp8depay.
  959     -   new "wait-for-keyframe" property to make depayloader wait for a
  960         new keyframe at the beginning and after packet loss (only
  961         effective if the depayloader outputs AUs), consistent with the
  962         existing property on rtpvp8depay.
  964 -   rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel
  965     audio in addition to the previously supported multichannel audio
  966     modes
  968 -   rtpopuspay: add DTX (Discontinuous Transmission) support
  970 -   rtpvp8depay: new "request-keyframe" property to make the depayloader
  971     automatically request a new keyframe from the sender on packet loss.
  973 -   rtpvp8pay: temporal scaling support
  975 -   rtpvp9depay: Improved SVC handling (aggregate all layers)
  977 RTP Infrastructure
  979 -   rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE
  980     2022-1 2-D Forward Error Correction. More details in Mathieu’s blog
  981     post.
  983 -   rtpreddec: BUNDLE support
  985 -   rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion
  986     Control (TWCC)
  988 -   rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC
  989     reports to be scheduled on a timer instead of per marker-bit.
  991 Plugin and library moves
  993 -   There were no plugin moves or library moves in this cycle.
  995 Plugin removals
  997 The following elements or plugins have been removed:
  999 -   The ofa audio fingerprinting plugin has been removed. The MusicIP
 1000     database has been defunct for years so this plugin is likely neither
 1001     useful nor used by anyone.
 1003 -   The mms plugin containing mmssrc has been removed. It seems unlikely
 1004     anyone still needs this or that there are even any streams left out
 1005     there. The MMS protocol was deprecated in 2003 (in favour of RTSP)
 1006     and support for it was dropped with Microsoft Media Services 2008,
 1007     and Windows Media Player apparently also does not support it any
 1008     more.
 1010 Miscellaneous API additions
 1012 Core
 1014 -   gst_buffer_new_memdup() is a convenience function for the
 1015     widely-used gst_buffer_new_wrapped(g_memdup(data,size),size)
 1016     pattern.
 1018 -   gst_caps_features_new_single() creates a new single GstCapsFeatures,
 1019     avoiding the need to use the vararg function with NULL terminator
 1020     for simple cases.
 1022 -   gst_element_type_set_skip_documentation() can be used by plugins to
 1023     signal that certain elements should not be included in the GStreamer
 1024     plugin documentation. This is useful for plugins where elements are
 1025     registered dynamically based on hardware capabilities and/or where
 1026     the available plugins and properties vary from system to system.
 1027     This is used in the d3d11 plugin for example to ensure that only the
 1028     list of default elements is advertised in the documentation.
 1030 -   gst_type_find_suggest_empty_simple() is a new convenience function
 1031     for typefinders for cases where there’s only a media type and no
 1032     other fields.
 1034 -   New API to create elements and set properties at construction time,
 1035     which is not only convenient, but also allows GStreamer elements to
 1036     have construct-only properties: gst_element_factory_make_full(),
 1037     gst_element_factory_make_valist(),
 1038     gst_element_factory_make_with_properties(),
 1039     gst_element_factory_create_full(),
 1040     gst_element_factory_create_valist(),
 1041     gst_element_factory_create_with_properties().
 1043 -   GstSharedTaskPool: new “shared” task pool subclass with slightly
 1044     different default behaviour than the existing GstTaskPool which
 1045     would create unlimited number of threads for new tasks. The shared
 1046     task pool creates up to N threads (default: 1) and then distributes
 1047     pending tasks to those threads round-robin style, and blocks if no
 1048     thread is available. It is possible to join tasks. This can be used
 1049     by plugins to implement simple multi-threaded processing and is used
 1050     for the new multi-threaded video conversion and compositing done in
 1051     GstVideoAggregator, videoconverter and compositor.
 1053 Plugins Base Utils library
 1055 -   GstDiscoverer:
 1057     -   gst_discoverer_container_info_get_tags() was added to retrieve
 1058         global/container tags (vs. per-stream tags). Per-Stream tags can
 1059         be retrieved via the existing
 1060         gst_discoverer_stream_info_get_tags().
 1061         gst_discoverer_info_get_tags(), which for many files returns a
 1062         confusing mix of stream and container tags, has been deprecated
 1063         in favour of the container/stream-specific functions.
 1064     -   gst_discoverer_stream_info_get_stream_number() returns a unique
 1065         integer identifier for a given stream within the given
 1066         GstDiscoverer context. (If this matches the stream number inside
 1067         the container bitstream that’s by coincidence and not by
 1068         design.)
 1070 -   gst_pb_utils_get_caps_description_flags() can be used to query
 1071     whether certain caps represent a container, audio, video, image,
 1072     subtitles, tags, or something else. This only works for formats
 1073     known to GStreamer.
 1075 -   gst_pb_utils_get_file_extension_from_caps() returns a possible file
 1076     extension for given caps.
 1078 -   gst_codec_utils_h264_get_profile_flags_level(): Parses profile,
 1079     flags, and level from H.264 AvcC codec_data. The format of H.264
 1080     AVCC extradata/sequence_header is documented in the ITU-T H.264
 1081     specification section as well as in ISO/IEC 14496-15
 1082     section
 1084 -   gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381
 1085     compatible MIME codec string codec. Useful for providing the codecs
 1086     field inside the Content-Type HTTP header for container formats,
 1087     such as mp4 or Matroska.
 1089 GStreamer OpenGL integration library and plugins
 1091 -   glcolorconvert: added support for converting the video formats A420,
 1092     AV12, BGR, BGRA, RGBP and BGRP.
 1094 -   Added support to GstGLBuffer for persistent buffer mappings where a
 1095     Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU.
 1096     This removes a memcpy() when uploading textures or vertices
 1097     particularly when software decoders (e.g. libav) are direct
 1098     rendering into our memory. Improves transfer performance
 1099     significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or
 1100     GL_EXT_buffer_storage
 1102 -   Added various helper functions for handling 4x4 matrices of affine
 1103     transformations as used by GstVideoAffineTransformationMeta.
 1105 -   Add support to GstGLContext for allowing the application to control
 1106     the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL
 1107     context. This allows the ability to choose between RGB16 or RGB10A2
 1108     or RGBA8 back/front buffer configurations that were previously
 1109     hardcoded. GstGLContext also supports retrieving the configuration
 1110     it was created with or from an externally provide OpenGL context
 1111     handle. This infrastructure is also used to create a compatible
 1112     config from an application/externally provided OpenGL context in
 1113     order to improve compatibility with other OpenGL frameworks and GUI
 1114     toolkits. A new environment variable GST_GL_CONFIG was also added to
 1115     be able to request a specific configuration from the command line.
 1116     Note: different platforms will have different functionality
 1117     available.
 1119 -   Add support for choosing between EGL and WGL at runtime when running
 1120     on Windows. Previously this was a build-time switch. Allows use in
 1121     e.g. Gtk applications on Windows that target EGL/ANGLE without
 1122     recompiling GStreamer. gst_gl_display_new_with_type() can be used by
 1123     applications to choose a specific display type to use.
 1125 -   Build fixes to explicitly check for Broadcom-specific libraries on
 1126     older versions of the Raspberry Pi platform. The Broadcom OpenGL ES
 1127     and EGL libraries have different filenames. Using the vc4 Mesa
 1128     driver on the Raspberry Pi is not affected.
 1130 -   Added support to glupload and gldownload for transferring RGBA
 1131     buffers using the memory:NVMM available on the Nvidia Tegra family
 1132     of embedded devices.
 1134 -   Added support for choosing libOpenGL and libGLX as used in a GLVND
 1135     environment on unix-based platforms. This allows using desktop
 1136     OpenGL and EGL without pulling in any GLX symbols as would be
 1137     required with libGL.
 1139 Video library
 1141 -   New raw video formats:
 1143     -   AV12 (NV12 with alpha plane)
 1144     -   RGBP and BGRP (planar RGB formats)
 1145     -   ARGB64 variants with specified endianness instead of host
 1146         endianness:
 1147         -   ARGB64_LE, ARGB64_BE
 1148         -   RGBA64_BE, RGBA64_LE
 1149         -   BGRA64_BE, BGRA64_LE
 1150         -   ABGR64_BE, ABGR64_LE
 1152 -   gst_video_orientation_from_tag() is new convenience API to parse the
 1153     image orientation from a GstTagList.
 1155 -   GstVideoDecoder subframe support (see below)
 1157 -   GstVideoCodecState now also carries some HDR metadata
 1159 -   Ancillary video data: implement transform functions for AFD/Bar
 1160     metas, so they will be forwarded in more cases
 1162 MPEG-TS library
 1164 This library only handles section parsing and such, see above for
 1165 changes to the actual mpegtsmux and mpegtsdemux elements.
 1167 -   many additions and improvements to SCTE-35 section parsing
 1168 -   new API for fetching extended descriptors:
 1169     gst_mpegts_find_descriptor_with_extension()
 1170 -   add support for SIT sections (Selection Information Tables)
 1171 -   expose event-from-section constructor gst_event_new_mpegts_section()
 1172 -   parse Audio Preselection Descriptor needed for Dolby AC-4
 1174 GstWebRTC library + webrtcbin
 1176 -   Change the way in which sink pads and transceivers are matched
 1177     together to support easier usage. If a pad is created without a
 1178     specific index (i.e. using sink_%u as the pad template), then an
 1179     available compatible transceiver will be searched for. If a specific
 1180     index is requested (i.e. sink_1) then if a transceiver for that
 1181     m-line already exists, that transceiver must match the new sink pad
 1182     request. If there is no transceiver available in either scenario, a
 1183     new transceiver is created. If a mixture of both sink_1 and sink_%u
 1184     requests result in an impossible situation, an error will be
 1185     produced at pad request time or from create offer/answer.
 1187 -   webrtcbin now uses regular ICE nomination instead of libnice’s
 1188     default of aggressive ICE nomination. Regular ICE nomination is the
 1189     default recommended by various relevant standards and improves
 1190     connectivity in specific network scenarios.
 1192 -   Add support for limiting the port range used for RTP with the
 1193     addition of the min-rtp-port and max-rtp-port properties on the ICE
 1194     object.
 1196 -   Expose the SCTP transport as a property on webrtcbin to more closely
 1197     match the WebRTC specification.
 1199 -   Added support for taking into account the data channel transport
 1200     state when determining the value of the "connection-state" property.
 1201     Previous versions of the WebRTC spec did not include the data
 1202     channel state when computing this value.
 1204 -   Add configuration for choosing the size of the underlying sockets
 1205     used for transporting media data
 1207 -   Always advertise support for the transport-cc RTCP feedback protocol
 1208     as rtpbin supports it. For full support, the configured caps (input
 1209     or through codec-preferences) need to include the relevant RTP
 1210     header extension.
 1212 -   Numerous fixes to caps and media handling to fail-fast when an
 1213     incompatible situation is detected.
 1215 -   Improved support for attaching the required media after a remote
 1216     offer has been set.
 1218 -   Add support for dynamically changing the amount of FEC used for a
 1219     particular stream.
 1221 -   webrtcbin now stops further SDP processing at the first error it
 1222     encounters.
 1224 -   Completed support for either local or the remote closing a data
 1225     channel.
 1227 -   Various fixes when performing BUNDLEing of the media streams in
 1228     relation to RTX and FEC usage.
 1230 -   Add support for writing out QoS DSCP marking on outgoing packets to
 1231     improve reliability in some network scenarios.
 1233 -   Improvements to the statistics returned by the get-stats signal
 1234     including the addition of the raw statistics from the internal
 1235     RTPSource, the TWCC stats when available.
 1237 -   The webrtc library does not expose any objects anymore with public
 1238     fields. Instead properties have been added to replace that
 1239     functionality. If you are accessing such fields in your application,
 1240     switch to the corresponding properties.
 1242 GstCodecs and Video Parsers
 1244 -   Support for render delays to improve throughput across all CODECs
 1245     (used with NVDEC and V4L2).
 1246 -   lots of improvements to parsers and the codec parsing decoder base
 1247     classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various
 1248     hardware-accelerated decoder APIs.
 1250 Bindings support
 1252 -   gst_allocation_params_new() allocates a GstAllocationParams struct
 1253     on the heap. This should only be used by bindings (and freed via
 1254     gst_allocation_params_free() afterwards). In C code you would
 1255     allocate this on the stack and only init it in place.
 1257 -   gst_debug_log_literal() can be used to log a string to the debug log
 1258     without going through any printf format expansion and associated
 1259     overhead. This is mostly useful for bindings such as the Rust
 1260     bindings which may have done their own formatting already .
 1262 -   Provide non-inlined versions of refcounting APIs for various
 1263     GStreamer mini objects, so that they can be consumed by bindings
 1264     (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref,
 1265     gst_clear_buffer, gst_buffer_copy, gst_buffer_replace,
 1266     gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list,
 1267     gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take,
 1268     gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace,
 1269     gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy,
 1270     gst_context_replace, gst_event_replace, gst_event_steal,
 1271     gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event,
 1272     gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref,
 1273     gst_message_unref, gst_clear_message, gst_message_copy,
 1274     gst_message_replace, gst_message_take, gst_promise_ref,
 1275     gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query,
 1276     gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref,
 1277     gst_sample_unref, gst_sample_copy, gst_tag_list_ref,
 1278     gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace,
 1279     gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref,
 1280     gst_clear_uri.
 1282 -   expose a GType for GstMiniObject
 1284 -   gst_device_provider_probe() now returns non-floating device object
 1286 API Deprecations
 1288 -   gst_element_get_request_pad() has been deprecated in favour of the
 1289     newly-added gst_element_request_pad_simple() which does the exact
 1290     same thing but has a less confusing name that hopefully makes clear
 1291     that the function request a new pad rather than just retrieves an
 1292     already-existing request pad.
 1294 -   gst_discoverer_info_get_tags(), which for many files returns a
 1295     confusing mix of stream and container tags, has been deprecated in
 1296     favour of the container-specific and stream-specific functions,
 1297     gst_discoverer_container_info_get_tags() and
 1298     gst_discoverer_stream_info_get_tags().
 1300 -   gst_video_sink_center_rect() was deprecated in favour of the more
 1301     generic newly-added gst_video_center_rect().
 1303 -   The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends
 1304     to cause problems and prevents sub-buffering. If pooling or lifetime
 1305     tracking is required, memories should be allocated through a custom
 1306     GstAllocator instead of relying on the lifetime of the buffers the
 1307     memories were originally attached to, which is fragile anyway.
 1309 -   The GstPlayer high-level playback library is being replaced with the
 1310     new GstPlay library (see above). GstPlayer should be considered
 1311     deprecated at this point and will be marked as such in the next
 1312     development cycle. Applications should be ported to GstPlay.
 1314 -   Gstreamer Editing Services: ges_video_transition_set_border(),
 1315     ges_video_transition_get_border()
 1316     ges_video_transition_set_inverted()
 1317     ges_video_transition_is_inverted() have been deprecated, use
 1318     ges_timeline_element_set_children_properties() instead.
 1320 Miscellaneous performance, latency and memory optimisations
 1322 More video conversion fast paths
 1324 -   v210 ↔ I420, YV12, Y42B, UYVY and YUY2
 1325 -   A420 → RGB
 1327 Less jitter when waiting on the system clock
 1329 -   Better system clock wait accuracy, less jitter: where available,
 1330     clock_nanosleep is used for higher accuracy for waits below 500
 1331     usecs, and waits below 2ms will first use the regular waiting system
 1332     and then clock_nanosleep for the remainder. The various wait
 1333     implementation have a latency ranging from 50 to 500+ microseconds.
 1334     While this is not a major issue when dealing with a low number of
 1335     waits per second (for ex: video), it does introduce a non-negligible
 1336     jitter for synchronisation of higher packet rate systems.
 1338 Video decoder subframe support
 1340 -   The GstVideoDecoder base class gained API to process input at the
 1341     sub-frame level. That way video decoders can start decoding slices
 1342     before they have received the full input frame in its entirety (to
 1343     the extent this is supported by the codec, of course). This helps
 1344     with CPU utilisation and reduces latency.
 1346 -   This functionality is now being used in the OpenJPEG JPEG 2000
 1347     decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and
 1348     the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input).
 1350 Miscellaneous other changes and enhancements
 1352 -   GstDeviceMonitor no longer fails to start just because one of the
 1353     device providers failed to start. That could happen for example on
 1354     systems where the pulseaudio device provider is installed, but
 1355     pulseaudio isn’t actually running but ALSA is used for audio
 1356     instead. In the same vein the device monitor now keeps track of
 1357     which providers have been started (via the new
 1358     gst_device_provider_is_started()) and only stops actually running
 1359     device providers when stopping the device monitor.
 1361 -   On embedded systems it can be useful to create a registry that can
 1362     be shared and read by multiple processes running as different users.
 1363     It is now possible to set the new GST_REGISTRY_MODE environment
 1364     variable to specify the file mode for the registry file, which by
 1365     default is set to be only user readable/writable.
 1367 -   GstNetClientClock will signal lost sync in case the remote time
 1368     resets (e.g. because device power cycles), by emitting the “synced”
 1369     signal with synced=FALSE parameter, so applications can take action.
 1371 -   gst_value_deserialize_with_pspec() allows deserialisation with a
 1372     hint for what the target GType should be. This allows for example
 1373     passing arrays of flags through the command line or
 1374     gst_util_set_object_arg(), eg: foo="<bar,bar+baz>".
 1376 -   It’s now possible to create an empty GstVideoOverlayComposition
 1377     without any rectangles by passing a NULL rectangle to
 1378     gst_video_overlay_composition_new(). This is useful for bindings and
 1379     simplifies application code in some places.
 1381 Tracing framework, debugging and testing improvements
 1383 -   New factories tracer to list loaded elements (and other plugin
 1384     features). This can be useful to collect a list of elements needed
 1385     for an application, which in turn can be used to create a tailored
 1386     minimal GStreamer build that contains just the elements needed and
 1387     nothing else.
 1388 -   New plugin-feature-loaded tracing hook for use by tracers like the
 1389     new factories tracer
 1391 -   GstHarness: Add gst_harness_set_live() so that harnesses can be set
 1392     to non-live and return is-live=false in latency queries if needed.
 1393     Default behaviour is to always return is-live=true in latency
 1394     queries.
 1396 -   navseek: new "hold-eos" property. When enabled, the element will
 1397     hold back an EOS event until the next keystroke (via navigation
 1398     events). This can be used to keep a video sink showing the last
 1399     frame of a video pipeline until a key is pressed instead of tearing
 1400     it down immediately on EOS.
 1402 -   New fakeaudiosink element: mimics an audio sink and can be used for
 1403     testing and CI pipelines on systems where no audio system is
 1404     installed or running. It differs from fakesink in that it only
 1405     support audio caps and syncs to the clock by default like a normal
 1406     audio sink. It also implements the GstStreamVolume interface like
 1407     most audio sinks do.
 1409 -   New videocodectestsink element for video codec conformance testing:
 1410     Calculates MD5 checksums for video frames and skips any padding
 1411     whilst doing so. Can optionally also write back the video data with
 1412     padding removed into a file for easy byte-by-byte comparison with
 1413     reference data.
 1415 Tools
 1417 gst-inspect-1.0
 1419 -   Can sort the list of plugins by passing --sort=name as command line
 1420     option
 1422 gst-launch-1.0
 1424 -   will now error out on top-level properties that don’t exist and
 1425     which were silently ignored before
 1426 -   On Windows the high-resolution clock is enabled now, which provides
 1427     better clock and timer performance on Windows (see Windows section
 1428     below for more details).
 1430 gst-play-1.0
 1432 -   New --start-position command line argument to start playback from
 1433     the specified position
 1434 -   Audio can be muted/unmuted in interactive mode by pressing the m
 1435     key.
 1436 -   On Windows the high-resolution clock is enabled now (see Windows
 1437     section below for more details)
 1439 gst-device-monitor-1.0
 1441 -   New --include-hidden command line argument to also show “hidden”
 1442     device providers
 1444 ges-launch-1.0
 1446 -   New interactive mode that allows seeking and such. Can be disabled
 1447     by passing the --no-interactive argument on the command line.
 1448 -   Option to forward tags
 1449 -   Allow using an existing clip to determine the rendering format (both
 1450     topology and profile) via new --profile-from command line argument.
 1452 GStreamer RTSP server
 1454 -   GstRTSPMediaFactory gained API to disable RTCP
 1455     (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property).
 1456     Previously RTCP was always allowed for all RTSP medias. With this
 1457     change it is possible to disable RTCP completely, irrespective of
 1458     whether the client wants to do RTCP or not.
 1460 -   Make a mount point of / work correctly. While not allowed by the
 1461     RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the
 1462     wild. It is now possible to use / as a mount path in
 1463     gst-rtsp-server, e.g. rtsp://example.com/ would work with this now.
 1464     Note that query/fragment parts of the URI are not necessarily
 1465     correctly handled, and behaviour will differ between various
 1466     client/server implementations; so use it if you must but don’t bug
 1467     us if it doesn’t work with third party clients as you’d hoped.
 1469 -   multithreading fixes (races, refcounting issues, deadlocks)
 1471 -   ONVIF audio backchannel fixes
 1473 -   ONVIF trick mode optimisations
 1475 -   rtspclientsink: new "update-sdp" signal that allows updating the SDP
 1476     before sending it to the server via ANNOUNCE. This can be used to
 1477     add additional metadata to the SDP, for example. The order and
 1478     number of medias must not be changed, however.
 1480 GStreamer VAAPI
 1482 -   new AV1 decoder element (vaapiav1dec)
 1484 -   H.264 decoder: handle stereoscopic 3D video with frame packing
 1485     arrangement SEI messages
 1487 -   H.265 encoder: added Screen Content Coding extensions support
 1489 -   H.265 decoder: gained MAIN_444_12 profile support (decoded to
 1490     Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE)
 1492 -   vaapipostproc: gained BT2020 color standard support
 1494 -   vaapidecode: now generates caps templates dynamically at runtime in
 1495     order to advertise actually supported caps instead of all
 1496     theoretically supported caps.
 1498 -   GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM
 1499     device when a DRM display is used. It is ignored when other types of
 1500     displays are used. By default /dev/dri/renderD128 is used for DRM
 1501     display.
 1503 GStreamer OMX
 1505 -   subframe support in H.264/H.265 decoders
 1507 GStreamer Editing Services and NLE
 1509 -   framepositioner: new "operator" property to access blending modes in
 1510     the compositor
 1511 -   timeline: Implement snapping to markers
 1512 -   smart-mixer: Add support for d3d11compositor and glvideomixer
 1513 -   titleclip: add "draw-shadow" child property
 1514 -   ges:// URI support to define a timeline from a description.
 1515 -   command-line-formatter
 1516     -   Add track management to timeline description
 1517     -   Add keyframe support
 1518 -   ges-launch-1.0:
 1519     -   Add an interactive mode where we can seek etc…
 1520     -   Add option to forward tags
 1521     -   Allow using an existing clip to determine the rendering format
 1522         (both topology and profile) via new --profile-from command line
 1523         argument.
 1524 -   Fix static build
 1526 GStreamer validate
 1528 -   report: Add a way to force backtraces on reports even if not a
 1530 -   Add a flag to gst_validate_replace_variables_in_string() allow
 1531     defining how to resolve variables in structs
 1532 -   Add gst_validate_bin_monitor_get_scenario() to get the bin monitor
 1533     scenario, which is useful for applications that use Validate
 1534     directly.
 1535 -   Add an expected-values parameter to wait, message-type=XX allowing
 1536     more precise filtering of the message we are waiting for.
 1537 -   Add config file support: each test can now use a config file for the
 1538     given media file used to test.
 1539 -   Add support to check properties of object properties
 1540 -   scenario: Add an "action-done" signal to signal when an action is
 1541     done
 1542 -   scenario: Add a "run-command" action type
 1543 -   scenario: Allow forcing running action on idle from scenario file
 1544 -   scenario: Allow iterating over arrays in foreach
 1545 -   scenario: Rename ‘interlaced’ action to ‘non-blocking’
 1546 -   scenario: Add a non-blocking flag to the wait signal
 1548 GStreamer Python Bindings
 1550 -   Fixes for Python 3.10
 1551 -   Various build fixes
 1552 -   at least one known breaking change caused by g-i annotation changes
 1553     (see below)
 1555 GStreamer C# Bindings
 1557 -   Fix GstDebugGraphDetails enum
 1558 -   Updated to latest GtkSharp
 1559 -   Updated to include GStreamer 1.20 API
 1561 GStreamer Rust Bindings and Rust Plugins
 1563 -   The GStreamer Rust bindings are released separately with a different
 1564     release cadence that’s tied to gtk-rs, but the latest release has
 1565     already been updated for the upcoming new GStreamer 1.20 API (v1_20
 1566     feature).
 1568 -   gst-plugins-rs, the module containing GStreamer plugins written in
 1569     Rust, has also seen lots of activity with many new elements and
 1570     plugins. See the New Elements section above for a list of new Rust
 1571     elements.
 1573 Build and Dependencies
 1575 -   Meson 0.59 or newer is now required to build GStreamer.
 1577 -   The GLib requirement has been bumped to GLib 2.56 or newer (from
 1578     March 2018).
 1580 -   The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8
 1582 -   The souphttpsrc plugin is no longer linked against libsoup but
 1583     instead tries to pick up either libsoup2 or libsoup3 dynamically at
 1584     runtime. Distro packagers please ensure to add a dependency on one
 1585     of the libsoup runtimes to the gst-plugins-good package so that
 1586     there is actually a libsoup for the plugin to find!
 1588 Explicit opt-in required for build of certain plugins with (A)GPL dependencies
 1590 Some plugins have GPL- or AGPL-licensed dependencies and those plugins
 1591 will no longer be built by default unless you have explicitly opted in
 1592 to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson,
 1593 even if the required dependencies are available.
 1595 See Building plugins with (A)GPL-licensed dependencies for more details
 1596 and a non-exhaustive list of plugins affected.
 1598 gst-build: replaced by mono repository
 1600 See mono repository section above and the GStreamer mono repository FAQ.
 1602 Cerbero
 1604 Cerbero is a meta build system used to build GStreamer plus dependencies
 1605 on platforms where dependencies are not readily available, such as
 1606 Windows, Android, iOS and macOS.
 1608 General Cerbero improvements
 1610 -   Plugin removed: libvisual
 1611 -   New plugins: rtpmanagerbad and rist
 1613 macOS / iOS specific Cerbero improvements
 1615 -   XCode 12 support
 1616 -   macOS OS release support is now future-proof, similar to iOS
 1617 -   macOS Apple Silicon (ARM64) cross-compile support has been added,
 1618     including Universal binaries. There is a known bug regarding this on
 1619     ARM64.
 1620 -   Running Cerbero itself on macOS Apple Silicon (ARM64) is currently
 1621     experimental and is known to have bugs
 1623 Windows specific Cerbero improvements
 1625 -   Visual Studio 2022 support has been added
 1626 -   bootstrap is faster since it requires building fewer build-tools
 1627     recipes on Windows
 1628 -   package is faster due to better scheduling of recipe stages and
 1629     elimination of unnecessary autotools regeneration
 1630 -   The following plugins are no longer built on Windows:
 1631     -   a52dec (another decoder is still available in libav)
 1632     -   dvdread
 1633     -   resindvd
 1635 Windows MSI installer
 1637 -   no major changes
 1639 Linux specific Cerbero improvements
 1641 -   Fedora, Debian OS release support is now more future-proof
 1642 -   Amazon Linux 2 support has been added
 1644 Android specific Cerbero improvements
 1646 -   no major changes
 1648 Platform-specific changes and improvements
 1650 Android
 1652 -   No major changes
 1654 macOS and iOS
 1656 -   applemedia: add ProRes support to vtenc and vtdec
 1658 -   The GStreamer.framework location is now relocatable and is not
 1659     required to be /Library/Frameworks/
 1661 -   Cerbero now supports cross-compiling to macOS running on Apple
 1662     Silicon (ARM64), and Universal binaries are now available that can
 1663     be used on both X86_64 and ARM64 macOS.
 1665 Windows
 1667 -   On Windows the high-resolution clock is enabled now in the
 1668     gst-launch-1.0 and gst-play-1.0 command line tools, which provides
 1669     better clock and timer performance on Windows, at the cost of higher
 1670     power consumption. By default, without the high-resolution clock
 1671     enabled, the timer precision on Windows is system-dependent and may
 1672     be as bad as 15ms which is not good enough for many multimedia
 1673     applications. Developers may want to do the same in their Windows
 1674     applications if they think it’s a good idea for their application
 1675     use case, and depending on the Windows version they target. This is
 1676     not done automatically by GStreamer because on older Windows
 1677     versions (pre-Windows 10) this affects a global Windows setting and
 1678     also there’s a power consumption vs. performance trade-off that may
 1679     differ from application to application.
 1681 -   dxgiscreencapsrc now supports resolution changes
 1683 -   The wasapi2 audio plugin was rewritten and now has a higher rank
 1684     than the old wasapi plugin since it has a number of additional
 1685     features such as automatic stream routing, and no
 1686     known-but-hard-to-fix issues. The plugin is always built if the
 1687     Windows 10 SDK is available now.
 1689 -   The wasapi device providers now detect and notify dynamic device
 1690     additions/removals
 1692 -   d3d11screencapturesrc: new desktop capture element, including
 1693     GstDeviceProvider implementation to enumerate/select target monitors
 1694     for capture.
 1696 -   Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs
 1697     (d3d11av1dec, d3d11mpeg2dec)
 1699 -   VP9 decoding got more reliable and stable thanks to a newly written
 1700     codec parser
 1702 -   Support for decoding interlaced H.264/AVC streams
 1704 -   Hardware-accelerated video deinterlacing (d3d11deinterlace) and
 1705     video mixing (d3d11compositor)
 1707 -   Video mixing with the Direct3D11 API (d3d11compositor)
 1709 -   MediaFoundation API based hardware encoders gained the ability to
 1710     receive Direct3D11 textures as an input
 1712 -   Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff
 1713     you’ll find in the 1.20 release” describes many of the
 1714     Windows-related improvements in more detail
 1716 Linux
 1718 -   bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink,
 1719     as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio
 1720     encoder (ldacenc)
 1722 -   kmssink: gained support for NV24, NV61, RGB16/BGR16 formats;
 1723     auto-detect NVIDIA Tegra driver
 1725 Documentation improvements
 1727 -   hardware-accelerated GPU plugins will now no longer always list all
 1728     the element variants for all available GPUs, since those are
 1729     system-dependent and it’s confusing for users to see those in the
 1730     documentation just because the GStreamer developer who generated the
 1731     docs had multiple GPUs to play with at the time. Instead just show
 1732     the default elements.
 1734 Possibly Breaking and Other Noteworthy Behavioural Changes
 1736 -   gst_parse_launch(), gst_parse_bin_from_description() and friends
 1737     will now error out when setting properties that don’t exist on
 1738     top-level bins. They were silently ignored before.
 1740 -   The GstWebRTC library does not expose any objects anymore with
 1741     public fields. Instead properties have been added to replace that
 1742     functionality. If you are accessing such fields in your application,
 1743     switch to the corresponding properties.
 1745 -   playbin and uridecodebin now emit the source-setup signal before the
 1746     element is added to the bin and linked so that the source element is
 1747     already configured before any scheduling query comes in, which is
 1748     useful for elements such as appsrc or giostreamsrc.
 1750 -   The source element inside urisourcebin (used inside uridecodebin3
 1751     which is used inside playbin3) is no longer called "source". This
 1752     shouldn’t affect anyone hopefully, because there’s a "setup-source"
 1753     signal to configure the source element and no one should rely on
 1754     names of internal elements anyway.
 1756 -   The vp8enc element now expects bps (bits per second) for the
 1757     "temporal-scalability-target-bitrate" property, which is consistent
 1758     with the "target-bitrate" property. Since additional configuration
 1759     is required with modern libvpx to make temporal scaling work anyway,
 1760     chances are that very few people will have been using this property
 1762 -   vp8enc and vp9enc now default to “good quality” for the "deadline"
 1763     property rather then “best quality”. Having the deadline set to best
 1764     quality causes the encoder to be absurdly slow, most real-life users
 1765     will want the good quality tradeoff instead.
 1767 -   The experimental GstTranscoder library API in gst-plugins-bad was
 1768     changed from a GObject signal-based notification mechanism to a
 1769     GstBus/message-based mechanism akin to GstPlayer/GstPlay.
 1771 -   MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands:
 1772     timestamps passed by the application should be in running time now,
 1773     since users of the API can’t really be expected to predict the local
 1774     PTS of the muxer.
 1776 -   The GstContext used by souphttpsrc to share the session between
 1777     multiple element instances has changed. Previously it provided
 1778     direct access to the internal SoupSession object, now it only
 1779     provides access to an opaque, internal type. This change is
 1780     necessary because SoupSession is not thread-safe at all and can’t be
 1781     shared safely between arbitrary external code and souphttpsrc.
 1783 -   Python bindings: GObject-introspection related Annotation fixes have
 1784     led to a case of a GstVideo.VideoInfo-related function signature
 1785     changing in the Python bindings (possibly one or two other cases
 1786     too). This is for a function that should never have been exposed in
 1787     the first place though, so the bindings are being updated to throw
 1788     an exception in that case, and the correct replacement API has been
 1789     added in form of an override.
 1791 Known Issues
 1793 -   nothing in particular at this point (but also see possibly breaking
 1794     changes section above)
 1796 Contributors
 1798 Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro
 1799 González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley,
 1800 Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew
 1801 Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa
 1802 Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien
 1803 Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong,
 1804 Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko
 1805 Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris
 1806 White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone,
 1807 david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar,
 1808 Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet,
 1809 Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot,
 1810 Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice
 1811 Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier
 1812 Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson,
 1813 George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther,
 1814 Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan)
 1815 Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut
 1816 Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro,
 1817 Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade
 1818 Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan
 1819 Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme
 1820 Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John
 1821 Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose
 1822 Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig
 1823 Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut
 1824 Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew
 1825 Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke
 1826 Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut,
 1827 Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp,
 1828 Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule,
 1829 Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter,
 1830 Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi,
 1831 Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen,
 1832 Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier
 1833 Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand,
 1834 Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał
 1835 Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh
 1836 Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul
 1837 Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin
 1838 Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan
 1839 Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei
 1840 Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M,
 1841 Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling
 1842 Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp
 1843 Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui,
 1844 tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk,
 1845 Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne
 1846 Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier
 1847 Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang
 1848 Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun,
 1849 Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite,
 1850 Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García,
 1851 Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel
 1852 Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine,
 1853 fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger,
 1854 He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig),
 1855 Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis,
 1856 Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark
 1857 Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters,
 1858 Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan,
 1859 Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert
 1860 Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang,
 1861 Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo
 1862 Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do,
 1863 Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim
 1864 Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao,
 1865 Yoshiharu Hirose, Zhao,
 1867 … and many others who have contributed bug reports, translations, sent
 1868 suggestions or helped testing.
 1870 Stable 1.20 branch
 1872 After the 1.20.0 release there will be several 1.20.x bug-fix releases
 1873 which will contain bug fixes which have been deemed suitable for a
 1874 stable branch, but no new features or intrusive changes will be added to
 1875 a bug-fix release usually. The 1.20.x bug-fix releases will be made from
 1876 the git 1.20 branch, which will be a stable branch.
 1878 1.20.0
 1880 1.20.0 was released on 3 February 2022.
 1882 1.20.1
 1884 The first 1.20 bug-fix release (1.20.1) was released on 14 March 2022.
 1886 This release only contains bugfixes and it should be safe to update from
 1887 1.20.0.
 1889 Highlighted bugfixes in 1.20.1
 1891 -   deinterlace: various bug fixes for yadif and greedy methods
 1892 -   gtk video sink: Fix rotation not being applied when paused
 1893 -   gst-play-1.0: Fix trick-mode handling in keyboard shortcut
 1894 -   jpegdec: fix RGB conversion handling
 1895 -   matroskademux: improved ProRes video handling
 1896 -   matroskamux: Handle multiview-mode/flags/pixel-aspect-ratio caps
 1897     fields correctly when checking caps equality on input caps changes
 1898 -   videoaggregator fixes (negative rate handling, current position
 1899     rounding)
 1900 -   soup http plugin: Lookup libsoup dylib files on Apple platforms &
 1901     fix Cerbero static build on Android and iOS
 1902 -   Support build against libfreeaptx in openaptx plugin
 1903 -   Fix linking issues on Illumos distros
 1904 -   GstPlay: Fix new error + warning parsing API (was unusuable before)
 1905 -   mpegtsmux: VBR muxing fixes
 1906 -   nvdecoder: Various fixes for 4:4:4 and high-bitdepth decoding
 1907 -   Support build against libfreeaptx in openaptx plugin
 1908 -   webrtc: Various fixes to the webrtc-sendrecv python example
 1909 -   macOS: support a relocatable GStreamer.framework on macOS (see below
 1910     for details)
 1911 -   macOS: fix applemedia plugin failing to load on ARM64 macOS
 1912 -   windows: ship wavpack library
 1913 -   gst-python: Fix build with Python 3.11
 1914 -   various bug fixes, memory leak fixes, and other stability and
 1915     reliability improvements
 1917 gstreamer
 1919 -   plugin loader: show the reason when spawning of gst-plugin-scanner
 1920     fails
 1921 -   registry, plugin loading: fix dynamic relocation if
 1922     GST_PLUGIN_SUBDIR (libdir) is not a single subdirectory; improve
 1923     GST_PLUGIN_SUBDIR handling
 1924 -   context: fix transfer annotation on gst_context_writable_structure()
 1925     for bindings
 1926 -   baseparse: Don’t truncate the duration to milliseconds in
 1927     gst_base_parse_convert_default()
 1928 -   bufferpool: Deactivate pool and get rid of references to other
 1929     objects from dispose instead of finalize
 1931 gst-plugins-base
 1933 -   typefindfunctions: Fix WebVTT format detection for very short files
 1934 -   gldisplay: Reorder GST_GL_WINDOW check for egl-device
 1935 -   rtpbasepayload: Copy all buffer metadata instead of just GstMetas
 1936     for the input meta buffer
 1937 -   codec-utils: Avoid out-of-bounds error
 1938 -   navigation: Fix Since markers for mouse scroll events
 1939 -   videoaggregator: Fix for unhandled negative rate
 1940 -   videoaggregator: Use floor() to calculate current position
 1941 -   video-color: Fix for missing clipping in PQ EOTF function
 1942 -   gst-play-1.0: Fix trick-mode handling in keyboard shortcut
 1943 -   audiovisualizer: shader: Fix out of bound write
 1945 gst-plugins-good
 1947 -   deinterlace: various bug fixes for yadif method
 1948 -   deinterlace: Refactor greedyh and fix planar formats
 1949 -   deinterlace: Prevent race between method configuration and latency
 1950     query
 1951 -   gtk video sink: Fix rotation not being applied when paused
 1952 -   jpegdec: fix RGB conversion handling
 1953 -   matroskademux: improved ProRes video handling
 1954 -   matroskamux: Handle multiview-mode/flags/pixel-aspect-ratio caps
 1955     fields correctly when checking caps equality on input caps changes
 1956 -   rtprtx: don’t access type-system per buffer (performance
 1957     optimisation); code cleanups
 1958 -   rtpulpfecenc: fix unmatched g_slice_free()
 1959 -   rtpvp8depay: fix crash when making GstRTPPacketLost custom event
 1960 -   qtmux: Don’t post an error message if pushing a sample failed with
 1961     FLUSHING (e.g. on pipeline shutdown)
 1962 -   soup: Lookup libsoup dylib files on Apple platforms & fix Cerbero
 1963     static build on Android and iOS
 1964 -   souphttpsrc: element not present on iOS after 1.20.0 update
 1965 -   v4l2tuner: return NULL if no norm set
 1966 -   v4l2bufferpool: Fix race condition between qbuf and pool streamoff
 1967 -   meson: Don’t build lame plugin with -Dlame=disabled
 1969 gst-plugins-bad
 1971 -   GstPlay: Fix new error + warning parsing API (was unusuable before)
 1972 -   av1parse: let the parser continue on verbose OBUs
 1973 -   d3d11converter: Fix RGB to GRAY conversion, broken debug messages,
 1974     and add missing GRAY conversion
 1975 -   gs: look for google_cloud_cpp_storage.pc
 1976 -   ipcpipeline: fix crash and error on windows with SOCKET or _pipe()
 1977 -   ivfparse: Don’t set zero resolution on caps
 1978 -   mpegtsdemux: Handle PES headers bigger than a mpeg-ts packet; fix
 1979     locking in error code path; handle more program updates
 1980 -   mpegtsmux: Start last_ts with GST_CLOCK_TIME_NONE to fix VBR muxing
 1981     behaviour
 1982 -   mpegtsmux: Thread safety fixes: lock mux->tsmux, the programs hash
 1983     table, and pad streams
 1984 -   mpegtsmux: Skip empty buffers
 1985 -   osxaudiodeviceprovider: Add initial support for duplex devices on
 1986     OSX
 1987 -   rtpldacpay: Fix missing payload information
 1988 -   sdpdemux: add media attributes to caps, fixes ptp clock handling
 1989 -   mfaudioenc: Handle empty IMFMediaBuffer
 1990 -   nvdecoder: Various fixes for 4:4:4 and high-bitdepth decoding
 1991 -   nvenc: Fix deadlock because of too strict buffer pool size
 1992 -   va: fix library build issues, caps leaks in the vpp transform
 1993     function, and add vaav1dec to documentation
 1994 -   v4l2codecs: vp9: Minor fixes
 1995 -   v4l2codecs: h264: Correct scaling matrix ABI check
 1996 -   dtlstransport: Notify ICE transport property changes
 1997 -   webrtc: Various fixes to the webrtc-sendrecv python example
 1998 -   webrtc-ice: Fix memory leaks in gst_webrtc_ice_add_candidate()
 1999 -   Support build against libfreeaptx in openaptx plugin
 2000 -   Fix linking issues on Illumos distros
 2002 gst-plugins-ugly
 2004 -   x264enc: fix plugin long-name and description
 2006 gst-libav
 2008 -   No changes
 2010 gst-rtsp-server
 2012 -   Fix race in rtsp-client when tunneling over HTTP
 2014 gstreamer-vaapi
 2016 -   No changes
 2018 gstreamer-sharp
 2020 -   No changes
 2022 gst-omx
 2024 -   No changes
 2026 gst-python
 2028 -   Fix build with Python 3.11
 2030 gst-editing-services
 2032 -   Update validate test scenarios for videoaggregator rounding
 2033     behaviour change
 2035 gst-integration-testsuites
 2037 -   Update validate test scenarios for videoaggregator rounding
 2038     behaviour change
 2040 Development build environment
 2042 -   gst-env: various clean-ups and documentation improvements
 2044 Cerbero build tool and packaging changes in 1.20.1
 2046 -   Fix nasm version check
 2047 -   Disable certificate checking on RHEL/CentOS 7
 2048 -   packages: Ship wavpack.dll for Windows
 2049 -   osx/universal: make the library name relocatable
 2050 -   macOS: In order to support a relocatable GStreamer.framework on
 2051     macOS, an application may now need to add an rpath entry to the
 2052     location of the GStreamer.framework (which could be bundled with the
 2053     application itself). Some build systems will do this for you by
 2054     default.
 2055 -   Disable MoltenVK on macOS arm64 to fix applemedia plugin loading
 2056 -   Fix applemedia plugin failing to load on ARM64 macOS
 2058 Contributors to 1.20.1
 2060 Bastien Nocera, Branko Subasic, David Svensson Fors, Dmitry Osipenko,
 2061 Edward Hervey, Guillaume Desmottes, Havard Graff, Heiko Becker, He
 2062 Junyan, Igor V. Kovalenko, Jan Alexander Steffens (heftig), Jan Schmidt,
 2063 jinsl00000, Joseph Donofry, Jose Quaresma, Marek Vasut, Matthew Waters,
 2064 Mengkejiergeli Ba, Nicolas Dufresne, Nirbheek Chauhan, Philippe Normand,
 2065 Qi Hou, Rouven Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul
 2066 Lee, Sebastian Dröge, Sebastian Fricke, Sebastian Groß, Sebastian
 2067 Mueller, Sebastian Wick, Seungha Yang, Stéphane Cerveau, Thibault
 2068 Saunier, Tim Mooney, Tim-Philipp Müller, Víctor Manuel Jáquez Leal,
 2069 Vivia Nikolaidou, Zebediah Figura,
 2071 … and many others who have contributed bug reports, translations, sent
 2072 suggestions or helped testing. Thank you all!
 2074 List of merge requests and issues fixed in 1.20.1
 2076 -   List of Merge Requests applied in 1.20.1
 2077 -   List of Issues fixed in 1.20.1
 2079 1.20.2
 2081 The second 1.20 bug-fix release (1.20.2) was released on 2 May 2022.
 2083 This release only contains bugfixes and it should be safe to update from
 2084 1.20.x.
 2086 Highlighted bugfixes in 1.20.2
 2088 -   avviddec: Remove vc1/wmv3 override and fix crashes on WMV files with
 2089     FFMPEG 5.0+
 2090 -   macOS: fix plugin discovery for GStreamer installed via brew and fix
 2091     loading of Rust plugins
 2092 -   rtpbasepayload: various header extension handling fixes
 2093 -   rtpopusdepay: fix regression in stereo input handling if
 2094     sprop-stereo is not advertised
 2095 -   rtspclientsink: fix possible shutdown deadlock
 2096 -   mpegts: gracefully handle “empty” program maps and fix AC-4
 2097     detection
 2098 -   mxfdemux: Handle empty VANC packets and fix EOS handling
 2099 -   playbin3: various playbin3, uridecodebin3, and playsink fixes
 2100 -   ptpclock: fix initial sync-up with certain devices
 2101 -   gltransformation: let graphene alloc its structures memory aligned
 2102 -   webrtcbin fixes and webrtc sendrecv example improvements
 2103 -   video4linux2: various fixes including some fixes for Raspberry Pi
 2104     users
 2105 -   videorate segment handling fixes and other fixes
 2106 -   nvh264dec, nvh265dec: Fix broken key-unit trick modes and reverse
 2107     playback
 2108 -   wpe: Reintroduce persistent WebContext
 2109 -   cerbero: Make it easier to consume 1.20.1 macOS GStreamer .pkgs
 2110 -   build fixes and gobject annotation fixes
 2111 -   bug fixes, security fixes, memory leak fixes, and other stability
 2112     and reliability improvements
 2114 gstreamer
 2116 -   devicemonitor: clean up signal handlers and hidden providers list
 2117 -   Leaks tracer: fix pthread_atfork return value check leading to bogus
 2118     warning in log
 2119 -   Rust plugins: Not picked up by the plugin loader on macOS
 2120 -   Failed to use plugins of latest GStreamer version 1.20.x installed
 2121     by brew on macOS
 2122 -   ptpclock: Allow at least 100ms delay between Sync/Follow_Up and
 2123     Delay_Req/Delay_Resp messages. Fixes problems acquiring initial sync
 2124     with certain devices
 2125 -   meson: Add -Wl,-rpath,${libdir} on macOS
 2126 -   registry: skip Rust dep builddirs when searching for plugins
 2127     recursively
 2129 gst-plugins-base
 2131 -   appsrc: Clarify buffer ref semantics in signals documentation
 2132 -   appsrc: fix annotations for bindings
 2133 -   typefind: Skip extension parsing for data:// URIs, fixing regression
 2134     with mp4 files serialised to data uris
 2135 -   playbin3: various fixes
 2136 -   playbin3: fix missing lock when unknown stream type in pad-removed
 2137     cb
 2138 -   decodebin3: fix collection leaks
 2139 -   decodebin3: Don’t duplicate stream selections
 2140 -   discoverer: chain up to parent finalize methods in all our types to
 2141     fix memory leaks
 2142 -   glmixerbin: slightly better pad/element creation
 2143 -   gltransformation: let graphene alloc its structures memory aligned
 2144 -   ogg: fix possible buffer overrun
 2145 -   rtpbasepayload: Don’t write header extensions if there’s no
 2146     corresponding…
 2147 -   rtpbasepayload: always store input buffer meta before negotiation
 2148 -   rtpbasepayload: fix transfer annotation for push and push_list
 2149 -   subparse: don’t try to index string with -1
 2150 -   riff-media: fix memory leak after usage for g_strjoin()
 2151 -   playbin/playbin3: Allow setting a NULL URI
 2152 -   playsink: Complete reconfiguration on pad release.
 2153 -   parsebin: Expose streams of unknown type
 2154 -   pbutils: Fix wmv screen description detection
 2155 -   subparse: don’t deref a potentially NULL variable
 2156 -   rawvideoparse: set format from caps in
 2157     gst_raw_video_parse_set_config_from_caps
 2158 -   videodecoder: release stream lock after handling gap events
 2159 -   videorate: fix assertion when pushing last and only buffer without
 2160     duration
 2161 -   videorate: Revert “don’t reset on segment update” to fix segment
 2162     handling regressions
 2163 -   gst-play-1.0, gst-launch-1.0: Enable win32 high-resolution timer
 2164     also for MinGW build
 2166 gst-plugins-good
 2168 -   deinterlace: silence unused-but-set werror from imported code
 2169 -   qtdemux: fix leak of channel_mapping
 2170 -   rtpopusdepay: missing sprop-stereo should not assume mono
 2171 -   rtpjitterbuffer: Fix invalid memory access in
 2172     rtp_jitter_buffer_pop()
 2173 -   rtpptdemux: fix leak of caps when ignoring a pt
 2174 -   rtpredenc: quieten warning about ignoring header extensions
 2175 -   soup: Fix pre-processor macros in souploader for libsoup-3.0
 2176 -   twcc: Note that twcc-stats packet loss counts reordering as loss +
 2177     add some logging
 2178 -   video4linux2: Manual backports for RPi users
 2179 -   wavparse: handle URI query in any parse state, fixing audio track
 2180     selection issue in GES
 2181 -   wavparse: Unset DISCONT buffer flag for divided into multiple
 2182     buffers in push mode
 2184 gst-plugins-bad
 2186 -   av1parse: Fix several issues about the colorimetry.
 2187 -   av1parse: fix up various possible logic errors
 2188 -   dashsink: fix missing mutex unlock in error code path when failing
 2189     to get content
 2190 -   d3d11videosink: Fix for unhandled mouse double click events
 2191 -   interlace: Also handle a missing “interlace-mode” field as
 2192     progressive
 2193 -   msdk: fix build with MSVC
 2194 -   mxfdemux: Fix issues at EOS
 2195 -   mxfdemux: Handle empty VANC packets
 2196 -   nvh264dec, nvh265dec: Fix broken key-unit trick and reverse playback
 2197 -   nvvp9sldec: Increase DPB size to cover render delay
 2198 -   rvsg: fix cairo include
 2199 -   tsdemux: Fix AC-4 detection in MPEG-TS
 2200 -   tsdemux: Handle “empty” PMT gracefully
 2201 -   va: pool: don’t advertise the GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT
 2202     option any more
 2203 -   v4l2codecs: Fix memory leak
 2204 -   v4l2videodec: set frame duration according to framerate
 2205 -   webrtcbin: Update documentation of ‘get-stats’ action signal
 2206 -   webrtcbin: Check data channel transport for notifying
 2207     ‘ice-gathering-state’
 2208 -   webrtcbin: Avoid access of freed memory
 2209 -   wpe: Reintroduce persistent WebContext
 2210 -   Build: use CMake to find some openssl and exr deps
 2211 -   Fix multiple “unused-but-set variable” compiler warnings
 2213 gst-plugins-ugly
 2215 -   x264enc: Don’t try to fixate ANY allowed caps
 2217 gst-libav
 2219 -   video decoders: fix frame leak on negotiation error
 2220 -   Fix build on systems without C++ compiler
 2221 -   avviddec: Remove vc1/wmv3 override (fixing crash with FFmpeg 5
 2222 -   Segfaults on ASF/WMV files with FFMPEG 5.0+
 2224 gst-rtsp-server
 2226 -   rtspclientsink: fix possible shutdown deadlock in collect_streams()
 2227 -   Minor spelling fixes
 2229 gstreamer-vaapi
 2231 -   No changes
 2233 gstreamer-sharp
 2235 -   No changes
 2237 gst-omx
 2239 -   No changes
 2241 gst-python
 2243 -   Fix build on systems without C++ compiler
 2245 gst-editing-services
 2247 -   License clarification: GES is released under the LGPL2+ license
 2249 gst-examples:
 2251 -   Fix build on macOS with gtk+-quartz-3.0
 2252 -   player android: add missing dummy.cpp
 2253 -   player android: update for android changes
 2254 -   webrtc_sendrecv.py: Link pads instead of elements
 2255 -   webrtc_sendrecv.py: Implement all negotiation modes + bugfixes
 2257 Development build environment + gst-full build
 2259 -   meson: provide gobject-cast-checks, glib-checks and glib-asserts
 2260     options at top level as well
 2262 Cerbero build tool and packaging changes in 1.20.2
 2264 -   macOS: Make it easier to consume 1.20.1 GStreamer .pkgs
 2265 -   Android: fix text relocation regression on Android (x86/ x86_64
 2266     platforms)
 2268 Bindings
 2270 -   appsrc: fix annotations for bindings
 2271 -   bindings: The out args for gst_rtp_buffer_get_extension_data*() are
 2272     optional
 2273 -   rtpbasepayload: fix transfer annotation for push and push_list
 2275 Contributors to 1.20.2
 2277 Bastian Krause, Benjamin Gaignard, Camilo Celis Guzman, Chun-wei Fan,
 2278 Corentin Damman, Daniel Stone, Dongil Park, Edward Hervey, Fabrice
 2279 Fontaine, Guillaume Desmottes, Havard Graff, He Junyan, Hoonhee Lee, Hou
 2280 Qi, Jan Schmidt, Marc Leeman, Mathieu Duponchelle, Matthew Waters,
 2281 Nicolas Dufresne, Nirbheek Chauhan, Philippe Normand, Pierre Bourré,
 2282 Sangchul Lee, Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Thibault
 2283 Saunier, Tim-Philipp Müller, Tong Wu, Tristan Matthews, Tulio Beloqui,
 2284 Wonchul Lee, Zhao Zhili,
 2286 … and many others who have contributed bug reports, translations, sent
 2287 suggestions or helped testing. Thank you all!
 2289 List of merge requests and issues fixed in 1.20.2
 2291 -   List of Merge Requests applied in 1.20.2
 2292 -   List of Issues fixed in 1.20.2
 2294 1.20.3
 2296 The third 1.20 bug-fix release (1.20.3) was released on 15 June 2022.
 2298 This release only contains bugfixes and it should be safe to upgrade
 2299 from 1.20.x.
 2301 Highlighted bugfixes in 1.20.3
 2303 -   Security fixes in Matroska, MP4 and AVI demuxers
 2304 -   Fix scrambled video playback with hardware-accelerated VA-API
 2305     decoders on certain Intel hardware
 2306 -   playbin3/decodebin3 regression fix for unhandled streams
 2307 -   Fragmented MP4 playback fixes
 2308 -   Android H.265 encoder mapping
 2309 -   Playback of MXF files produced by FFmpeg before March 2022
 2310 -   Fix rtmp2sink crashes on 32-bit platforms
 2311 -   WebRTC improvements
 2312 -   D3D11 video decoder and screen recorder fixes
 2313 -   Performance improvements
 2314 -   Support for building against OpenCV 4.6 and other build fixes
 2315 -   Miscellaneous bug fixes, memory leak fixes, and other stability and
 2316     reliability improvements
 2318 gstreamer
 2320 -   clock: Avoid creating a weakref with every entry (performance
 2321     improvement)
 2322 -   plugin: add Apache 2 license to list of known licenses to avoid
 2323     warning
 2324 -   gst_plugin_load_file: force plugin reload if filename differs
 2325 -   Add support for LoongArch
 2327 Base Libraries
 2329 -   aggregator: Only send events up to CAPS event from
 2330     gst_aggregator_set_src_caps(), don’t send multiple caps events with
 2331     the same caps and fix negotiation in muxers
 2332 -   basetransform: handle gst_base_transform_query_caps() returning NULL
 2333 -   basetransform: fix critical if transform_caps() returned NULL
 2334 -   queuearray: Fix potential heap overflow when expanding GstQueueArray
 2336 Core Elements
 2338 -   multiqueue: fix potential crash on shutdown
 2339 -   multiqueue: fix warning: ‘is_query’ may be used uninitialized in
 2340     this function
 2341 -   multiqueue: SegFault during flushing with gcc11
 2343 gst-plugins-base
 2345 -   audioconvert: If no channel-mask can be fixated then use a NONE
 2346     channel layout
 2347 -   playbin3: Configure combiner on pad-added if needed
 2348 -   parsebin: Fix assertions/regression when dealing with un-handled
 2349     streams (fixes regression in 1.20.2)
 2350 -   appsink: Fix race condition on caps handling
 2351 -   oggdemux: Protect against invalid framerates
 2352 -   rtcpbuffer: Allow padding on first reduced size packets
 2353 -   gl: check for xlib-xcb.h header to fix build of tests on macOS with
 2354     homebrew
 2355 -   videoaggregator: unref temporary caps
 2356 -   v4l2videoenc: Setup crop rectangle if needed
 2358 Tools
 2360 -   gst-play-1.0: Print position even if duration is unknown
 2361 -   gst-device-monitor-1.0: Print string property as-is without
 2362     additional escaping
 2364 gst-plugins-good
 2366 -   aacparse: Avoid mismatch between src_caps and output_header_type
 2367 -   avidemux: Fix integer overflow resulting in heap corruption in DIB
 2368     buffer inversion code (Security fix)
 2369 -   deinterlace: Clean up error handling code
 2370 -   flvdemux: Actually make use of the debug category
 2371 -   gtkglsink: Fix double-free when OpenGL can’t be initialised
 2372 -   jack: Add support for detecting libjack on Windows
 2373 -   matroskademux: Avoid integer-overflow resulting in heap corruption
 2374     in WavPack header handling code (Security fix)
 2375 -   matroskademux, qtdemux: Fix integer overflows in zlib/bz2/etc
 2376     decompression code (Security fix)
 2377 -   qtdemux: Don’t use tfdt for parsing subsequent trun boxes
 2378 -   rtpbin: Avoid holding GST_RTP_BIN_LOCK when emitting pad-added
 2379     signal (to avoid deadlocks)
 2380 -   rtpptdemux: Don’t GST_FLOW_ERROR when ignoring invalid packets
 2381 -   smpte: Fix integer overflow with possible heap corruption in GstMask
 2382     creation. (Security fix)
 2383 -   smpte: integer overflow with possible heap corruption in GstMask
 2384     creation (Security fix)
 2385 -   soup: fix soup debug category initialisation
 2386 -   soup: Fix plugin/element init
 2387 -   v4l2: Reset transfer in gst_v4l2_object_acquire_format()
 2388 -   vpxenc: fix crash if encoder produces unmatching timestamp
 2389 -   wavparse: ensure that any pending segment is sent before an EOS
 2390     event is sent
 2392 gst-plugins-bad
 2394 -   androidmedia: Add H.265 encoder mapping
 2395 -   avfvideosrc: fix wrong framerate selected for caps
 2396 -   d3d11decoder: Fix for alternate interlacing signalling
 2397 -   d3d11decoder: Do not preallocate texture using downstream d3d11
 2398     buffer pool
 2399 -   d3d11decoder: Copy HDR10 related caps field manually
 2400 -   d3d11decoder: Work around Intel DXVA driver crash
 2401 -   d3d11screencapture: Set viewport when drawing mouse cursor
 2402 -   d3d11screencapture: Fix missing/outdated cursor shape
 2403 -   d3d11screencapturesrc: Fix crash when d3d11 device is different from
 2404     owned one
 2405 -   h264decoder: Fix for unhandled low-delay decoding case
 2406 -   matroskademux, qtdemux: Fix integer overflows in zlib/bz2/etc
 2407     decompression code (Security fix)
 2408 -   mpegtsmux: Make sure to set srcpad caps under all conditions before
 2409     outputting the first buffer
 2410 -   mpegtsmux: sends segment before caps
 2411 -   mxfdemux: Handle files produced by legacy FFmpeg
 2412 -   nvh264dec,nvh265dec: Don’t realloc bitstream buffer per slice
 2413 -   nvcodec: cuda-converter: fix nvrtc compilation on non-English locale
 2414     systems
 2415 -   opencv: Allow building against 4.6.x
 2416 -   pcapparse: Set timestamp in DTS, not PTS
 2417 -   rtmp2: fix allocation of GstRtmpMeta which caused crashes on 32-bit
 2418     platforms
 2419 -   rtmp2sink crash on Android arm 32 - cerbero
 2420 -   sdpdemux: Release request pads from rtpbin when freeing a stream
 2421 -   va: Add O_CLOEXEC flag at opening drm device (so subprocesses won’t
 2422     have access to it)
 2423 -   webrtcbin: Reject answers that don’t contain the same number of
 2424     m-line as offer
 2425 -   webrtc: datachannel: Notify low buffered amount according to spec
 2427 gst-plugins-ugly
 2429 -   No changes
 2431 gst-libav
 2433 -   No changes
 2435 gst-rtsp-server
 2437 -   No changes
 2439 gstreamer-vaapi
 2441 -   vaapi: Do not disable the whole vpp when some va operations not
 2442     available
 2443 -   vaapidecode, vaapipostproc: Disable DMAbuf from caps negotiation
 2444 -   scrambled video with some Intel graphics cards
 2446 gstreamer-sharp
 2448 -   No changes
 2450 gst-omx
 2452 -   No changes
 2454 gst-python
 2456 -   No changes
 2458 gst-editing-services
 2460 -   ges/videourisource: handle non-1/1 PAR source videos
 2462 gst-examples:
 2464 -   No changes
 2466 Development build environment + gst-full build
 2468 -   Update libnice subproject wrap to 0.1.19
 2469 -   meson: use better zlib dependency fallback
 2470 -   meson: Fix deprecation warnings
 2472 Cerbero build tool and packaging changes in 1.20.3
 2474 -   Set GSTREAMER_1_0_ROOT_[MSVC_]X86_64 root environment variable in
 2475     System section (not User section)
 2476 -   bootstrap: Add perl-FindBin dep needed by openssl (which is not
 2477     installed by default on RedHat systems)
 2478 -   Also add build-tools/local/bin to PATH on Linux
 2479 -   Add a variant to control building of the JACK plugin
 2480 -   libnice: update to 0.1.19 (fixes some WebRTC issues)
 2481 -   zlib: update to 1.2.12
 2483 Bindings
 2485 -   No changes
 2487 Contributors to 1.20.3
 2489 Adam Doupe, Alicia Boya García, Bastien Nocera, Corentin Damman, Damian
 2490 Hobson-Garcia, Diogo Goncalves, Edward Hervey, Eli Schwartz, Erwann
 2491 Gouesbet, Guillaume Desmottes, He Junyan, Hou Qi, Jakub Adam, James
 2492 Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Matthew Waters,
 2493 Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, Philippe Normand,
 2494 Rabindra Harlalka, Ruben Gonzalez, Sebastian Dröge, Seungha Yang,
 2495 Stéphane Cerveau, Thibault Saunier, Tim-Philipp Müller, Tom Schuring, U.
 2496 Artie Eoff, Víctor Manuel Jáquez Leal, WANG Xuerui, Xavier Claessens,
 2498 … and many others who have contributed bug reports, translations, sent
 2499 suggestions or helped testing. Thank you all!
 2501 List of merge requests and issues fixed in 1.20.3
 2503 -   List of Merge Requests applied in 1.20.3
 2504 -   List of Issues fixed in 1.20.3
 2506 Schedule for 1.22
 2508 Our next major feature release will be 1.22, and 1.21 will be the
 2509 unstable development version leading up to the stable 1.22 release. The
 2510 development of 1.21/1.22 will happen in the git main branch.
 2512 The plan for the 1.22 development cycle is yet to be confirmed. Assuming
 2513 no major project-wide reorganisations in the 1.22 cycle we might try and
 2514 aim for a release around August 2022.
 2516 1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
 2517 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
 2519 ------------------------------------------------------------------------
 2521 These release notes have been prepared by Tim-Philipp Müller with
 2522 contributions from Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan,
 2523 Sebastian Dröge and Seungha Yang.
 2525 License: CC BY-SA 4.0