• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1GStreamer 1.20 Release Notes
2
3GStreamer 1.20.0 was originally released on 3 February 2022.
4
5The latest bug-fix release in the 1.20 series is 1.20.3 and was released
6on 15 June 2022.
7
8See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
9version of this document.
10
11Last updated: Monday 15 June 2022, 17:00 UTC (log)
12
13Introduction
14
15The GStreamer team is proud to announce a new major feature release in
16the stable 1.x API series of your favourite cross-platform multimedia
17framework!
18
19As always, this release is again packed with many new features, bug
20fixes and other improvements.
21
22Highlights
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
67Major new features and changes
68
69Noteworthy 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
77Development in GitLab was switched to a single git repository containing all the modules
78
79The GStreamer multimedia framework is a set of libraries and plugins
80split into a number of distinct modules which are released independently
81and which have so far been developed in separate git repositories in
82freedesktop.org GitLab.
83
84In addition to these separate git repositories there was a gst-build
85module that would use the Meson build system’s subproject feature to
86download each individual module and then build everything in one go. It
87would also provide an uninstalled development environment that made it
88easy to work on GStreamer and use or test versions other than the
89system-installed GStreamer version.
90
91All of these modules have now (as of 28 September 2021) been merged into
92a single git repository (“Mono repository” or “monorepo”) which should
93simplify development workflows and continuous integration, especially
94where changes need to be made to multiple modules at once.
95
96This mono repository merge will primarily affect GStreamer developers
97and contributors and anyone who has workflows based on the GStreamer git
98repositories.
99
100The Rust bindings and Rust plugins modules have not been merged into the
101mono repository at this time because they follow a different release
102cycle.
103
104The mono repository lives in the existing GStreamer core git repository
105in GitLab in the new main branch and all future development will happen
106on this branch.
107
108Modules will continue to be released as separate tarballs.
109
110For more details, please see the GStreamer mono repository FAQ.
111
112GstPlay: 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
129WebM 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
173RTP 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
232AppSink 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
281Better 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
293Convenience 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
313Additional 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
331Audio 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
346Automatic 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
405Improved 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
446New 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
583New 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
949RTP 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
977RTP 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
991Plugin and library moves
992
993-   There were no plugin moves or library moves in this cycle.
994
995Plugin removals
996
997The 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
1010Miscellaneous API additions
1011
1012Core
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
1053Plugins 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
1089GStreamer 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
1139Video 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
1162MPEG-TS library
1163
1164This library only handles section parsing and such, see above for
1165changes 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
1174GstWebRTC 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
1242GstCodecs 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
1250Bindings 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
1286API 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
1320Miscellaneous performance, latency and memory optimisations
1321
1322More video conversion fast paths
1323
1324-   v210 ↔ I420, YV12, Y42B, UYVY and YUY2
1325-   A420 → RGB
1326
1327Less 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
1338Video 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
1350Miscellaneous 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
1381Tracing 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
1415Tools
1416
1417gst-inspect-1.0
1418
1419-   Can sort the list of plugins by passing --sort=name as command line
1420    option
1421
1422gst-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
1430gst-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
1439gst-device-monitor-1.0
1440
1441-   New --include-hidden command line argument to also show “hidden”
1442    device providers
1443
1444ges-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
1452GStreamer 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
1480GStreamer 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
1503GStreamer OMX
1504
1505-   subframe support in H.264/H.265 decoders
1506
1507GStreamer 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
1526GStreamer 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
1548GStreamer 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
1555GStreamer C# Bindings
1556
1557-   Fix GstDebugGraphDetails enum
1558-   Updated to latest GtkSharp
1559-   Updated to include GStreamer 1.20 API
1560
1561GStreamer 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
1573Build 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
1588Explicit opt-in required for build of certain plugins with (A)GPL dependencies
1589
1590Some plugins have GPL- or AGPL-licensed dependencies and those plugins
1591will no longer be built by default unless you have explicitly opted in
1592to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson,
1593even if the required dependencies are available.
1594
1595See Building plugins with (A)GPL-licensed dependencies for more details
1596and a non-exhaustive list of plugins affected.
1597
1598gst-build: replaced by mono repository
1599
1600See mono repository section above and the GStreamer mono repository FAQ.
1601
1602Cerbero
1603
1604Cerbero is a meta build system used to build GStreamer plus dependencies
1605on platforms where dependencies are not readily available, such as
1606Windows, Android, iOS and macOS.
1607
1608General Cerbero improvements
1609
1610-   Plugin removed: libvisual
1611-   New plugins: rtpmanagerbad and rist
1612
1613macOS / 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
1623Windows 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
1635Windows MSI installer
1636
1637-   no major changes
1638
1639Linux specific Cerbero improvements
1640
1641-   Fedora, Debian OS release support is now more future-proof
1642-   Amazon Linux 2 support has been added
1643
1644Android specific Cerbero improvements
1645
1646-   no major changes
1647
1648Platform-specific changes and improvements
1649
1650Android
1651
1652-   No major changes
1653
1654macOS 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
1665Windows
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
1716Linux
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
1725Documentation 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
1734Possibly 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
1791Known Issues
1792
1793-   nothing in particular at this point (but also see possibly breaking
1794    changes section above)
1795
1796Contributors
1797
1798Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro
1799González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley,
1800Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew
1801Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa
1802Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien
1803Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong,
1804Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko
1805Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris
1806White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone,
1807david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar,
1808Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet,
1809Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot,
1810Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice
1811Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier
1812Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson,
1813George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther,
1814Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan)
1815Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut
1816Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro,
1817Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade
1818Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan
1819Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme
1820Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John
1821Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose
1822Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig
1823Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut
1824Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew
1825Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke
1826Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut,
1827Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp,
1828Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule,
1829Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter,
1830Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi,
1831Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen,
1832Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier
1833Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand,
1834Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał
1835Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh
1836Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul
1837Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin
1838Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan
1839Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei
1840Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M,
1841Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling
1842Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp
1843Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui,
1844tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk,
1845Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne
1846Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier
1847Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang
1848Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun,
1849Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite,
1850Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García,
1851Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel
1852Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine,
1853fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger,
1854He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig),
1855Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis,
1856Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark
1857Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters,
1858Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan,
1859Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert
1860Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang,
1861Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo
1862Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do,
1863Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim
1864Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao,
1865Yoshiharu Hirose, Zhao,
1866
1867… and many others who have contributed bug reports, translations, sent
1868suggestions or helped testing.
1869
1870Stable 1.20 branch
1871
1872After the 1.20.0 release there will be several 1.20.x bug-fix releases
1873which will contain bug fixes which have been deemed suitable for a
1874stable branch, but no new features or intrusive changes will be added to
1875a bug-fix release usually. The 1.20.x bug-fix releases will be made from
1876the git 1.20 branch, which will be a stable branch.
1877
18781.20.0
1879
18801.20.0 was released on 3 February 2022.
1881
18821.20.1
1883
1884The first 1.20 bug-fix release (1.20.1) was released on 14 March 2022.
1885
1886This release only contains bugfixes and it should be safe to update from
18871.20.0.
1888
1889Highlighted 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
1917gstreamer
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
1931gst-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
1945gst-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
1969gst-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
2002gst-plugins-ugly
2003
2004-   x264enc: fix plugin long-name and description
2005
2006gst-libav
2007
2008-   No changes
2009
2010gst-rtsp-server
2011
2012-   Fix race in rtsp-client when tunneling over HTTP
2013
2014gstreamer-vaapi
2015
2016-   No changes
2017
2018gstreamer-sharp
2019
2020-   No changes
2021
2022gst-omx
2023
2024-   No changes
2025
2026gst-python
2027
2028-   Fix build with Python 3.11
2029
2030gst-editing-services
2031
2032-   Update validate test scenarios for videoaggregator rounding
2033    behaviour change
2034
2035gst-integration-testsuites
2036
2037-   Update validate test scenarios for videoaggregator rounding
2038    behaviour change
2039
2040Development build environment
2041
2042-   gst-env: various clean-ups and documentation improvements
2043
2044Cerbero 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
2058Contributors to 1.20.1
2059
2060Bastien Nocera, Branko Subasic, David Svensson Fors, Dmitry Osipenko,
2061Edward Hervey, Guillaume Desmottes, Havard Graff, Heiko Becker, He
2062Junyan, Igor V. Kovalenko, Jan Alexander Steffens (heftig), Jan Schmidt,
2063jinsl00000, Joseph Donofry, Jose Quaresma, Marek Vasut, Matthew Waters,
2064Mengkejiergeli Ba, Nicolas Dufresne, Nirbheek Chauhan, Philippe Normand,
2065Qi Hou, Rouven Czerwinski, Ruben Gonzalez, Sanchayan Maity, Sangchul
2066Lee, Sebastian Dröge, Sebastian Fricke, Sebastian Groß, Sebastian
2067Mueller, Sebastian Wick, Seungha Yang, Stéphane Cerveau, Thibault
2068Saunier, Tim Mooney, Tim-Philipp Müller, Víctor Manuel Jáquez Leal,
2069Vivia Nikolaidou, Zebediah Figura,
2070
2071… and many others who have contributed bug reports, translations, sent
2072suggestions or helped testing. Thank you all!
2073
2074List 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
20791.20.2
2080
2081The second 1.20 bug-fix release (1.20.2) was released on 2 May 2022.
2082
2083This release only contains bugfixes and it should be safe to update from
20841.20.x.
2085
2086Highlighted 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
2114gstreamer
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
2129gst-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
2166gst-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
2184gst-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
2213gst-plugins-ugly
2214
2215-   x264enc: Don’t try to fixate ANY allowed caps
2216
2217gst-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
2224gst-rtsp-server
2225
2226-   rtspclientsink: fix possible shutdown deadlock in collect_streams()
2227-   Minor spelling fixes
2228
2229gstreamer-vaapi
2230
2231-   No changes
2232
2233gstreamer-sharp
2234
2235-   No changes
2236
2237gst-omx
2238
2239-   No changes
2240
2241gst-python
2242
2243-   Fix build on systems without C++ compiler
2244
2245gst-editing-services
2246
2247-   License clarification: GES is released under the LGPL2+ license
2248
2249gst-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
2257Development 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
2262Cerbero 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
2268Bindings
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
2275Contributors to 1.20.2
2276
2277Bastian Krause, Benjamin Gaignard, Camilo Celis Guzman, Chun-wei Fan,
2278Corentin Damman, Daniel Stone, Dongil Park, Edward Hervey, Fabrice
2279Fontaine, Guillaume Desmottes, Havard Graff, He Junyan, Hoonhee Lee, Hou
2280Qi, Jan Schmidt, Marc Leeman, Mathieu Duponchelle, Matthew Waters,
2281Nicolas Dufresne, Nirbheek Chauhan, Philippe Normand, Pierre Bourré,
2282Sangchul Lee, Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Thibault
2283Saunier, Tim-Philipp Müller, Tong Wu, Tristan Matthews, Tulio Beloqui,
2284Wonchul Lee, Zhao Zhili,
2285
2286… and many others who have contributed bug reports, translations, sent
2287suggestions or helped testing. Thank you all!
2288
2289List 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
22941.20.3
2295
2296The third 1.20 bug-fix release (1.20.3) was released on 15 June 2022.
2297
2298This release only contains bugfixes and it should be safe to upgrade
2299from 1.20.x.
2300
2301Highlighted 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
2318gstreamer
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
2327Base 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
2336Core 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
2343gst-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
2358Tools
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
2364gst-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
2392gst-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
2427gst-plugins-ugly
2428
2429-   No changes
2430
2431gst-libav
2432
2433-   No changes
2434
2435gst-rtsp-server
2436
2437-   No changes
2438
2439gstreamer-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
2446gstreamer-sharp
2447
2448-   No changes
2449
2450gst-omx
2451
2452-   No changes
2453
2454gst-python
2455
2456-   No changes
2457
2458gst-editing-services
2459
2460-   ges/videourisource: handle non-1/1 PAR source videos
2461
2462gst-examples:
2463
2464-   No changes
2465
2466Development 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
2472Cerbero 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
2483Bindings
2484
2485-   No changes
2486
2487Contributors to 1.20.3
2488
2489Adam Doupe, Alicia Boya García, Bastien Nocera, Corentin Damman, Damian
2490Hobson-Garcia, Diogo Goncalves, Edward Hervey, Eli Schwartz, Erwann
2491Gouesbet, Guillaume Desmottes, He Junyan, Hou Qi, Jakub Adam, James
2492Hilliard, Jan Alexander Steffens (heftig), Jan Schmidt, Matthew Waters,
2493Nicolas Dufresne, Nirbheek Chauhan, Olivier Crête, Philippe Normand,
2494Rabindra Harlalka, Ruben Gonzalez, Sebastian Dröge, Seungha Yang,
2495Stéphane Cerveau, Thibault Saunier, Tim-Philipp Müller, Tom Schuring, U.
2496Artie Eoff, Víctor Manuel Jáquez Leal, WANG Xuerui, Xavier Claessens,
2497
2498… and many others who have contributed bug reports, translations, sent
2499suggestions or helped testing. Thank you all!
2500
2501List 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
2506Schedule for 1.22
2507
2508Our next major feature release will be 1.22, and 1.21 will be the
2509unstable development version leading up to the stable 1.22 release. The
2510development of 1.21/1.22 will happen in the git main branch.
2511
2512The plan for the 1.22 development cycle is yet to be confirmed. Assuming
2513no major project-wide reorganisations in the 1.22 cycle we might try and
2514aim for a release around August 2022.
2515
25161.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
25171.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
2518
2519------------------------------------------------------------------------
2520
2521These release notes have been prepared by Tim-Philipp Müller with
2522contributions from Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan,
2523Sebastian Dröge and Seungha Yang.
2524
2525License: CC BY-SA 4.0
2526