"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
    2 
    3 GStreamer 1.20.0 was originally released on 3 February 2022.
    4 
    5 The latest bug-fix release in the 1.20 series is 1.20.3 and was released
    6 on 15 June 2022.
    7 
    8 See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
    9 version of this document.
   10 
   11 Last updated: Monday 15 June 2022, 17:00 UTC (log)
   12 
   13 Introduction
   14 
   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!
   18 
   19 As always, this release is again packed with many new features, bug
   20 fixes and other improvements.
   21 
   22 Highlights
   23 
   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
   66 
   67 Major new features and changes
   68 
   69 Noteworthy new features and API
   70 
   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.
   76 
   77 Development in GitLab was switched to a single git repository containing all the modules
   78 
   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.
   83 
   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.
   90 
   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.
   95 
   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.
   99 
  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.
  103 
  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.
  107 
  108 Modules will continue to be released as separate tarballs.
  109 
  110 For more details, please see the GStreamer mono repository FAQ.
  111 
  112 GstPlay: new high-level playback library replacing GstPlayer
  113 
  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.
  123 
  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.
  128 
  129 WebM alpha decoding
  130 
  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.
  134 
  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").
  142 
  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.
  149 
  150 -   The new codecalpha plugin contains various bits of infrastructure to
  151     support autoplugging and debugging:
  152 
  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
  165 
  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.
  169 
  170 -   Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support
  171     to GStreamer” for all the details and a demo.
  172 
  173 RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders
  174 
  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.
  186 
  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.
  194 
  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:
  198 
  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.
  205 
  206     -   "add-extension" and "clear-extension" action signals on RTP
  207         payloaders and depayloaders for manual extension management
  208 
  209     -   The "request-extension" signal will be emitted if an extension
  210         is encountered that requires explicit mapping by the application
  211 
  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.
  216 
  217     -   RTP header extension implementations:
  218 
  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
  225 
  226 -   gst_rtp_buffer_remove_extension_data() is a new helper function to
  227     remove an RTP header extension from an RTP buffer
  228 
  229 -   The existing gst_rtp_buffer_set_extension_data() now also supports
  230     shrinking the extension data in size
  231 
  232 AppSink and AppSrc improvements
  233 
  234 -   appsink: new API to pull events out of appsink in addition to
  235     buffers and buffer lists.
  236 
  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.
  243 
  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).
  249 
  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.
  253 
  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().
  256 
  257 -   appsrc: allow configuration of internal queue limits in time and
  258     buffers and add leaky mode.
  259 
  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.
  267 
  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.
  274 
  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.
  280 
  281 Better string serialization of nested GstCaps and GstStructures
  282 
  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.
  292 
  293 Convenience API for custom GstMetas
  294 
  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.
  312 
  313 Additional Element Properties on Encoding Profiles
  314 
  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.
  326 
  327     Encoding Profiles are used in the encodebin, transcodebin and
  328     camerabin elements and APIs to configure output formats (containers
  329     and elementary streams).
  330 
  331 Audio Level Indication Meta for RFC 6464
  332 
  333 -   New GstAudioLevelMeta containing Audio Level Indication as per RFC
  334     6464
  335 
  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).
  340 
  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.
  345 
  346 Automatic packet loss, data corruption and keyframe request handling for video decoders
  347 
  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:
  353 
  354     -   Video decoder subclasses can mark output frames as corrupted via
  355         the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag
  356 
  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.
  362 
  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.
  375 
  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.
  379 
  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).
  387 
  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.
  394 
  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.
  399 
  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.
  404 
  405 Improved support for custom minimal GStreamer builds
  406 
  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.
  410 
  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:
  415 
  416     -   GST_ELEMENT_REGISTER_DEFINE,
  417         GST_DEVICE_PROVIDER_REGISTER_DEFINE,
  418         GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE
  419         for the actual registration call with GStreamer
  420     -   GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER,
  421         GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER,
  422         GST_TYPE_FIND_REGISTER to call the registration function defined
  423         by the REGISTER_DEFINE macro
  424     -   GST_ELEMENT_REGISTER_DECLARE,
  425         GST_DEVICE_PROVIDER_REGISTER_DECLARE,
  426         GST_DYNAMIC_TYPE_REGISTER_DECLARE,
  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.
  430 
  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.
  438 
  439 -   gst_init() will automatically call a gst_init_static_plugins()
  440     function if one exists.
  441 
  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.
  445 
  446 New elements
  447 
  448 -   New aesdec and aesenc elements for AES encryption and decryption in
  449     a custom format.
  450 
  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.
  454 
  455 -   New fakeaudiosink and videocodectestsink elements for testing and
  456     debugging (see below for more details)
  457 
  458 -   rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC
  459     audio codec
  460 
  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.
  464 
  465 -   isac: new plugin wrapping the Internet Speech Audio Codec reference
  466     encoder and decoder from the WebRTC project.
  467 
  468 -   asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API
  469 
  470 -   gssrc, gssink: add source and sink for Google Cloud Storage
  471 
  472 -   onnx: new plugin to apply ONNX neural network models to video
  473 
  474 -   openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0)
  475 
  476 -   qroverlay, debugqroverlay: new elements that allow overlaying data
  477     on top of video in the form of a QR code
  478 
  479 -   cvtracker: new OpenCV-based tracker element
  480 
  481 -   av1parse, vp9parse: new parsers for AV1 and VP9 video
  482 
  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:
  487 
  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)
  497 
  498     See Víctor’s blog post “GstVA in GStreamer 1.20” for more details
  499     and what’s coming up next.
  500 
  501 -   vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi)
  502 
  503 -   msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media
  504     SDK / oneVPL
  505 
  506 -   nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video
  507     encoding and decoding:
  508 
  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
  514 
  515 -   Various new hardware-accelerated elements for Windows:
  516 
  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
  524 
  525 -   new Rust plugins:
  526 
  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
  561 
  562 -   New plugin codecalpha with elements to assist with WebM Alpha
  563     decoding
  564 
  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
  573 
  574 -   New hardware accelerated elements for Linux:
  575 
  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
  582 
  583 New element features and additions
  584 
  585 -   assrender: handle more font mime types; better interaction with
  586     matroskademux for embedded fonts
  587 
  588 -   audiobuffersplit: Add support for specifying output buffer size in
  589     bytes (not just duration)
  590 
  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.
  596 
  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.
  601 
  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.
  620 
  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.
  636 
  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.
  641 
  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.
  649 
  650 -   compositor:
  651 
  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)
  675 
  676 -   dashsink: add H.265 codec support and signals for allowing custom
  677     playlist/fragment output
  678 
  679 -   decodebin3:
  680 
  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
  685 
  686 -   decklink:
  687 
  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
  695 
  696 -   encodebin:
  697 
  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)
  709 
  710 -   errorignore: new "ignore-eos" property to also ignore FLOW_EOS from
  711     downstream elements
  712 
  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.
  720 
  721 -   gtksink, gtkglsink:
  722 
  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
  729 
  730 -   identity: new "stats" property allows applications to retrieve the
  731     number of bytes and buffers that have passed through so far.
  732 
  733 -   interlace: add support for more formats, esp 10-bit, 12-bit and
  734     16-bit ones
  735 
  736 -   jack: new "low-latency" property for automatic latency-optimized
  737     setting and "port-names" property to select ports explicitly
  738 
  739 -   jpegdec: support output conversion to RGB using libjpeg-turbo (for
  740     certain input files)
  741 
  742 -   line21dec:
  743 
  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
  750 
  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
  754 
  755 -   matroskademux, matroskamux: Add support for ffv1, a lossless
  756     intra-frame video coding format.
  757 
  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.
  761 
  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.
  765 
  766 -   rtpsrc: add "caps" property to allow explicit setting of the caps
  767     where needed
  768 
  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.
  775 
  776 -   tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp
  777     handling in certain corner cases and for poorly muxed streams.
  778 
  779 -   mpegtsmux:
  780 
  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.
  793 
  794 -   mp4mux:
  795 
  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.
  813 
  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.
  817 
  818 -   mxfdemux has seen a big refactoring to support non-frame wrappings
  819     and more accurate timestamp/seek handling for some formats
  820 
  821 -   msdk plugin for hardware-accelerated video encoding and decoding
  822     using the Intel Media SDK:
  823 
  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
  843 
  844 -   nvh264sldec: interlaced stream support
  845 
  846 -   openh264enc: support main, high, constrained-high and
  847     progressive-high profiles
  848 
  849 -   openjpeg: support for multithreaded decoding and encoding
  850 
  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.
  855 
  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.
  869 
  870 -   srtsrc, srtsink: add signals for the application to accept/reject
  871     incoming connections
  872 
  873 -   timeoverlay: new elapsed-running-time time mode which shows the
  874     running time since the first running time (and each flush-stop).
  875 
  876 -   udpsrc: new timestamping mode to retrieve packet receive timestamps
  877     from the kernel via socket control messages (SO_TIMESTAMPNS) on
  878     supported platforms
  879 
  880 -   uritranscodebin: new setup-source and element-setup signals for
  881     applications to configure elements used
  882 
  883 -   v4l2codecs plugin gained support for 4x4 and 32x32 tile formats
  884     enabling some platforms or direct renders. Important memory usage
  885     improvement.
  886 
  887 -   v4l2slh264dec now implements the final Linux uAPI as shipped on
  888     Linux 5.11 and later.
  889 
  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.
  900 
  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
  905 
  906 -   videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant
  907     color bars
  908 
  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.
  915 
  916 -   vp9enc: new properties to tweak encoder performance:
  917 
  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.
  928 
  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
  931 
  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.
  936 
  937 -   wpesrc:
  938 
  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
  945 
  946 -   x265enc: add negative DTS support, which means timestamps are now
  947     offset by 1h same as with x264enc
  948 
  949 RTP Payloaders and Depayloaders
  950 
  951 -   rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC
  952     audio codec
  953 
  954 -   rtph264depay:
  955 
  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.
  963 
  964 -   rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel
  965     audio in addition to the previously supported multichannel audio
  966     modes
  967 
  968 -   rtpopuspay: add DTX (Discontinuous Transmission) support
  969 
  970 -   rtpvp8depay: new "request-keyframe" property to make the depayloader
  971     automatically request a new keyframe from the sender on packet loss.
  972 
  973 -   rtpvp8pay: temporal scaling support
  974 
  975 -   rtpvp9depay: Improved SVC handling (aggregate all layers)
  976 
  977 RTP Infrastructure
  978 
  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.
  982 
  983 -   rtpreddec: BUNDLE support
  984 
  985 -   rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion
  986     Control (TWCC)
  987 
  988 -   rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC
  989     reports to be scheduled on a timer instead of per marker-bit.
  990 
  991 Plugin and library moves
  992 
  993 -   There were no plugin moves or library moves in this cycle.
  994 
  995 Plugin removals
  996 
  997 The following elements or plugins have been removed:
  998 
  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.
 1002 
 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.
 1009 
 1010 Miscellaneous API additions
 1011 
 1012 Core
 1013 
 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.
 1017 
 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.
 1021 
 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.
 1029 
 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.
 1033 
 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().
 1042 
 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.
 1052 
 1053 Plugins Base Utils library
 1054 
 1055 -   GstDiscoverer:
 1056 
 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.)
 1069 
 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.
 1074 
 1075 -   gst_pb_utils_get_file_extension_from_caps() returns a possible file
 1076     extension for given caps.
 1077 
 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 7.3.2.1.1 as well as in ISO/IEC 14496-15
 1082     section 5.3.3.1.2.
 1083 
 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.
 1088 
 1089 GStreamer OpenGL integration library and plugins
 1090 
 1091 -   glcolorconvert: added support for converting the video formats A420,
 1092     AV12, BGR, BGRA, RGBP and BGRP.
 1093 
 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
 1101 
 1102 -   Added various helper functions for handling 4x4 matrices of affine
 1103     transformations as used by GstVideoAffineTransformationMeta.
 1104 
 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.
 1118 
 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.
 1124 
 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.
 1129 
 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.
 1133 
 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.
 1138 
 1139 Video library
 1140 
 1141 -   New raw video formats:
 1142 
 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
 1151 
 1152 -   gst_video_orientation_from_tag() is new convenience API to parse the
 1153     image orientation from a GstTagList.
 1154 
 1155 -   GstVideoDecoder subframe support (see below)
 1156 
 1157 -   GstVideoCodecState now also carries some HDR metadata
 1158 
 1159 -   Ancillary video data: implement transform functions for AFD/Bar
 1160     metas, so they will be forwarded in more cases
 1161 
 1162 MPEG-TS library
 1163 
 1164 This library only handles section parsing and such, see above for
 1165 changes to the actual mpegtsmux and mpegtsdemux elements.
 1166 
 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
 1173 
 1174 GstWebRTC library + webrtcbin
 1175 
 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.
 1186 
 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.
 1191 
 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.
 1195 
 1196 -   Expose the SCTP transport as a property on webrtcbin to more closely
 1197     match the WebRTC specification.
 1198 
 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.
 1203 
 1204 -   Add configuration for choosing the size of the underlying sockets
 1205     used for transporting media data
 1206 
 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.
 1211 
 1212 -   Numerous fixes to caps and media handling to fail-fast when an
 1213     incompatible situation is detected.
 1214 
 1215 -   Improved support for attaching the required media after a remote
 1216     offer has been set.
 1217 
 1218 -   Add support for dynamically changing the amount of FEC used for a
 1219     particular stream.
 1220 
 1221 -   webrtcbin now stops further SDP processing at the first error it
 1222     encounters.
 1223 
 1224 -   Completed support for either local or the remote closing a data
 1225     channel.
 1226 
 1227 -   Various fixes when performing BUNDLEing of the media streams in
 1228     relation to RTX and FEC usage.
 1229 
 1230 -   Add support for writing out QoS DSCP marking on outgoing packets to
 1231     improve reliability in some network scenarios.
 1232 
 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.
 1236 
 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.
 1241 
 1242 GstCodecs and Video Parsers
 1243 
 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.
 1249 
 1250 Bindings support
 1251 
 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.
 1256 
 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 .
 1261 
 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.
 1281 
 1282 -   expose a GType for GstMiniObject
 1283 
 1284 -   gst_device_provider_probe() now returns non-floating device object
 1285 
 1286 API Deprecations
 1287 
 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.
 1293 
 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().
 1299 
 1300 -   gst_video_sink_center_rect() was deprecated in favour of the more
 1301     generic newly-added gst_video_center_rect().
 1302 
 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.
 1308 
 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.
 1313 
 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.
 1319 
 1320 Miscellaneous performance, latency and memory optimisations
 1321 
 1322 More video conversion fast paths
 1323 
 1324 -   v210 ↔ I420, YV12, Y42B, UYVY and YUY2
 1325 -   A420 → RGB
 1326 
 1327 Less jitter when waiting on the system clock
 1328 
 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.
 1337 
 1338 Video decoder subframe support
 1339 
 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.
 1345 
 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).
 1349 
 1350 Miscellaneous other changes and enhancements
 1351 
 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.
 1360 
 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.
 1366 
 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.
 1370 
 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>".
 1375 
 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.
 1380 
 1381 Tracing framework, debugging and testing improvements
 1382 
 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
 1390 
 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.
 1395 
 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.
 1401 
 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.
 1408 
 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.
 1414 
 1415 Tools
 1416 
 1417 gst-inspect-1.0
 1418 
 1419 -   Can sort the list of plugins by passing --sort=name as command line
 1420     option
 1421 
 1422 gst-launch-1.0
 1423 
 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).
 1429 
 1430 gst-play-1.0
 1431 
 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)
 1438 
 1439 gst-device-monitor-1.0
 1440 
 1441 -   New --include-hidden command line argument to also show “hidden”
 1442     device providers
 1443 
 1444 ges-launch-1.0
 1445 
 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.
 1451 
 1452 GStreamer RTSP server
 1453 
 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.
 1459 
 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.
 1468 
 1469 -   multithreading fixes (races, refcounting issues, deadlocks)
 1470 
 1471 -   ONVIF audio backchannel fixes
 1472 
 1473 -   ONVIF trick mode optimisations
 1474 
 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.
 1479 
 1480 GStreamer VAAPI
 1481 
 1482 -   new AV1 decoder element (vaapiav1dec)
 1483 
 1484 -   H.264 decoder: handle stereoscopic 3D video with frame packing
 1485     arrangement SEI messages
 1486 
 1487 -   H.265 encoder: added Screen Content Coding extensions support
 1488 
 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)
 1491 
 1492 -   vaapipostproc: gained BT2020 color standard support
 1493 
 1494 -   vaapidecode: now generates caps templates dynamically at runtime in
 1495     order to advertise actually supported caps instead of all
 1496     theoretically supported caps.
 1497 
 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.
 1502 
 1503 GStreamer OMX
 1504 
 1505 -   subframe support in H.264/H.265 decoders
 1506 
 1507 GStreamer Editing Services and NLE
 1508 
 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
 1525 
 1526 GStreamer validate
 1527 
 1528 -   report: Add a way to force backtraces on reports even if not a
 1529     critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE)
 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
 1547 
 1548 GStreamer Python Bindings
 1549 
 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)
 1554 
 1555 GStreamer C# Bindings
 1556 
 1557 -   Fix GstDebugGraphDetails enum
 1558 -   Updated to latest GtkSharp
 1559 -   Updated to include GStreamer 1.20 API
 1560 
 1561 GStreamer Rust Bindings and Rust Plugins
 1562 
 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).
 1567 
 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.
 1572 
 1573 Build and Dependencies
 1574 
 1575 -   Meson 0.59 or newer is now required to build GStreamer.
 1576 
 1577 -   The GLib requirement has been bumped to GLib 2.56 or newer (from
 1578     March 2018).
 1579 
 1580 -   The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8
 1581 
 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!
 1587 
 1588 Explicit opt-in required for build of certain plugins with (A)GPL dependencies
 1589 
 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.
 1594 
 1595 See Building plugins with (A)GPL-licensed dependencies for more details
 1596 and a non-exhaustive list of plugins affected.
 1597 
 1598 gst-build: replaced by mono repository
 1599 
 1600 See mono repository section above and the GStreamer mono repository FAQ.
 1601 
 1602 Cerbero
 1603 
 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.
 1607 
 1608 General Cerbero improvements
 1609 
 1610 -   Plugin removed: libvisual
 1611 -   New plugins: rtpmanagerbad and rist
 1612 
 1613 macOS / iOS specific Cerbero improvements
 1614 
 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
 1622 
 1623 Windows specific Cerbero improvements
 1624 
 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
 1634 
 1635 Windows MSI installer
 1636 
 1637 -   no major changes
 1638 
 1639 Linux specific Cerbero improvements
 1640 
 1641 -   Fedora, Debian OS release support is now more future-proof
 1642 -   Amazon Linux 2 support has been added
 1643 
 1644 Android specific Cerbero improvements
 1645 
 1646 -   no major changes
 1647 
 1648 Platform-specific changes and improvements
 1649 
 1650 Android
 1651 
 1652 -   No major changes
 1653 
 1654 macOS and iOS
 1655 
 1656 -   applemedia: add ProRes support to vtenc and vtdec
 1657 
 1658 -   The GStreamer.framework location is now relocatable and is not
 1659     required to be /Library/Frameworks/
 1660 
 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.
 1664 
 1665 Windows
 1666 
 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.
 1680 
 1681 -   dxgiscreencapsrc now supports resolution changes
 1682 
 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.
 1688 
 1689 -   The wasapi device providers now detect and notify dynamic device
 1690     additions/removals
 1691 
 1692 -   d3d11screencapturesrc: new desktop capture element, including
 1693     GstDeviceProvider implementation to enumerate/select target monitors
 1694     for capture.
 1695 
 1696 -   Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs
 1697     (d3d11av1dec, d3d11mpeg2dec)
 1698 
 1699 -   VP9 decoding got more reliable and stable thanks to a newly written
 1700     codec parser
 1701 
 1702 -   Support for decoding interlaced H.264/AVC streams
 1703 
 1704 -   Hardware-accelerated video deinterlacing (d3d11deinterlace) and
 1705     video mixing (d3d11compositor)
 1706 
 1707 -   Video mixing with the Direct3D11 API (d3d11compositor)
 1708 
 1709 -   MediaFoundation API based hardware encoders gained the ability to
 1710     receive Direct3D11 textures as an input
 1711 
 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
 1715 
 1716 Linux
 1717 
 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)
 1721 
 1722 -   kmssink: gained support for NV24, NV61, RGB16/BGR16 formats;
 1723     auto-detect NVIDIA Tegra driver
 1724 
 1725 Documentation improvements
 1726 
 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.
 1733 
 1734 Possibly Breaking and Other Noteworthy Behavioural Changes
 1735 
 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.
 1739 
 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.
 1744 
 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.
 1749 
 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.
 1755 
 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
 1761 
 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.
 1766 
 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.
 1770 
 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.
 1775 
 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.
 1782 
 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.
 1790 
 1791 Known Issues
 1792 
 1793 -   nothing in particular at this point (but also see possibly breaking
 1794     changes section above)
 1795 
 1796 Contributors
 1797 
 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,
 1866 
 1867 … and many others who have contributed bug reports, translations, sent
 1868 suggestions or helped testing.
 1869 
 1870 Stable 1.20 branch
 1871 
 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.
 1877 
 1878 1.20.0
 1879 
 1880 1.20.0 was released on 3 February 2022.
 1881 
 1882 1.20.1
 1883 
 1884 The first 1.20 bug-fix release (1.20.1) was released on 14 March 2022.
 1885 
 1886 This release only contains bugfixes and it should be safe to update from
 1887 1.20.0.
 1888 
 1889 Highlighted bugfixes in 1.20.1
 1890 
 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
 1916 
 1917 gstreamer
 1918 
 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
 1930 
 1931 gst-plugins-base
 1932 
 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
 1944 
 1945 gst-plugins-good
 1946 
 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
 1968 
 1969 gst-plugins-bad
 1970 
 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
 2001 
 2002 gst-plugins-ugly
 2003 
 2004 -   x264enc: fix plugin long-name and description
 2005 
 2006 gst-libav
 2007 
 2008 -   No changes
 2009 
 2010 gst-rtsp-server
 2011 
 2012 -   Fix race in rtsp-client when tunneling over HTTP
 2013 
 2014 gstreamer-vaapi
 2015 
 2016 -   No changes
 2017 
 2018 gstreamer-sharp
 2019 
 2020 -   No changes
 2021 
 2022 gst-omx
 2023 
 2024 -   No changes
 2025 
 2026 gst-python
 2027 
 2028 -   Fix build with Python 3.11
 2029 
 2030 gst-editing-services
 2031 
 2032 -   Update validate test scenarios for videoaggregator rounding
 2033     behaviour change
 2034 
 2035 gst-integration-testsuites
 2036 
 2037 -   Update validate test scenarios for videoaggregator rounding
 2038     behaviour change
 2039 
 2040 Development build environment
 2041 
 2042 -   gst-env: various clean-ups and documentation improvements
 2043 
 2044 Cerbero build tool and packaging changes in 1.20.1
 2045 
 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
 2057 
 2058 Contributors to 1.20.1
 2059 
 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,
 2070 
 2071 … and many others who have contributed bug reports, translations, sent
 2072 suggestions or helped testing. Thank you all!
 2073 
 2074 List of merge requests and issues fixed in 1.20.1
 2075 
 2076 -   List of Merge Requests applied in 1.20.1
 2077 -   List of Issues fixed in 1.20.1
 2078 
 2079 1.20.2
 2080 
 2081 The second 1.20 bug-fix release (1.20.2) was released on 2 May 2022.
 2082 
 2083 This release only contains bugfixes and it should be safe to update from
 2084 1.20.x.
 2085 
 2086 Highlighted bugfixes in 1.20.2
 2087 
 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
 2113 
 2114 gstreamer
 2115 
 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
 2128 
 2129 gst-plugins-base
 2130 
 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
 2165 
 2166 gst-plugins-good
 2167 
 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
 2183 
 2184 gst-plugins-bad
 2185 
 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
 2212 
 2213 gst-plugins-ugly
 2214 
 2215 -   x264enc: Don’t try to fixate ANY allowed caps
 2216 
 2217 gst-libav
 2218 
 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+
 2223 
 2224 gst-rtsp-server
 2225 
 2226 -   rtspclientsink: fix possible shutdown deadlock in collect_streams()
 2227 -   Minor spelling fixes
 2228 
 2229 gstreamer-vaapi
 2230 
 2231 -   No changes
 2232 
 2233 gstreamer-sharp
 2234 
 2235 -   No changes
 2236 
 2237 gst-omx
 2238 
 2239 -   No changes
 2240 
 2241 gst-python
 2242 
 2243 -   Fix build on systems without C++ compiler
 2244 
 2245 gst-editing-services
 2246 
 2247 -   License clarification: GES is released under the LGPL2+ license
 2248 
 2249 gst-examples:
 2250 
 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
 2256 
 2257 Development build environment + gst-full build
 2258 
 2259 -   meson: provide gobject-cast-checks, glib-checks and glib-asserts
 2260     options at top level as well
 2261 
 2262 Cerbero build tool and packaging changes in 1.20.2
 2263 
 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)
 2267 
 2268 Bindings
 2269 
 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
 2274 
 2275 Contributors to 1.20.2
 2276 
 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,
 2285 
 2286 … and many others who have contributed bug reports, translations, sent
 2287 suggestions or helped testing. Thank you all!
 2288 
 2289 List of merge requests and issues fixed in 1.20.2
 2290 
 2291 -   List of Merge Requests applied in 1.20.2
 2292 -   List of Issues fixed in 1.20.2
 2293 
 2294 1.20.3
 2295 
 2296 The third 1.20 bug-fix release (1.20.3) was released on 15 June 2022.
 2297 
 2298 This release only contains bugfixes and it should be safe to upgrade
 2299 from 1.20.x.
 2300 
 2301 Highlighted bugfixes in 1.20.3
 2302 
 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
 2317 
 2318 gstreamer
 2319 
 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
 2326 
 2327 Base Libraries
 2328 
 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
 2335 
 2336 Core Elements
 2337 
 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
 2342 
 2343 gst-plugins-base
 2344 
 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
 2357 
 2358 Tools
 2359 
 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
 2363 
 2364 gst-plugins-good
 2365 
 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
 2391 
 2392 gst-plugins-bad
 2393 
 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 1.20.2.0
 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
 2426 
 2427 gst-plugins-ugly
 2428 
 2429 -   No changes
 2430 
 2431 gst-libav
 2432 
 2433 -   No changes
 2434 
 2435 gst-rtsp-server
 2436 
 2437 -   No changes
 2438 
 2439 gstreamer-vaapi
 2440 
 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
 2445 
 2446 gstreamer-sharp
 2447 
 2448 -   No changes
 2449 
 2450 gst-omx
 2451 
 2452 -   No changes
 2453 
 2454 gst-python
 2455 
 2456 -   No changes
 2457 
 2458 gst-editing-services
 2459 
 2460 -   ges/videourisource: handle non-1/1 PAR source videos
 2461 
 2462 gst-examples:
 2463 
 2464 -   No changes
 2465 
 2466 Development build environment + gst-full build
 2467 
 2468 -   Update libnice subproject wrap to 0.1.19
 2469 -   meson: use better zlib dependency fallback
 2470 -   meson: Fix deprecation warnings
 2471 
 2472 Cerbero build tool and packaging changes in 1.20.3
 2473 
 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
 2482 
 2483 Bindings
 2484 
 2485 -   No changes
 2486 
 2487 Contributors to 1.20.3
 2488 
 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,
 2497 
 2498 … and many others who have contributed bug reports, translations, sent
 2499 suggestions or helped testing. Thank you all!
 2500 
 2501 List of merge requests and issues fixed in 1.20.3
 2502 
 2503 -   List of Merge Requests applied in 1.20.3
 2504 -   List of Issues fixed in 1.20.3
 2505 
 2506 Schedule for 1.22
 2507 
 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.
 2511 
 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.
 2515 
 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.
 2518 
 2519 ------------------------------------------------------------------------
 2520 
 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.
 2524 
 2525 License: CC BY-SA 4.0