webrtcbin: initial support for sending and receiving simulcast streams
[platform/upstream/gstreamer.git] / subprojects / gst-plugins-bad / NEWS
1 GStreamer 1.20 Release Notes
2
3 GStreamer 1.20.0 was released on 3 February 2022.
4
5 See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
6 version of this document.
7
8 Last updated: Wednesday 2 February 2022, 23:30 UTC (log)
9
10 Introduction
11
12 The GStreamer team is proud to announce a new major feature release in
13 the stable 1.x API series of your favourite cross-platform multimedia
14 framework!
15
16 As always, this release is again packed with many new features, bug
17 fixes and other improvements.
18
19 Highlights
20
21 -   Development in GitLab was switched to a single git repository
22     containing all the modules
23 -   GstPlay: new high-level playback library, replaces GstPlayer
24 -   WebM Alpha decoding support
25 -   Encoding profiles can now be tweaked with additional
26     application-specified element properties
27 -   Compositor: multi-threaded video conversion and mixing
28 -   RTP header extensions: unified support in RTP depayloader and
29     payloader base classes
30 -   SMPTE 2022-1 2-D Forward Error Correction support
31 -   Smart encoding (pass through) support for VP8, VP9, H.265 in
32     encodebin and transcodebin
33 -   Runtime compatibility support for libsoup2 and libsoup3 (libsoup3
34     support experimental)
35 -   Video decoder subframe support
36 -   Video decoder automatic packet-loss, data corruption, and keyframe
37     request handling for RTP / WebRTC / RTSP
38 -   mp4 and Matroska muxers now support profile/level/resolution changes
39     for H.264/H.265 input streams (i.e. codec data changing on the fly)
40 -   mp4 muxing mode that initially creates a fragmented mp4 which is
41     converted to a regular mp4 on EOS
42 -   Audio support for the WebKit Port for Embedded (WPE) web page source
43     element
44 -   CUDA based video color space convert and rescale elements and
45     upload/download elements
46 -   NVIDIA memory:NVMM support for OpenGL glupload and gldownload
47     elements
48 -   Many WebRTC improvements
49 -   The new VA-API plugin implementation fleshed out with more decoders
50     and new postproc elements
51 -   AppSink API to retrieve events in addition to buffers and buffer
52     lists
53 -   AppSrc gained more configuration options for the internal queue
54     (leakiness, limits in buffers and time, getters to read current
55     levels)
56 -   Updated Rust bindings and many new Rust plugins
57 -   Improved support for custom minimal GStreamer builds
58 -   Support build against FFmpeg 5.0
59 -   Linux Stateless CODEC support gained MPEG-2 and VP9
60 -   Windows Direct3D11/DXVA decoder gained AV1 and MPEG-2 support
61 -   Lots of new plugins, features, performance improvements and bug
62     fixes
63
64 Major new features and changes
65
66 Noteworthy new features and API
67
68 -   gst_element_get_request_pad() has been deprecated in favour of the
69     newly-added gst_element_request_pad_simple() which does the exact
70     same thing but has a less confusing name that hopefully makes clear
71     that the function request a new pad rather than just retrieves an
72     already-existing request pad.
73
74 Development in GitLab was switched to a single git repository containing all the modules
75
76 The GStreamer multimedia framework is a set of libraries and plugins
77 split into a number of distinct modules which are released independently
78 and which have so far been developed in separate git repositories in
79 freedesktop.org GitLab.
80
81 In addition to these separate git repositories there was a gst-build
82 module that would use the Meson build system’s subproject feature to
83 download each individual module and then build everything in one go. It
84 would also provide an uninstalled development environment that made it
85 easy to work on GStreamer and use or test versions other than the
86 system-installed GStreamer version.
87
88 All of these modules have now (as of 28 September 2021) been merged into
89 a single git repository (“Mono repository” or “monorepo”) which should
90 simplify development workflows and continuous integration, especially
91 where changes need to be made to multiple modules at once.
92
93 This mono repository merge will primarily affect GStreamer developers
94 and contributors and anyone who has workflows based on the GStreamer git
95 repositories.
96
97 The Rust bindings and Rust plugins modules have not been merged into the
98 mono repository at this time because they follow a different release
99 cycle.
100
101 The mono repository lives in the existing GStreamer core git repository
102 in GitLab in the new main branch and all future development will happen
103 on this branch.
104
105 Modules will continue to be released as separate tarballs.
106
107 For more details, please see the GStreamer mono repository FAQ.
108
109 GstPlay: new high-level playback library replacing GstPlayer
110
111 -   GstPlay is a new high-level playback library that replaces the older
112     GstPlayer API. It is basically the same API as GstPlayer but
113     refactored to use bus messages for application notifications instead
114     of GObject signals. There is still a signal adapter object for those
115     who prefer signals. Since the existing GstPlayer API is already in
116     use in various applications, it didn’t seem like a good idea to
117     break it entirely. Instead a new API was added, and it is expected
118     that this new GstPlay API will be moved to gst-plugins-base in
119     future.
120
121 -   The existing GstPlayer API is scheduled for deprecation and will be
122     removed at some point in the future (e.g. in GStreamer 1.24), so
123     application developers are urged to migrate to the new GstPlay API
124     at their earliest convenience.
125
126 WebM alpha decoding
127
128 -   Implement WebM alpha decoding (VP8/VP9 with alpha), which required
129     support and additions in various places. This is supported both with
130     software decoders and hardware-accelerated decoders.
131
132 -   VP8/VP9 don’t support alpha components natively in the codec, so the
133     way this is implemented in WebM is by encoding the alpha plane with
134     transparency data as a separate VP8/VP9 stream. Inside the WebM
135     container (a variant of Matroska) this is coded as a single video
136     track with the “normal” VP8/VP9 video data making up the main video
137     data and each frame of video having an encoded alpha frame attached
138     to it as extra data ("BlockAdditional").
139
140 -   matroskademux has been extended extract this per-frame alpha side
141     data and attach it in form of a GstVideoCodecAlphaMeta to the
142     regular video buffers. Note that this new meta is specific to this
143     VP8/VP9 alpha support and can’t be used to just add alpha support to
144     other codecs that don’t support it. Lastly, matroskademux also
145     advertises the fact that the streams contain alpha in the caps.
146
147 -   The new codecalpha plugin contains various bits of infrastructure to
148     support autoplugging and debugging:
149
150     -   codecalphademux splits out the alpha stream from the metas on
151         the regular VP8/VP9 buffers
152     -   alphacombine takes two decoded raw video streams (one alpha, one
153         the regular video) and combines it into a video stream with
154         alpha
155     -   vp8alphadecodebin + vp9alphadecodebin are wrapper bins that use
156         the regular vp8dec and vp9dec software decoders to decode
157         regular and alpha streams and combine them again. To decodebin
158         these look like regular decoders.
159     -   The V4L2 CODEC plugin has stateless VP8/VP9 decoders that can
160         decode both alpha and non-alpha stream with a single decoder
161         instance
162
163 -   A new AV12 video format was added which is basically NV12 with an
164     alpha plane, which is more convenient for many hardware-accelerated
165     decoders.
166
167 -   Watch Nicolas Dufresne’s LCA 2022 talk “Bringing WebM Alpha support
168     to GStreamer” for all the details and a demo.
169
170 RTP Header Extensions Base Class and Automatic Header Extension Handling in RTP Payloaders and Depayloaders
171
172 -   RTP Header Extensions are specified in RFC 5285 and provide a way to
173     add small pieces of data to RTP packets in between the RTP header
174     and the RTP payload. This is often used for per-frame metadata,
175     extended timestamps or other application-specific extra data. There
176     are several commonly-used extensions specified in various RFCs, but
177     senders are free to put any kind of data in there, as long as sender
178     and receiver both know what that data is. Receivers that don’t know
179     about the header extensions will just skip the extra data without
180     ever looking at it. These header extensions can often be combined
181     with any kind of payload format, so may need to be supported by many
182     RTP payloader and depayloader elements.
183
184 -   Inserting and extracting RTP header extension data has so far been a
185     bit inconvenient in GStreamer: There are functions to add and
186     retrieve RTP header extension data from RTP packets, but nothing
187     works automatically, even for common extensions. People would have
188     to do the insertion/extraction either in custom elements
189     before/after the RTP payloader/depayloader, or inside pad probes,
190     which isn’t very nice.
191
192 -   This release adds various pieces of new infrastructure for generic
193     RTP header extension handling, as well as some implementations for
194     common extensions:
195
196     -   GstRTPHeaderExtension is a new helper base class for reading and
197         writing RTP header extensions. Nominally this subclasses
198         GstElement, but only so these extensions are stored in the
199         registry where they can be looked up by URI or name. They don’t
200         have pads and don’t get added to the pipeline graph as an
201         element.
202
203     -   "add-extension" and "clear-extension" action signals on RTP
204         payloaders and depayloaders for manual extension management
205
206     -   The "request-extension" signal will be emitted if an extension
207         is encountered that requires explicit mapping by the application
208
209     -   new "auto-header-extension" property on RTP payloaders and
210         depayloaders for automatic handling of known header extensions.
211         This is enabled by default. The extensions must be signalled via
212         caps / SDP.
213
214     -   RTP header extension implementations:
215
216         -   rtphdrextclientaudiolevel: Client-to-Mixer Audio Level
217             Indication (RFC 6464) (also see below)
218         -   rtphdrextcolorspace: Color Space extension, extends RTP
219             packets with color space and high dynamic range (HDR)
220             information
221         -   rtphdrexttwcc: Transport Wide Congestion Control support
222
223 -   gst_rtp_buffer_remove_extension_data() is a new helper function to
224     remove an RTP header extension from an RTP buffer
225
226 -   The existing gst_rtp_buffer_set_extension_data() now also supports
227     shrinking the extension data in size
228
229 AppSink and AppSrc improvements
230
231 -   appsink: new API to pull events out of appsink in addition to
232     buffers and buffer lists.
233
234     There was previously no way for users to receive incoming events
235     from appsink properly serialised with the data flow, even if they
236     are serialised events. The reason for that is that the only way to
237     intercept events was via a pad probe on the appsink sink pad, but
238     there is also internal queuing inside of appsink, so it’s difficult
239     to ascertain the right order of everything in all cases.
240
241     There is now a new "new-serialized-event" signal which will be
242     emitted when there’s a new event pending (just like the existing
243     "new-sample" signal). The "emit-signals" property must be set to
244     TRUE in order to activate this (but it’s also fine to just pull from
245     the application thread without using the signals).
246
247     gst_app_sink_pull_object() and gst_app_sink_try_pull_object() can be
248     used to pull out either an event or a new sample carrying a buffer
249     or buffer list, whatever is next in the queue.
250
251     EOS events will be filtered and will not be returned. EOS handling
252     can be done the usual way, same as with _pull_sample().
253
254 -   appsrc: allow configuration of internal queue limits in time and
255     buffers and add leaky mode.
256
257     There is internal queuing inside appsrc so the application thread
258     can push data into the element which will then be picked up by the
259     source element’s streaming thread and pushed into the pipeline from
260     that streaming thread. This queue is unlimited by default and until
261     now it was only possible to set a maximum size limit in bytes. When
262     that byte limit is reached, the pushing thread (application thread)
263     would be blocked until more space becomes available.
264
265     A limit in bytes is not particularly useful for many use cases, so
266     now it is possible to also configure limits in time and buffers
267     using the new "max-time" and "max-buffers" properties. Of course
268     there are also matching new read-only"current-level-buffers" and
269     "current-level-time properties" properties to query the current fill
270     level of the internal queue in time and buffers.
271
272     And as if that wasn’t enough the internal queue can also be
273     configured as leaky using the new "leaky-type" property. That way
274     when the queue is full the application thread won’t be blocked when
275     it tries to push in more data, but instead either the new buffer
276     will be dropped or the oldest data in the queue will be dropped.
277
278 Better string serialization of nested GstCaps and GstStructures
279
280 -   New string serialisation format for structs and caps that can handle
281     nested structs and caps properly by using brackets to delimit nested
282     items (e.g. some-struct, some-field=[nested-struct, nested=true]).
283     Unlike the default format the new variant can also support more than
284     one level of nesting. For backwards-compatibility reasons the old
285     format is still output by default when serialising caps and structs
286     using the existing API. The new functions gst_caps_serialize() and
287     gst_structure_serialize() can be used to output strings in the new
288     format.
289
290 Convenience API for custom GstMetas
291
292 -   New convenience API to register and create custom GstMetas:
293     gst_meta_register_custom() and gst_buffer_add_custom_meta(). Such
294     custom meta is backed by a GstStructure and does not require that
295     users of the API expose their GstMeta implementation as public API
296     for other components to make use of it. In addition, it provides a
297     simpler interface by ignoring the impl vs. api distinction that the
298     regular API exposes. This new API is meant to be the meta
299     counterpart to custom events and messages, and to be more convenient
300     than the lower-level API when the absolute best performance isn’t a
301     requirement. The reason it’s less performant than a “proper” meta is
302     that a proper meta is just a C struct in the end whereas this goes
303     through the GstStructure API which has a bit more overhead, which
304     for most scenarios is negligible however. This new API is useful for
305     experimentation or proprietary metas, but also has some limitations:
306     it can only be used if there’s a single producer of these metas;
307     registering the same custom meta multiple times or from multiple
308     places is not allowed.
309
310 Additional Element Properties on Encoding Profiles
311
312 -   GstEncodingProfile: The new "element-properties" and
313     gst_encoding_profile_set_element_properties() API allows
314     applications to set additional element properties on encoding
315     profiles to configure muxers and encoders. So far the encoding
316     profile template was the only place where this could be specified,
317     but often what applications want to do is take a ready-made encoding
318     profile shipped by GStreamer or the application and then tweak the
319     settings on top of that, which is now possible with this API. Since
320     applications can’t always know in advance what encoder element will
321     be used in the end, it’s even possible to specify properties on a
322     per-element basis.
323
324     Encoding Profiles are used in the encodebin, transcodebin and
325     camerabin elements and APIs to configure output formats (containers
326     and elementary streams).
327
328 Audio Level Indication Meta for RFC 6464
329
330 -   New GstAudioLevelMeta containing Audio Level Indication as per RFC
331     6464
332
333 -   The level element has been updated to add GstAudioLevelMeta on
334     buffers if the "audio-level-meta" property is set to TRUE. This can
335     then in turn be picked up by RTP payloaders to signal the audio
336     level to receivers through RTP header extensions (see above).
337
338 -   New Client-to-Mixer Audio Level Indication (RFC6464) RTP Header
339     Extension which should be automatically created and used by RTP
340     payloaders and depayloaders if their "auto-header-extension"
341     property is enabled and if the extension is part of the RTP caps.
342
343 Automatic packet loss, data corruption and keyframe request handling for video decoders
344
345 -   The GstVideoDecoder base class has gained various new APIs to
346     automatically handle packet loss and data corruption better by
347     default, especially in RTP, RTSP and WebRTC streaming scenarios, and
348     to give subclasses more control about how they want to handle
349     missing data:
350
351     -   Video decoder subclasses can mark output frames as corrupted via
352         the new GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED flag
353
354     -   A new "discard-corrupted-frames" property allows applications to
355         configure decoders so that corrupted frames are directly
356         discarded instead of being forwarded inside the pipeline. This
357         is a replacement for the "output-corrupt" property of the FFmpeg
358         decoders.
359
360     -   RTP depayloaders can now signal to decoders that data is missing
361         when sending GAP events for lost packets. GAP events can be sent
362         for various reason in a GStreamer pipeline. Often they are just
363         used to let downstream elements know that there isn’t a buffer
364         available at the moment, so downstream elements can move on
365         instead of waiting for one. They are also sent by RTP
366         depayloaders in the case that packets are missing, however, and
367         so far a decoder was not able to differentiate the two cases.
368         This has been remedied now: GAP events can be decorated with
369         gst_event_set_gap_flags() and GST_GAP_FLAG_MISSING_DATA to let
370         decoders now what happened, and decoders can then use that in
371         some cases to handle missing data better.
372
373     -   The GstVideoDecoder::handle_missing_data vfunc was added to
374         inform subclasses about packet loss or missing data and let them
375         handle it in their own way if they like.
376
377     -   gst_video_decoder_set_needs_sync_point() lets subclasses signal
378         that they need the stream to start with a sync point. If
379         enabled, the base class will discard all non-sync point frames
380         in the beginning and after a flush and does not pass them to the
381         subclass. Furthermore, if the first frame is not a sync point,
382         the base class will try and request a sync frame from upstream
383         by sending a force-key-unit event (see next items).
384
385     -   New "automatic-request-sync-points" and
386         "automatic-request-sync-point-flags" properties to automatically
387         request sync points when needed, e.g. on packet loss or if the
388         first frame is not a keyframe. Applications may want to enable
389         this on decoders operating in e.g. RTP/WebRTC/RTSP receiver
390         pipelines.
391
392     -   The new "min-force-key-unit-interval" property can be used to
393         ensure there’s a minimal interval between keyframe requests to
394         upstream (and/or the sender) and we’re not flooding the sender
395         with key unit requests.
396
397     -   gst_video_decoder_request_sync_point() allows subclasses to
398         request a new sync point (e.g. if they choose to do their own
399         missing data handling). This will still honour the
400         "min-force-key-unit-interval" property if set.
401
402 Improved support for custom minimal GStreamer builds
403
404 -   Element registration and registration of other plugin features
405     inside plugin init functions has been improved in order to
406     facilitate minimal custom GStreamer builds.
407
408 -   A number of new macros have been added to declare and create
409     per-element and per-plugin feature register functions in all
410     plugins, and then call those from the per-plugin plugin_init
411     functions:
412
413     -   GST_ELEMENT_REGISTER_DEFINE,
414         GST_DEVICE_PROVIDER_REGISTER_DEFINE,
415         GST_DYNAMIC_TYPE_REGISTER_DEFINE, GST_TYPE_FIND_REGISTER_DEFINE
416         for the actual registration call with GStreamer
417     -   GST_ELEMENT_REGISTER, GST_DEVICE_PROVIDER_REGISTER,
418         GST_DYNAMIC_TYPE_REGISTER, GST_PLUGIN_STATIC_REGISTER,
419         GST_TYPE_FIND_REGISTER to call the registration function defined
420         by the REGISTER_DEFINE macro
421     -   GST_ELEMENT_REGISTER_DECLARE,
422         GST_DEVICE_PROVIDER_REGISTER_DECLARE,
423         GST_DYNAMIC_TYPE_REGISTER_DECLARE,
424         GST_TYPE_FIND_REGISTER_DECLARE to declare the registration
425         function defined by the REGISTER_DEFINE macro
426     -   and various variants for advanced use cases.
427
428 -   This means that applications can call the per-element and per-plugin
429     feature registration functions for only the elements they need
430     instead of registering plugins as a whole with all kinds of elements
431     that may not be required (e.g. encoder and decoder instead of just
432     decoder). In case of static linking all unused functions and their
433     dependencies would be removed in this case by the linker, which
434     helps minimise binary size for custom builds.
435
436 -   gst_init() will automatically call a gst_init_static_plugins()
437     function if one exists.
438
439 -   See the GStreamer static build documentation and Stéphane’s blog
440     post Generate a minimal GStreamer build, tailored to your needs for
441     more details.
442
443 New elements
444
445 -   New aesdec and aesenc elements for AES encryption and decryption in
446     a custom format.
447
448 -   New encodebin2 element with dynamic/sometimes source pads in order
449     to support the option of doing the muxing outside of encodebin,
450     e.g. in combination with a splitmuxsink.
451
452 -   New fakeaudiosink and videocodectestsink elements for testing and
453     debugging (see below for more details)
454
455 -   rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC
456     audio codec
457
458 -   rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE
459     2022-1 2-D Forward Error Correction. More details in Mathieu’s blog
460     post.
461
462 -   isac: new plugin wrapping the Internet Speech Audio Codec reference
463     encoder and decoder from the WebRTC project.
464
465 -   asio: plugin for Steinberg ASIO (Audio Streaming Input/Output) API
466
467 -   gssrc, gssink: add source and sink for Google Cloud Storage
468
469 -   onnx: new plugin to apply ONNX neural network models to video
470
471 -   openaptx: aptX and aptX-HD codecs using libopenaptx (v0.2.0)
472
473 -   qroverlay, debugqroverlay: new elements that allow overlaying data
474     on top of video in the form of a QR code
475
476 -   cvtracker: new OpenCV-based tracker element
477
478 -   av1parse, vp9parse: new parsers for AV1 and VP9 video
479
480 -   va: work on the new VA-API plugin implementation for
481     hardware-accelerated video decoding and encoding has continued at
482     pace, with various new decoders and filters having joined the
483     initial vah264dec:
484
485     -   vah265dec: VA-API H.265 decoder
486     -   vavp8dec: VA-API VP8 decoder
487     -   vavp9dec: VA-API VP9 decoder
488     -   vaav1dec: VA-API AV1 decoder
489     -   vampeg2dec: VA-API MPEG-2 decoder
490     -   vadeinterlace: : VA-API deinterlace filter
491     -   vapostproc: : VA-API postproc filter (color conversion,
492         resizing, cropping, color balance, video rotation, skin tone
493         enhancement, denoise, sharpen)
494
495     See Víctor’s blog post “GstVA in GStreamer 1.20” for more details
496     and what’s coming up next.
497
498 -   vaapiav1dec: new AV1 decoder element (in gstreamer-vaapi)
499
500 -   msdkav1dec: hardware-accelerated AV1 decoder using the Intel Media
501     SDK / oneVPL
502
503 -   nvcodec plugin for NVIDIA NVCODEC API for hardware-accelerated video
504     encoding and decoding:
505
506     -   cudaconvert, cudascale: new CUDA based video color space convert
507         and rescale elements
508     -   cudaupload, cudadownload: new helper elements for memory
509         transfer between CUDA and system memory spaces
510     -   nvvp8sldec, nvvp9sldec: new GstCodecs-based VP8/VP9 decoders
511
512 -   Various new hardware-accelerated elements for Windows:
513
514     -   d3d11screencapturesrc: new desktop capture element, including a
515         GstDeviceProvider implementation to enumerate/select target
516         monitors for capture.
517     -   d3d11av1dec and d3d11mpeg2dec: AV1 and MPEG-2 decoders
518     -   d3d11deinterlace: deinterlacing filter
519     -   d3d11compositor: video composing element
520     -   see Windows section below for more details
521
522 -   new Rust plugins:
523
524     -   audiornnoise: Removes noise from an audio stream
525     -   awstranscribeparse: Parses AWS audio transcripts into timed text
526         buffers
527     -   ccdetect: Detects if valid closed captions are present in a
528         closed captions stream
529     -   cea608tojson: Converts CEA-608 Closed Captions to a JSON
530         representation
531     -   cmafmux: CMAF fragmented mp4 muxer
532     -   dashmp4mux: DASH fragmented mp4 muxer
533     -   isofmp4mux: ISO fragmented mp4 muxer
534     -   ebur128level: EBU R128 Loudness Level Measurement
535     -   ffv1dec: FFV1 video decoder
536     -   gtk4paintablesink: GTK4 video sink, which provides a
537         GdkPaintable that can be rendered in various widgets
538     -   hlssink3: HTTP Live Streaming sink
539     -   hrtfrender: Head-Related Transfer Function (HRTF) renderer
540     -   hsvdetector: HSV colorspace detector
541     -   hsvfilter: HSV colorspace filter
542     -   jsongstenc: Wraps buffers containing any valid top-level JSON
543         structures into higher level JSON objects, and outputs those as
544         ndjson
545     -   jsongstparse: Parses ndjson as output by jsongstenc
546     -   jsontovtt: converts JSON to WebVTT subtitles
547     -   regex: Applies regular expression operations on text
548     -   roundedcorners: Adds rounded corners to video
549     -   spotifyaudiosrc: Spotify source
550     -   textahead: Display upcoming text buffers ahead (e.g. for
551         Karaoke)
552     -   transcriberbin: passthrough bin that transcribes raw audio to
553         closed captions using awstranscriber and puts the captions as
554         metas onto the video
555     -   tttojson: Converts timed text to a JSON representation
556     -   uriplaylistbin: Playlist source bin
557     -   webpdec-rs: WebP image decoder with animation support
558
559 -   New plugin codecalpha with elements to assist with WebM Alpha
560     decoding
561
562     -   codecalphademux: Split stream with GstVideoCodecAlphaMeta into
563         two streams
564     -   alphacombine: Combine two raw video stream (I420 or NV12) as one
565         stream with alpha channel (A420 or AV12)
566     -   vp8alphadecodebin: A bin to handle software decoding of VP8 with
567         alpha
568     -   vp9alphadecodebin: A bin to handle software decoding of VP9 with
569         alpha
570
571 -   New hardware accelerated elements for Linux:
572
573     -   v4l2slmpeg2dec: Support for Linux Stateless MPEG-2 decoders
574     -   v4l2slvp9dec: Support for Linux Stateless VP9 decoders
575     -   v4l2slvp8alphadecodebin: Support HW accelerated VP8 with alpha
576         layer decoding
577     -   v4l2slvp9alphadecodebin: Support HW accelerated VP9 with alpha
578         layer decoding
579
580 New element features and additions
581
582 -   assrender: handle more font mime types; better interaction with
583     matroskademux for embedded fonts
584
585 -   audiobuffersplit: Add support for specifying output buffer size in
586     bytes (not just duration)
587
588 -   audiolatency: new "samplesperbuffer" property so users can configure
589     the number of samples per buffer. The default value is 240 samples
590     which is equivalent to 5ms latency with a sample rate of 48000,
591     which might be larger than actual buffer size of audio capture
592     device.
593
594 -   audiomixer, audiointerleave, GstAudioAggregator: now keep a count of
595     samples that are dropped or processed as statistic and can be made
596     to post QoS messages on the bus whenever samples are dropped by
597     setting the "qos-messages" property on input pads.
598
599 -   audiomixer, compositor: improved handling of new inputs added at
600     runtime. New API was added to the GstAggregator base class to allow
601     subclasses to opt into an aggregation mode where inactive pads are
602     ignored when processing input buffers
603     (gst_aggregator_set_ignore_inactive_pads(),
604     gst_aggregator_pad_is_inactive()). An “inactive pad” in this context
605     is a pad which, in live mode, hasn’t yet received a first buffer,
606     but has been waited on at least once. What would happen usually in
607     this case is that the aggregator would wait for data on this pad
608     every time, up to the maximum configured latency. This would
609     inadvertently push mixer elements in live mode to the configured
610     latency envelope and delay processing when new inputs are added at
611     runtime until these inputs have actually produced data. This is
612     usually undesirable. With this new API, new inputs can be added
613     (requested) and configured and they won’t delay the data processing.
614     Applications can opt into this new behaviour by setting the
615     "ignore-inactive-pads" property on compositor, audiomixer or other
616     GstAudioAggregator-based elements.
617
618 -   cccombiner: implement “scheduling” of captions. So far cccombiner’s
619     behaviour was essentially that of a funnel: it strictly looked at
620     input timestamps to associate together video and caption buffers.
621     Now it will try to smoothly schedule caption buffers in order to
622     have exactly one per output video buffer. This might involve
623     rewriting input captions, for example when the input is CDP then
624     sequence counters are rewritten, time codes are dropped and
625     potentially re-injected if the input video frame had a time code
626     meta. This can also lead to the input drifting from synchronisation,
627     when there isn’t enough padding in the input stream to catch up. In
628     that case the element will start dropping old caption buffers once
629     the number of buffers in its internal queue reaches a certain limit
630     (configurable via the "max-scheduled" property). The new original
631     funnel-like behaviour can be restored by setting the "scheduling"
632     property to FALSE.
633
634 -   ccconverter: new "cdp-mode" property to specify which sections to
635     include in CDP packets (timecode, CC data, service info). Various
636     software, including FFmpeg’s Decklink support, fails parsing CDP
637     packets that contain anything but CC data in the CDP packets.
638
639 -   clocksync: new "sync-to-first" property for automatic timestamp
640     offset setup: if set clocksync will set up the "ts-offset" value
641     based on the first buffer and the pipeline’s running time when the
642     first buffer arrived. The newly configured "ts-offset" in this case
643     would be the value that allows outputting the first buffer without
644     waiting on the clock. This is useful for example to feed a non-live
645     input into an already-running pipeline.
646
647 -   compositor:
648
649     -   multi-threaded input conversion and compositing. Set the
650         "max-threads" property to activate this.
651     -   new "sizing-policy" property to support display aspect ratio
652         (DAR)-aware scaling. By default the image is scaled to fill the
653         configured destination rectangle without padding and without
654         keeping the aspect ratio. With sizing-policy=keep-aspect-ratio
655         the input image is scaled to fit the destination rectangle
656         specified by GstCompositorPad:{xpos, ypos, width, height}
657         properties preserving the aspect ratio. As a result, the image
658         will be centered in the destination rectangle with padding if
659         necessary.
660     -   new "zero-size-is-unscaled" property on input pads. By default
661         pad width=0 or pad height=0 mean that the stream should not be
662         scaled in that dimension. But if the "zero-size-is-unscaled"
663         property is set to FALSE a width or height of 0 is instead
664         interpreted to mean that the input image on that pad should not
665         be composited, which is useful when creating animations where an
666         input image is made smaller and smaller until it disappears.
667     -   improved handling of new inputs at runtime via
668         "ignore-inactive-pads"property (see above for details)
669     -   allow output format with alpha even if none of the inputs have
670         alpha (also glvideomixer and other GstVideoAggregator
671         subclasses)
672
673 -   dashsink: add H.265 codec support and signals for allowing custom
674     playlist/fragment output
675
676 -   decodebin3:
677
678     -   improved decoder selection, especially for hardware decoders
679     -   make input activation “atomic” when adding inputs dynamically
680     -   better interleave handling: take into account decoder latency
681         for interleave size
682
683 -   decklink:
684
685     -   Updated DeckLink SDK to 11.2 to support DeckLink 8K Pro
686     -   decklinkvideosrc:
687         -   More accurate and stable capture timestamps: use the
688             hardware reference clock time when the frame was finished
689             being captured instead of a clock time much further down the
690             road.
691         -   Automatically detect widescreen vs. normal NTSC/PAL
692
693 -   encodebin:
694
695     -   add “smart encoding” support for H.265, VP8 and VP9 (i.e. only
696         re-encode where needed and otherwise pass through encoded video
697         as-is).
698     -   H.264/H.265 smart encoding improvements: respect user-specified
699         stream-format, but if not specified default to avc3/hvc1 with
700         in-band SPS/PPS/VPS signalling for more flexibility.
701     -   new encodebin2 element with dynamic/sometimes source pads in
702         order to support the option of doing the muxing outside of
703         encodebin, e.g. in combination with splitmuxsink.
704     -   add APIs to set element properties on encoding profiles (see
705         below)
706
707 -   errorignore: new "ignore-eos" property to also ignore FLOW_EOS from
708     downstream elements
709
710 -   giosrc: add support for growing source files: applications can
711     specify that the underlying file being read is growing by setting
712     the "is-growing" property. If set, the source won’t EOS when it
713     reaches the end of the file, but will instead start monitoring it
714     and will start reading data again whenever a change is detected. The
715     new "waiting-data" and "done-waiting-data" signals keep the
716     application informed about the current state.
717
718 -   gtksink, gtkglsink:
719
720     -   scroll event support: forwarded as navigation events into the
721         pipeline
722     -   "video-aspect-ratio-override" property to force a specific
723         aspect ratio
724     -   "rotate-method" property and support automatic rotation based on
725         image tags
726
727 -   identity: new "stats" property allows applications to retrieve the
728     number of bytes and buffers that have passed through so far.
729
730 -   interlace: add support for more formats, esp 10-bit, 12-bit and
731     16-bit ones
732
733 -   jack: new "low-latency" property for automatic latency-optimized
734     setting and "port-names" property to select ports explicitly
735
736 -   jpegdec: support output conversion to RGB using libjpeg-turbo (for
737     certain input files)
738
739 -   line21dec:
740
741     -   "mode" property to control whether and how detected closed
742         captions should be inserted in the list of existing close
743         caption metas on the input frame (if any): add, drop, or
744         replace.
745     -   "ntsc-only" property to only look for captions if video has NTSC
746         resolution
747
748 -   line21enc: new "remove-caption-meta" to remove metas from output
749     buffers after encoding the captions into the video data; support for
750     CDP closed captions
751
752 -   matroskademux, matroskamux: Add support for ffv1, a lossless
753     intra-frame video coding format.
754
755 -   matroskamux: accept in-band SPS/PPS/VPS for H.264 and H.265
756     (i.e. stream-format avc3 and hev1) which allows on-the-fly
757     profile/level/resolution changes.
758
759 -   matroskamux: new "cluster-timestamp-offset" property, useful for use
760     cases where the container timestamps should map to some absolute
761     wall clock time, for example.
762
763 -   rtpsrc: add "caps" property to allow explicit setting of the caps
764     where needed
765
766 -   mpegts: support SCTE-35 pass-through via new "send-scte35-events"
767     property on MPEG-TS demuxer tsdemux. When enabled, SCTE 35 sections
768     (e.g. ad placement opportunities) are forwarded as events downstream
769     where they can be picked up again by mpegtsmux. This required a
770     semantic change in the SCTE-35 section API: timestamps are now in
771     running time instead of muxer pts.
772
773 -   tsdemux: Handle PCR-less MPEG-TS streams; more robust timestamp
774     handling in certain corner cases and for poorly muxed streams.
775
776 -   mpegtsmux:
777
778     -   More conformance improvements to make MPEG-TS analysers happy:
779         -   PCR timing accuracy: Improvements to the way mpegtsmux
780             outputs PCR observations in CBR mode, so that a PCR
781             observation is always inserted when needed, so that we never
782             miss the configured pcr-interval, as that triggers various
783             MPEG-TS analyser errors.
784         -   Improved PCR/SI scheduling
785     -   Don’t write PCR until PAT/PMT are output to make sure streams
786         start cleanly with a PAT/PMT.
787     -   Allow overriding the automatic PMT PID selection via
788         application-supplied PMT_%d fields in the prog-map
789         structure/property.
790
791 -   mp4mux:
792
793     -   new "first-moov-then-finalise" mode for fragmented output where
794         the output will start with a self-contained moov atom for the
795         first fragment, and then produce regular fragments. Then at the
796         end when the file is finalised, the initial moov is invalidated
797         and a new moov is written covering the entire file. This way the
798         file is a “fragmented mp4” file while it is still being written
799         out, and remains playable at all times, but at the end it is
800         turned into a regular mp4 file (with former fragment headers
801         remaining as unused junk data in the file).
802     -   support H.264 avc3 and H.265 hvc1 stream formats as input where
803         the codec data is signalled in-band inside the bitstream instead
804         of caps/file headers.
805     -   support profile/level/resolution changes for H.264/H.265 input
806         streams (i.e. codec data changing on the fly). Each codec_data
807         is put into its own SampleTableEntry inside the stsd, unless the
808         input is in avc3 stream format in which case it’s written
809         in-band and not in the headers.
810
811 -   multifilesink: new ""min-keyframe-distance"" property to make
812     minimum distance between keyframes in next-file=key-frame mode
813     configurable instead of hard-coding it to 10 seconds.
814
815 -   mxfdemux has seen a big refactoring to support non-frame wrappings
816     and more accurate timestamp/seek handling for some formats
817
818 -   msdk plugin for hardware-accelerated video encoding and decoding
819     using the Intel Media SDK:
820
821     -   oneVPL support (Intel oneAPI Video Processing Library)
822     -   AV1 decoding support
823     -   H.264 decoder now supports constrained-high and progressive-high
824         profiles
825     -   H.264 encoder:
826         -   more configuration options (properties):
827             "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid",
828             "dblk-idc"
829     -   H.265 encoder:
830         -   can output main-still-picture profile
831         -   now inserts HDR SEIs (mastering display colour volume and
832             content light level)
833         -   more configuration options (properties):
834             "intra-refresh-type", "min-qp" , "max-qp", "p-pyramid",
835             "b-pyramid", "dblk-idc", "transform-skip"
836         -   support for RGB 10bit format
837     -   External bitrate control in encoders
838     -   Video post proc element msdkvpp gained support for 12-bit pixel
839         formats P012_LE, Y212_LE and Y412_LE
840
841 -   nvh264sldec: interlaced stream support
842
843 -   openh264enc: support main, high, constrained-high and
844     progressive-high profiles
845
846 -   openjpeg: support for multithreaded decoding and encoding
847
848 -   rtspsrc: now supports IPv6 also for tunneled mode (RTSP-over-HTTP);
849     new "ignore-x-server-reply" property to ignore the
850     x-server-ip-address server header reply in case of HTTP tunneling,
851     as it is often broken.
852
853 -   souphttpsrc: Runtime compatibility support for libsoup2 and
854     libsoup3. libsoup3 is the latest major version of libsoup, but
855     libsoup2 and libsoup3 can’t co-exist in the same process because
856     there is no namespacing or versioning for GObject types. As a
857     result, it would be awkward if the GStreamer souphttpsrc plugin
858     linked to a specific version of libsoup, because it would only work
859     with applications that use the same version of libsoup. To make this
860     work, the soup plugin now tries to determine the libsoup version
861     used by the application (and its other dependencies) at runtime on
862     systems where GStreamer is linked dynamically. libsoup3 support is
863     still considered somewhat experimental at this point. Distro
864     packagers please take note of the souphttpsrc plugin dependency
865     changes mentioned in the build and dependencies section below.
866
867 -   srtsrc, srtsink: add signals for the application to accept/reject
868     incoming connections
869
870 -   timeoverlay: new elapsed-running-time time mode which shows the
871     running time since the first running time (and each flush-stop).
872
873 -   udpsrc: new timestamping mode to retrieve packet receive timestamps
874     from the kernel via socket control messages (SO_TIMESTAMPNS) on
875     supported platforms
876
877 -   uritranscodebin: new setup-source and element-setup signals for
878     applications to configure elements used
879
880 -   v4l2codecs plugin gained support for 4x4 and 32x32 tile formats
881     enabling some platforms or direct renders. Important memory usage
882     improvement.
883
884 -   v4l2slh264dec now implements the final Linux uAPI as shipped on
885     Linux 5.11 and later.
886
887 -   valve: add "drop-mode" property and provide two new modes of
888     operation: in drop-mode=forward-sticky-events sticky events
889     (stream-start, segment, tags, caps, etc.) are forwarded downstream
890     even when dropping is enabled; drop-mode=transform-to-gap will in
891     addition also convert buffers into gap events when dropping is
892     enabled, which lets downstream elements know that time is advancing
893     and might allow for preroll in many scenarios. By default all events
894     and all buffers are dropped when dropping is enabled, which can
895     cause problems with caps negotiation not progressing or branches not
896     prerolling when dropping is enabled.
897
898 -   videocrop: support for many more pixel formats, e.g. planar YUV
899     formats with > 8bits and GBR* video formats; can now also accept
900     video not backed by system memory as long as downstream supports the
901     GstCropMeta
902
903 -   videotestsrc: new smpte-rp-219 pattern for SMPTE75 RP-219 conformant
904     color bars
905
906 -   vp8enc: finish support for temporal scalability: two new properties
907     ("temporal-scalability-layer-flags",
908     "temporal-scalability-layer-sync-flags") and a unit change on the
909     "temporal-scalability-target-bitrate" property (now expects bps);
910     also make temporal scalability details available to RTP payloaders
911     as buffer metadata.
912
913 -   vp9enc: new properties to tweak encoder performance:
914
915     -   "aq-mode" to configure adaptive quantization modes
916     -   "frame-parallel-decoding" to configure whether to create a
917         bitstream that reduces decoding dependencies between frames
918         which allows staged parallel processing of more than one video
919         frames in the decoder. (Defaults to TRUE)
920     -   "row-mt", "tile-columns" and "tile-rows" so multithreading can
921         be enabled on a per-tile basis, instead of on a per tile-column
922         basis. In combination with the new "tile-rows" property, this
923         allows the encoder to make much better use of the available CPU
924         power.
925
926 -   vp9dec, vp9enc: add support for 10-bit 4:2:0 and 4:2:2 YUV, as well
927     as 8-bit 4:4:4
928
929 -   vp8enc, vp9enc now default to “good quality” for the deadline
930     property rather then “best quality”. Having the deadline set to best
931     quality causes the encoder to be absurdly slow, most real-life users
932     will prefer good-enough quality with better performance instead.
933
934 -   wpesrc:
935
936     -   implement audio support: a new sometimes source pad will be
937         created for each audio stream created by the web engine.
938     -   move wpesrc to wpevideosrc and add a wrapper bin wpesrc to also
939         support audio
940     -   also handles web:// URIs now (same as cefsrc)
941     -   post messages with the estimated load progress on the bus
942
943 -   x265enc: add negative DTS support, which means timestamps are now
944     offset by 1h same as with x264enc
945
946 RTP Payloaders and Depayloaders
947
948 -   rtpisacpay, rtpisacdepay: new RTP payloader and depayloader for iSAC
949     audio codec
950
951 -   rtph264depay:
952
953     -   new "request-keyframe" property to make the depayloader
954         automatically request a new keyframe from the sender on packet
955         loss, consistent with the new property on rtpvp8depay.
956     -   new "wait-for-keyframe" property to make depayloader wait for a
957         new keyframe at the beginning and after packet loss (only
958         effective if the depayloader outputs AUs), consistent with the
959         existing property on rtpvp8depay.
960
961 -   rtpopuspay, rtpopusdepay: support libwebrtc-compatible multichannel
962     audio in addition to the previously supported multichannel audio
963     modes
964
965 -   rtpopuspay: add DTX (Discontinuous Transmission) support
966
967 -   rtpvp8depay: new "request-keyframe" property to make the depayloader
968     automatically request a new keyframe from the sender on packet loss.
969
970 -   rtpvp8pay: temporal scaling support
971
972 -   rtpvp9depay: Improved SVC handling (aggregate all layers)
973
974 RTP Infrastructure
975
976 -   rtpst2022-1-fecdec, rtpst2022-1-fecenc: new elements providing SMPTE
977     2022-1 2-D Forward Error Correction. More details in Mathieu’s blog
978     post.
979
980 -   rtpreddec: BUNDLE support
981
982 -   rtpredenc, rtpulpfecenc: add support for Transport-wide Congestion
983     Control (TWCC)
984
985 -   rtpsession: new "twcc-feedback-interval" property to allow RTCP TWCC
986     reports to be scheduled on a timer instead of per marker-bit.
987
988 Plugin and library moves
989
990 -   There were no plugin moves or library moves in this cycle.
991
992 Plugin removals
993
994 The following elements or plugins have been removed:
995
996 -   The ofa audio fingerprinting plugin has been removed. The MusicIP
997     database has been defunct for years so this plugin is likely neither
998     useful nor used by anyone.
999
1000 -   The mms plugin containing mmssrc has been removed. It seems unlikely
1001     anyone still needs this or that there are even any streams left out
1002     there. The MMS protocol was deprecated in 2003 (in favour of RTSP)
1003     and support for it was dropped with Microsoft Media Services 2008,
1004     and Windows Media Player apparently also does not support it any
1005     more.
1006
1007 Miscellaneous API additions
1008
1009 Core
1010
1011 -   gst_buffer_new_memdup() is a convenience function for the
1012     widely-used gst_buffer_new_wrapped(g_memdup(data,size),size)
1013     pattern.
1014
1015 -   gst_caps_features_new_single() creates a new single GstCapsFeatures,
1016     avoiding the need to use the vararg function with NULL terminator
1017     for simple cases.
1018
1019 -   gst_element_type_set_skip_documentation() can be used by plugins to
1020     signal that certain elements should not be included in the GStreamer
1021     plugin documentation. This is useful for plugins where elements are
1022     registered dynamically based on hardware capabilities and/or where
1023     the available plugins and properties vary from system to system.
1024     This is used in the d3d11 plugin for example to ensure that only the
1025     list of default elements is advertised in the documentation.
1026
1027 -   gst_type_find_suggest_empty_simple() is a new convenience function
1028     for typefinders for cases where there’s only a media type and no
1029     other fields.
1030
1031 -   New API to create elements and set properties at construction time,
1032     which is not only convenient, but also allows GStreamer elements to
1033     have construct-only properties: gst_element_factory_make_full(),
1034     gst_element_factory_make_valist(),
1035     gst_element_factory_make_with_properties(),
1036     gst_element_factory_create_full(),
1037     gst_element_factory_create_valist(),
1038     gst_element_factory_create_with_properties().
1039
1040 -   GstSharedTaskPool: new “shared” task pool subclass with slightly
1041     different default behaviour than the existing GstTaskPool which
1042     would create unlimited number of threads for new tasks. The shared
1043     task pool creates up to N threads (default: 1) and then distributes
1044     pending tasks to those threads round-robin style, and blocks if no
1045     thread is available. It is possible to join tasks. This can be used
1046     by plugins to implement simple multi-threaded processing and is used
1047     for the new multi-threaded video conversion and compositing done in
1048     GstVideoAggregator, videoconverter and compositor.
1049
1050 Plugins Base Utils library
1051
1052 -   GstDiscoverer:
1053
1054     -   gst_discoverer_container_info_get_tags() was added to retrieve
1055         global/container tags (vs. per-stream tags). Per-Stream tags can
1056         be retrieved via the existing
1057         gst_discoverer_stream_info_get_tags().
1058         gst_discoverer_info_get_tags(), which for many files returns a
1059         confusing mix of stream and container tags, has been deprecated
1060         in favour of the container/stream-specific functions.
1061     -   gst_discoverer_stream_info_get_stream_number() returns a unique
1062         integer identifier for a given stream within the given
1063         GstDiscoverer context. (If this matches the stream number inside
1064         the container bitstream that’s by coincidence and not by
1065         design.)
1066
1067 -   gst_pb_utils_get_caps_description_flags() can be used to query
1068     whether certain caps represent a container, audio, video, image,
1069     subtitles, tags, or something else. This only works for formats
1070     known to GStreamer.
1071
1072 -   gst_pb_utils_get_file_extension_from_caps() returns a possible file
1073     extension for given caps.
1074
1075 -   gst_codec_utils_h264_get_profile_flags_level(): Parses profile,
1076     flags, and level from H.264 AvcC codec_data. The format of H.264
1077     AVCC extradata/sequence_header is documented in the ITU-T H.264
1078     specification section 7.3.2.1.1 as well as in ISO/IEC 14496-15
1079     section 5.3.3.1.2.
1080
1081 -   gst_codec_utils_caps_get_mime_codec() to convert caps to a RFC 6381
1082     compatible MIME codec string codec. Useful for providing the codecs
1083     field inside the Content-Type HTTP header for container formats,
1084     such as mp4 or Matroska.
1085
1086 GStreamer OpenGL integration library and plugins
1087
1088 -   glcolorconvert: added support for converting the video formats A420,
1089     AV12, BGR, BGRA, RGBP and BGRP.
1090
1091 -   Added support to GstGLBuffer for persistent buffer mappings where a
1092     Pixel Buffer Object (PBO) can be mapped by both the CPU and the GPU.
1093     This removes a memcpy() when uploading textures or vertices
1094     particularly when software decoders (e.g. libav) are direct
1095     rendering into our memory. Improves transfer performance
1096     significantly. Requires OpenGL 4.4, GL_ARB_buffer_storage or
1097     GL_EXT_buffer_storage
1098
1099 -   Added various helper functions for handling 4x4 matrices of affine
1100     transformations as used by GstVideoAffineTransformationMeta.
1101
1102 -   Add support to GstGLContext for allowing the application to control
1103     the config (EGLConfig, GLXConfig, etc) used when creating the OpenGL
1104     context. This allows the ability to choose between RGB16 or RGB10A2
1105     or RGBA8 back/front buffer configurations that were previously
1106     hardcoded. GstGLContext also supports retrieving the configuration
1107     it was created with or from an externally provide OpenGL context
1108     handle. This infrastructure is also used to create a compatible
1109     config from an application/externally provided OpenGL context in
1110     order to improve compatibility with other OpenGL frameworks and GUI
1111     toolkits. A new environment variable GST_GL_CONFIG was also added to
1112     be able to request a specific configuration from the command line.
1113     Note: different platforms will have different functionality
1114     available.
1115
1116 -   Add support for choosing between EGL and WGL at runtime when running
1117     on Windows. Previously this was a build-time switch. Allows use in
1118     e.g. Gtk applications on Windows that target EGL/ANGLE without
1119     recompiling GStreamer. gst_gl_display_new_with_type() can be used by
1120     applications to choose a specific display type to use.
1121
1122 -   Build fixes to explicitly check for Broadcom-specific libraries on
1123     older versions of the Raspberry Pi platform. The Broadcom OpenGL ES
1124     and EGL libraries have different filenames. Using the vc4 Mesa
1125     driver on the Raspberry Pi is not affected.
1126
1127 -   Added support to glupload and gldownload for transferring RGBA
1128     buffers using the memory:NVMM available on the Nvidia Tegra family
1129     of embedded devices.
1130
1131 -   Added support for choosing libOpenGL and libGLX as used in a GLVND
1132     environment on unix-based platforms. This allows using desktop
1133     OpenGL and EGL without pulling in any GLX symbols as would be
1134     required with libGL.
1135
1136 Video library
1137
1138 -   New raw video formats:
1139
1140     -   AV12 (NV12 with alpha plane)
1141     -   RGBP and BGRP (planar RGB formats)
1142     -   ARGB64 variants with specified endianness instead of host
1143         endianness:
1144         -   ARGB64_LE, ARGB64_BE
1145         -   RGBA64_BE, RGBA64_LE
1146         -   BGRA64_BE, BGRA64_LE
1147         -   ABGR64_BE, ABGR64_LE
1148
1149 -   gst_video_orientation_from_tag() is new convenience API to parse the
1150     image orientation from a GstTagList.
1151
1152 -   GstVideoDecoder subframe support (see below)
1153
1154 -   GstVideoCodecState now also carries some HDR metadata
1155
1156 -   Ancillary video data: implement transform functions for AFD/Bar
1157     metas, so they will be forwarded in more cases
1158
1159 MPEG-TS library
1160
1161 This library only handles section parsing and such, see above for
1162 changes to the actual mpegtsmux and mpegtsdemux elements.
1163
1164 -   many additions and improvements to SCTE-35 section parsing
1165 -   new API for fetching extended descriptors:
1166     gst_mpegts_find_descriptor_with_extension()
1167 -   add support for SIT sections (Selection Information Tables)
1168 -   expose event-from-section constructor gst_event_new_mpegts_section()
1169 -   parse Audio Preselection Descriptor needed for Dolby AC-4
1170
1171 GstWebRTC library + webrtcbin
1172
1173 -   Change the way in which sink pads and transceivers are matched
1174     together to support easier usage. If a pad is created without a
1175     specific index (i.e. using sink_%u as the pad template), then an
1176     available compatible transceiver will be searched for. If a specific
1177     index is requested (i.e. sink_1) then if a transceiver for that
1178     m-line already exists, that transceiver must match the new sink pad
1179     request. If there is no transceiver available in either scenario, a
1180     new transceiver is created. If a mixture of both sink_1 and sink_%u
1181     requests result in an impossible situation, an error will be
1182     produced at pad request time or from create offer/answer.
1183
1184 -   webrtcbin now uses regular ICE nomination instead of libnice’s
1185     default of aggressive ICE nomination. Regular ICE nomination is the
1186     default recommended by various relevant standards and improves
1187     connectivity in specific network scenarios.
1188
1189 -   Add support for limiting the port range used for RTP with the
1190     addition of the min-rtp-port and max-rtp-port properties on the ICE
1191     object.
1192
1193 -   Expose the SCTP transport as a property on webrtcbin to more closely
1194     match the WebRTC specification.
1195
1196 -   Added support for taking into account the data channel transport
1197     state when determining the value of the "connection-state" property.
1198     Previous versions of the WebRTC spec did not include the data
1199     channel state when computing this value.
1200
1201 -   Add configuration for choosing the size of the underlying sockets
1202     used for transporting media data
1203
1204 -   Always advertise support for the transport-cc RTCP feedback protocol
1205     as rtpbin supports it. For full support, the configured caps (input
1206     or through codec-preferences) need to include the relevant RTP
1207     header extension.
1208
1209 -   Numerous fixes to caps and media handling to fail-fast when an
1210     incompatible situation is detected.
1211
1212 -   Improved support for attaching the required media after a remote
1213     offer has been set.
1214
1215 -   Add support for dynamically changing the amount of FEC used for a
1216     particular stream.
1217
1218 -   webrtcbin now stops further SDP processing at the first error it
1219     encounters.
1220
1221 -   Completed support for either local or the remote closing a data
1222     channel.
1223
1224 -   Various fixes when performing BUNDLEing of the media streams in
1225     relation to RTX and FEC usage.
1226
1227 -   Add support for writing out QoS DSCP marking on outgoing packets to
1228     improve reliability in some network scenarios.
1229
1230 -   Improvements to the statistics returned by the get-stats signal
1231     including the addition of the raw statistics from the internal
1232     RTPSource, the TWCC stats when available.
1233
1234 -   The webrtc library does not expose any objects anymore with public
1235     fields. Instead properties have been added to replace that
1236     functionality. If you are accessing such fields in your application,
1237     switch to the corresponding properties.
1238
1239 GstCodecs and Video Parsers
1240
1241 -   Support for render delays to improve throughput across all CODECs
1242     (used with NVDEC and V4L2).
1243 -   lots of improvements to parsers and the codec parsing decoder base
1244     classes (H.264, H.265, VP8, VP9, AV1, MPEG-2) used for various
1245     hardware-accelerated decoder APIs.
1246
1247 Bindings support
1248
1249 -   gst_allocation_params_new() allocates a GstAllocationParams struct
1250     on the heap. This should only be used by bindings (and freed via
1251     gst_allocation_params_free() afterwards). In C code you would
1252     allocate this on the stack and only init it in place.
1253
1254 -   gst_debug_log_literal() can be used to log a string to the debug log
1255     without going through any printf format expansion and associated
1256     overhead. This is mostly useful for bindings such as the Rust
1257     bindings which may have done their own formatting already .
1258
1259 -   Provide non-inlined versions of refcounting APIs for various
1260     GStreamer mini objects, so that they can be consumed by bindings
1261     (e.g. gstreamer-sharp): gst_buffer_ref, gst_buffer_unref,
1262     gst_clear_buffer, gst_buffer_copy, gst_buffer_replace,
1263     gst_buffer_list_ref, gst_buffer_list_unref, gst_clear_buffer_list,
1264     gst_buffer_list_copy, gst_buffer_list_replace, gst_buffer_list_take,
1265     gst_caps_ref, gst_caps_unref, gst_clear_caps, gst_caps_replace,
1266     gst_caps_take, gst_context_ref, gst_context_unref, gst_context_copy,
1267     gst_context_replace, gst_event_replace, gst_event_steal,
1268     gst_event_take, gst_event_ref, gst_event_unref, gst_clear_event,
1269     gst_event_copy, gst_memory_ref, gst_memory_unref, gst_message_ref,
1270     gst_message_unref, gst_clear_message, gst_message_copy,
1271     gst_message_replace, gst_message_take, gst_promise_ref,
1272     gst_promise_unref, gst_query_ref, gst_query_unref, gst_clear_query,
1273     gst_query_copy, gst_query_replace, gst_query_take, gst_sample_ref,
1274     gst_sample_unref, gst_sample_copy, gst_tag_list_ref,
1275     gst_tag_list_unref, gst_clear_tag_list, gst_tag_list_replace,
1276     gst_tag_list_take, gst_uri_copy, gst_uri_ref, gst_uri_unref,
1277     gst_clear_uri.
1278
1279 -   expose a GType for GstMiniObject
1280
1281 -   gst_device_provider_probe() now returns non-floating device object
1282
1283 API Deprecations
1284
1285 -   gst_element_get_request_pad() has been deprecated in favour of the
1286     newly-added gst_element_request_pad_simple() which does the exact
1287     same thing but has a less confusing name that hopefully makes clear
1288     that the function request a new pad rather than just retrieves an
1289     already-existing request pad.
1290
1291 -   gst_discoverer_info_get_tags(), which for many files returns a
1292     confusing mix of stream and container tags, has been deprecated in
1293     favour of the container-specific and stream-specific functions,
1294     gst_discoverer_container_info_get_tags() and
1295     gst_discoverer_stream_info_get_tags().
1296
1297 -   gst_video_sink_center_rect() was deprecated in favour of the more
1298     generic newly-added gst_video_center_rect().
1299
1300 -   The GST_MEMORY_FLAG_NO_SHARE flag has been deprecated, as it tends
1301     to cause problems and prevents sub-buffering. If pooling or lifetime
1302     tracking is required, memories should be allocated through a custom
1303     GstAllocator instead of relying on the lifetime of the buffers the
1304     memories were originally attached to, which is fragile anyway.
1305
1306 -   The GstPlayer high-level playback library is being replaced with the
1307     new GstPlay library (see above). GstPlayer should be considered
1308     deprecated at this point and will be marked as such in the next
1309     development cycle. Applications should be ported to GstPlay.
1310
1311 -   Gstreamer Editing Services: ges_video_transition_set_border(),
1312     ges_video_transition_get_border()
1313     ges_video_transition_set_inverted()
1314     ges_video_transition_is_inverted() have been deprecated, use
1315     ges_timeline_element_set_children_properties() instead.
1316
1317 Miscellaneous performance, latency and memory optimisations
1318
1319 More video conversion fast paths
1320
1321 -   v210 ↔ I420, YV12, Y42B, UYVY and YUY2
1322 -   A420 → RGB
1323
1324 Less jitter when waiting on the system clock
1325
1326 -   Better system clock wait accuracy, less jitter: where available,
1327     clock_nanosleep is used for higher accuracy for waits below 500
1328     usecs, and waits below 2ms will first use the regular waiting system
1329     and then clock_nanosleep for the remainder. The various wait
1330     implementation have a latency ranging from 50 to 500+ microseconds.
1331     While this is not a major issue when dealing with a low number of
1332     waits per second (for ex: video), it does introduce a non-negligible
1333     jitter for synchronisation of higher packet rate systems.
1334
1335 Video decoder subframe support
1336
1337 -   The GstVideoDecoder base class gained API to process input at the
1338     sub-frame level. That way video decoders can start decoding slices
1339     before they have received the full input frame in its entirety (to
1340     the extent this is supported by the codec, of course). This helps
1341     with CPU utilisation and reduces latency.
1342
1343 -   This functionality is now being used in the OpenJPEG JPEG 2000
1344     decoder, the FFmpeg H.264 decoder (in case of NAL-aligned input) and
1345     the OpenMAX H.264/H.265 decoders (in case of NAL-aligned input).
1346
1347 Miscellaneous other changes and enhancements
1348
1349 -   GstDeviceMonitor no longer fails to start just because one of the
1350     device providers failed to start. That could happen for example on
1351     systems where the pulseaudio device provider is installed, but
1352     pulseaudio isn’t actually running but ALSA is used for audio
1353     instead. In the same vein the device monitor now keeps track of
1354     which providers have been started (via the new
1355     gst_device_provider_is_started()) and only stops actually running
1356     device providers when stopping the device monitor.
1357
1358 -   On embedded systems it can be useful to create a registry that can
1359     be shared and read by multiple processes running as different users.
1360     It is now possible to set the new GST_REGISTRY_MODE environment
1361     variable to specify the file mode for the registry file, which by
1362     default is set to be only user readable/writable.
1363
1364 -   GstNetClientClock will signal lost sync in case the remote time
1365     resets (e.g. because device power cycles), by emitting the “synced”
1366     signal with synced=FALSE parameter, so applications can take action.
1367
1368 -   gst_value_deserialize_with_pspec() allows deserialisation with a
1369     hint for what the target GType should be. This allows for example
1370     passing arrays of flags through the command line or
1371     gst_util_set_object_arg(), eg: foo="<bar,bar+baz>".
1372
1373 -   It’s now possible to create an empty GstVideoOverlayComposition
1374     without any rectangles by passing a NULL rectangle to
1375     gst_video_overlay_composition_new(). This is useful for bindings and
1376     simplifies application code in some places.
1377
1378 Tracing framework, debugging and testing improvements
1379
1380 -   New factories tracer to list loaded elements (and other plugin
1381     features). This can be useful to collect a list of elements needed
1382     for an application, which in turn can be used to create a tailored
1383     minimal GStreamer build that contains just the elements needed and
1384     nothing else.
1385 -   New plugin-feature-loaded tracing hook for use by tracers like the
1386     new factories tracer
1387
1388 -   GstHarness: Add gst_harness_set_live() so that harnesses can be set
1389     to non-live and return is-live=false in latency queries if needed.
1390     Default behaviour is to always return is-live=true in latency
1391     queries.
1392
1393 -   navseek: new "hold-eos" property. When enabled, the element will
1394     hold back an EOS event until the next keystroke (via navigation
1395     events). This can be used to keep a video sink showing the last
1396     frame of a video pipeline until a key is pressed instead of tearing
1397     it down immediately on EOS.
1398
1399 -   New fakeaudiosink element: mimics an audio sink and can be used for
1400     testing and CI pipelines on systems where no audio system is
1401     installed or running. It differs from fakesink in that it only
1402     support audio caps and syncs to the clock by default like a normal
1403     audio sink. It also implements the GstStreamVolume interface like
1404     most audio sinks do.
1405
1406 -   New videocodectestsink element for video codec conformance testing:
1407     Calculates MD5 checksums for video frames and skips any padding
1408     whilst doing so. Can optionally also write back the video data with
1409     padding removed into a file for easy byte-by-byte comparison with
1410     reference data.
1411
1412 Tools
1413
1414 gst-inspect-1.0
1415
1416 -   Can sort the list of plugins by passing --sort=name as command line
1417     option
1418
1419 gst-launch-1.0
1420
1421 -   will now error out on top-level properties that don’t exist and
1422     which were silently ignored before
1423 -   On Windows the high-resolution clock is enabled now, which provides
1424     better clock and timer performance on Windows (see Windows section
1425     below for more details).
1426
1427 gst-play-1.0
1428
1429 -   New --start-position command line argument to start playback from
1430     the specified position
1431 -   Audio can be muted/unmuted in interactive mode by pressing the m
1432     key.
1433 -   On Windows the high-resolution clock is enabled now (see Windows
1434     section below for more details)
1435
1436 gst-device-monitor-1.0
1437
1438 -   New --include-hidden command line argument to also show “hidden”
1439     device providers
1440
1441 ges-launch-1.0
1442
1443 -   New interactive mode that allows seeking and such. Can be disabled
1444     by passing the --no-interactive argument on the command line.
1445 -   Option to forward tags
1446 -   Allow using an existing clip to determine the rendering format (both
1447     topology and profile) via new --profile-from command line argument.
1448
1449 GStreamer RTSP server
1450
1451 -   GstRTSPMediaFactory gained API to disable RTCP
1452     (gst_rtsp_media_factory_set_enable_rtcp(), "enable-rtcp" property).
1453     Previously RTCP was always allowed for all RTSP medias. With this
1454     change it is possible to disable RTCP completely, irrespective of
1455     whether the client wants to do RTCP or not.
1456
1457 -   Make a mount point of / work correctly. While not allowed by the
1458     RTSP 2 spec, the RTSP 1 spec is silent on this and it is used in the
1459     wild. It is now possible to use / as a mount path in
1460     gst-rtsp-server, e.g. rtsp://example.com/ would work with this now.
1461     Note that query/fragment parts of the URI are not necessarily
1462     correctly handled, and behaviour will differ between various
1463     client/server implementations; so use it if you must but don’t bug
1464     us if it doesn’t work with third party clients as you’d hoped.
1465
1466 -   multithreading fixes (races, refcounting issues, deadlocks)
1467
1468 -   ONVIF audio backchannel fixes
1469
1470 -   ONVIF trick mode optimisations
1471
1472 -   rtspclientsink: new "update-sdp" signal that allows updating the SDP
1473     before sending it to the server via ANNOUNCE. This can be used to
1474     add additional metadata to the SDP, for example. The order and
1475     number of medias must not be changed, however.
1476
1477 GStreamer VAAPI
1478
1479 -   new AV1 decoder element (vaapiav1dec)
1480
1481 -   H.264 decoder: handle stereoscopic 3D video with frame packing
1482     arrangement SEI messages
1483
1484 -   H.265 encoder: added Screen Content Coding extensions support
1485
1486 -   H.265 decoder: gained MAIN_444_12 profile support (decoded to
1487     Y412_LE), and 4:2:2 12-bits support (decoded to Y212_LE)
1488
1489 -   vaapipostproc: gained BT2020 color standard support
1490
1491 -   vaapidecode: now generates caps templates dynamically at runtime in
1492     order to advertise actually supported caps instead of all
1493     theoretically supported caps.
1494
1495 -   GST_VAAPI_DRM_DEVICE environment variable to force a specified DRM
1496     device when a DRM display is used. It is ignored when other types of
1497     displays are used. By default /dev/dri/renderD128 is used for DRM
1498     display.
1499
1500 GStreamer OMX
1501
1502 -   subframe support in H.264/H.265 decoders
1503
1504 GStreamer Editing Services and NLE
1505
1506 -   framepositioner: new "operator" property to access blending modes in
1507     the compositor
1508 -   timeline: Implement snapping to markers
1509 -   smart-mixer: Add support for d3d11compositor and glvideomixer
1510 -   titleclip: add "draw-shadow" child property
1511 -   ges:// URI support to define a timeline from a description.
1512 -   command-line-formatter
1513     -   Add track management to timeline description
1514     -   Add keyframe support
1515 -   ges-launch-1.0:
1516     -   Add an interactive mode where we can seek etc…
1517     -   Add option to forward tags
1518     -   Allow using an existing clip to determine the rendering format
1519         (both topology and profile) via new --profile-from command line
1520         argument.
1521 -   Fix static build
1522
1523 GStreamer validate
1524
1525 -   report: Add a way to force backtraces on reports even if not a
1526     critical issue (GST_VALIDATE_ISSUE_FLAGS_FORCE_BACKTRACE)
1527 -   Add a flag to gst_validate_replace_variables_in_string() allow
1528     defining how to resolve variables in structs
1529 -   Add gst_validate_bin_monitor_get_scenario() to get the bin monitor
1530     scenario, which is useful for applications that use Validate
1531     directly.
1532 -   Add an expected-values parameter to wait, message-type=XX allowing
1533     more precise filtering of the message we are waiting for.
1534 -   Add config file support: each test can now use a config file for the
1535     given media file used to test.
1536 -   Add support to check properties of object properties
1537 -   scenario: Add an "action-done" signal to signal when an action is
1538     done
1539 -   scenario: Add a "run-command" action type
1540 -   scenario: Allow forcing running action on idle from scenario file
1541 -   scenario: Allow iterating over arrays in foreach
1542 -   scenario: Rename ‘interlaced’ action to ‘non-blocking’
1543 -   scenario: Add a non-blocking flag to the wait signal
1544
1545 GStreamer Python Bindings
1546
1547 -   Fixes for Python 3.10
1548 -   Various build fixes
1549 -   at least one known breaking change caused by g-i annotation changes
1550     (see below)
1551
1552 GStreamer C# Bindings
1553
1554 -   Fix GstDebugGraphDetails enum
1555 -   Updated to latest GtkSharp
1556 -   Updated to include GStreamer 1.20 API
1557
1558 GStreamer Rust Bindings and Rust Plugins
1559
1560 -   The GStreamer Rust bindings are released separately with a different
1561     release cadence that’s tied to gtk-rs, but the latest release has
1562     already been updated for the upcoming new GStreamer 1.20 API (v1_20
1563     feature).
1564
1565 -   gst-plugins-rs, the module containing GStreamer plugins written in
1566     Rust, has also seen lots of activity with many new elements and
1567     plugins. See the New Elements section above for a list of new Rust
1568     elements.
1569
1570 Build and Dependencies
1571
1572 -   Meson 0.59 or newer is now required to build GStreamer.
1573
1574 -   The GLib requirement has been bumped to GLib 2.56 or newer (from
1575     March 2018).
1576
1577 -   The wpe plugin now requires wpe >= 2.28 and wpebackend-fdo >= 1.8
1578
1579 -   The souphttpsrc plugin is no longer linked against libsoup but
1580     instead tries to pick up either libsoup2 or libsoup3 dynamically at
1581     runtime. Distro packagers please ensure to add a dependency on one
1582     of the libsoup runtimes to the gst-plugins-good package so that
1583     there is actually a libsoup for the plugin to find!
1584
1585 Explicit opt-in required for build of certain plugins with (A)GPL dependencies
1586
1587 Some plugins have GPL- or AGPL-licensed dependencies and those plugins
1588 will no longer be built by default unless you have explicitly opted in
1589 to allow (A)GPL-licensed dependencies by passing -Dgpl=enabled to Meson,
1590 even if the required dependencies are available.
1591
1592 See Building plugins with (A)GPL-licensed dependencies for more details
1593 and a non-exhaustive list of plugins affected.
1594
1595 gst-build: replaced by mono repository
1596
1597 See mono repository section above and the GStreamer mono repository FAQ.
1598
1599 Cerbero
1600
1601 Cerbero is a meta build system used to build GStreamer plus dependencies
1602 on platforms where dependencies are not readily available, such as
1603 Windows, Android, iOS and macOS.
1604
1605 General Cerbero improvements
1606
1607 -   Plugin removed: libvisual
1608 -   New plugins: rtpmanagerbad and rist
1609
1610 macOS / iOS specific Cerbero improvements
1611
1612 -   XCode 12 support
1613 -   macOS OS release support is now future-proof, similar to iOS
1614 -   macOS Apple Silicon (ARM64) cross-compile support has been added,
1615     including Universal binaries. There is a known bug regarding this on
1616     ARM64.
1617 -   Running Cerbero itself on macOS Apple Silicon (ARM64) is currently
1618     experimental and is known to have bugs
1619
1620 Windows specific Cerbero improvements
1621
1622 -   Visual Studio 2022 support has been added
1623 -   bootstrap is faster since it requires building fewer build-tools
1624     recipes on Windows
1625 -   package is faster due to better scheduling of recipe stages and
1626     elimination of unnecessary autotools regeneration
1627 -   The following plugins are no longer built on Windows:
1628     -   a52dec (another decoder is still available in libav)
1629     -   dvdread
1630     -   resindvd
1631
1632 Windows MSI installer
1633
1634 -   no major changes
1635
1636 Linux specific Cerbero improvements
1637
1638 -   Fedora, Debian OS release support is now more future-proof
1639 -   Amazon Linux 2 support has been added
1640
1641 Android specific Cerbero improvements
1642
1643 -   no major changes
1644
1645 Platform-specific changes and improvements
1646
1647 Android
1648
1649 -   No major changes
1650
1651 macOS and iOS
1652
1653 -   applemedia: add ProRes support to vtenc and vtdec
1654
1655 -   The GStreamer.framework location is now relocatable and is not
1656     required to be /Library/Frameworks/
1657
1658 -   Cerbero now supports cross-compiling to macOS running on Apple
1659     Silicon (ARM64), and Universal binaries are now available that can
1660     be used on both X86_64 and ARM64 macOS.
1661
1662 Windows
1663
1664 -   On Windows the high-resolution clock is enabled now in the
1665     gst-launch-1.0 and gst-play-1.0 command line tools, which provides
1666     better clock and timer performance on Windows, at the cost of higher
1667     power consumption. By default, without the high-resolution clock
1668     enabled, the timer precision on Windows is system-dependent and may
1669     be as bad as 15ms which is not good enough for many multimedia
1670     applications. Developers may want to do the same in their Windows
1671     applications if they think it’s a good idea for their application
1672     use case, and depending on the Windows version they target. This is
1673     not done automatically by GStreamer because on older Windows
1674     versions (pre-Windows 10) this affects a global Windows setting and
1675     also there’s a power consumption vs. performance trade-off that may
1676     differ from application to application.
1677
1678 -   dxgiscreencapsrc now supports resolution changes
1679
1680 -   The wasapi2 audio plugin was rewritten and now has a higher rank
1681     than the old wasapi plugin since it has a number of additional
1682     features such as automatic stream routing, and no
1683     known-but-hard-to-fix issues. The plugin is always built if the
1684     Windows 10 SDK is available now.
1685
1686 -   The wasapi device providers now detect and notify dynamic device
1687     additions/removals
1688
1689 -   d3d11screencapturesrc: new desktop capture element, including
1690     GstDeviceProvider implementation to enumerate/select target monitors
1691     for capture.
1692
1693 -   Direct3D11/DXVA decoder now supports AV1 and MPEG-2 codecs
1694     (d3d11av1dec, d3d11mpeg2dec)
1695
1696 -   VP9 decoding got more reliable and stable thanks to a newly written
1697     codec parser
1698
1699 -   Support for decoding interlaced H.264/AVC streams
1700
1701 -   Hardware-accelerated video deinterlacing (d3d11deinterlace) and
1702     video mixing (d3d11compositor)
1703
1704 -   Video mixing with the Direct3D11 API (d3d11compositor)
1705
1706 -   MediaFoundation API based hardware encoders gained the ability to
1707     receive Direct3D11 textures as an input
1708
1709 -   Seungha’s blog post “GStreamer ❤ Windows: A primer on the cool stuff
1710     you’ll find in the 1.20 release” describes many of the
1711     Windows-related improvements in more detail
1712
1713 Linux
1714
1715 -   bluez: LDAC Bluetooth audio codec support in a2dpsink and avdtpsink,
1716     as well as an LDAC RTP payloader (rtpldacpay) and an LDAC audio
1717     encoder (ldacenc)
1718
1719 -   kmssink: gained support for NV24, NV61, RGB16/BGR16 formats;
1720     auto-detect NVIDIA Tegra driver
1721
1722 Documentation improvements
1723
1724 -   hardware-accelerated GPU plugins will now no longer always list all
1725     the element variants for all available GPUs, since those are
1726     system-dependent and it’s confusing for users to see those in the
1727     documentation just because the GStreamer developer who generated the
1728     docs had multiple GPUs to play with at the time. Instead just show
1729     the default elements.
1730
1731 Possibly Breaking and Other Noteworthy Behavioural Changes
1732
1733 -   gst_parse_launch(), gst_parse_bin_from_description() and friends
1734     will now error out when setting properties that don’t exist on
1735     top-level bins. They were silently ignored before.
1736
1737 -   The GstWebRTC library does not expose any objects anymore with
1738     public fields. Instead properties have been added to replace that
1739     functionality. If you are accessing such fields in your application,
1740     switch to the corresponding properties.
1741
1742 -   playbin and uridecodebin now emit the source-setup signal before the
1743     element is added to the bin and linked so that the source element is
1744     already configured before any scheduling query comes in, which is
1745     useful for elements such as appsrc or giostreamsrc.
1746
1747 -   The source element inside urisourcebin (used inside uridecodebin3
1748     which is used inside playbin3) is no longer called "source". This
1749     shouldn’t affect anyone hopefully, because there’s a "setup-source"
1750     signal to configure the source element and no one should rely on
1751     names of internal elements anyway.
1752
1753 -   The vp8enc element now expects bps (bits per second) for the
1754     "temporal-scalability-target-bitrate" property, which is consistent
1755     with the "target-bitrate" property. Since additional configuration
1756     is required with modern libvpx to make temporal scaling work anyway,
1757     chances are that very few people will have been using this property
1758
1759 -   vp8enc and vp9enc now default to “good quality” for the "deadline"
1760     property rather then “best quality”. Having the deadline set to best
1761     quality causes the encoder to be absurdly slow, most real-life users
1762     will want the good quality tradeoff instead.
1763
1764 -   The experimental GstTranscoder library API in gst-plugins-bad was
1765     changed from a GObject signal-based notification mechanism to a
1766     GstBus/message-based mechanism akin to GstPlayer/GstPlay.
1767
1768 -   MPEG-TS SCTE-35 API: semantic change for SCTE-35 splice commands:
1769     timestamps passed by the application should be in running time now,
1770     since users of the API can’t really be expected to predict the local
1771     PTS of the muxer.
1772
1773 -   The GstContext used by souphttpsrc to share the session between
1774     multiple element instances has changed. Previously it provided
1775     direct access to the internal SoupSession object, now it only
1776     provides access to an opaque, internal type. This change is
1777     necessary because SoupSession is not thread-safe at all and can’t be
1778     shared safely between arbitrary external code and souphttpsrc.
1779
1780 -   Python bindings: GObject-introspection related Annotation fixes have
1781     led to a case of a GstVideo.VideoInfo-related function signature
1782     changing in the Python bindings (possibly one or two other cases
1783     too). This is for a function that should never have been exposed in
1784     the first place though, so the bindings are being updated to throw
1785     an exception in that case, and the correct replacement API has been
1786     added in form of an override.
1787
1788 Known Issues
1789
1790 -   nothing in particular at this point (but also see possibly breaking
1791     changes section above)
1792
1793 Contributors
1794
1795 Aaron Boxer, Adam Leppky, Adam Williamson, Alba Mendez, Alejandro
1796 González, Aleksandr Slobodeniuk, Alexander Vandenbulcke, Alex Ashley,
1797 Alicia Boya García, Andika Triwidada, Andoni Morales Alastruey, Andrew
1798 Wesie, Andrey Moiseev, Antonio Ospite, Antonio Rojas, Arthur Crippa
1799 Búrigo, Arun Raghavan, Ashley Brighthope, Axel Kellermann, Baek, Bastien
1800 Nocera, Bastien Reboulet, Benjamin Gaignard, Bing Song, Binh Truong,
1801 Biswapriyo Nath, Brad Hards, Brad Smith, Brady J. Garvin, Branko
1802 Subasic, Camilo Celis Guzman, Chris Bass, ChrisDuncanAnyvision, Chris
1803 White, Corentin Damman, Daniel Almeida, Daniel Knobe, Daniel Stone,
1804 david, David Fernandez, David Keijser, David Phung, Devarsh Thakkar,
1805 Dinesh Manajipet, Dmitry Samoylov, Dmitry Shusharin, Dominique Martinet,
1806 Doug Nazar, Ederson de Souza, Edward Hervey, Emmanuel Gil Peyrot,
1807 Enrique Ocaña González, Ezequiel Garcia, Fabian Orccon, Fabrice
1808 Fontaine, Fernando Jimenez Moreno, Florian Karydes, Francisco Javier
1809 Velázquez-García, François Laignel, Frederich Munch, Fredrik Pålsson,
1810 George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Guido Günther,
1811 Guillaume Desmottes, Guiqin Zou, Haakon Sporsheim, Haelwenn (lanodan)
1812 Monnier, Haihao Xiang, Haihua Hu, Havard Graff, He Junyan, Helmut
1813 Januschka, Henry Wilkes, Hosang Lee, Hou Qi, Ignacio Casal Quinteiro,
1814 Igor Kovalenko, Ilya Kreymer, Imanol Fernandez, Jacek Tomaszewski, Jade
1815 Macho, Jakub Adam, Jakub Janků, Jan Alexander Steffens (heftig), Jan
1816 Schmidt, Jason Carrete, Jason Pereira, Jay Douglass, Jeongki Kim, Jérôme
1817 Laheurte, Jimmi Holst Christensen, Johan Sternerup, John Hassell, John
1818 Lindgren, John-Mark Bell, Jonathan Matthew, Jordan Petridis, Jose
1819 Quaresma, Julian Bouzas, Julien, Kai Uwe Broulik, Kasper Steensig
1820 Jensen, Kellermann Axel, Kevin Song, Khem Raj, Knut Inge Hvidsten, Knut
1821 Saastad, Kristofer Björkström, Lars Lundqvist, Lawrence Troup, Lim Siew
1822 Hoon, Lucas Stach, Ludvig Rappe, Luis Paulo Fernandes de Barros, Luke
1823 Yelavich, Mads Buvik Sandvei, Marc Leeman, Marco Felsch, Marek Vasut,
1824 Marian Cichy, Marijn Suijten, Marius Vlad, Markus Ebner, Mart Raudsepp,
1825 Matej Knopp, Mathieu Duponchelle, Matthew Waters, Matthieu De Beule,
1826 Mengkejiergeli Ba, Michael de Gans, Michael Olbrich, Michael Tretter,
1827 Michal Dzik, Miguel Paris, Mikhail Fludkov, mkba, Nazar Mokrynskyi,
1828 Nicholas Jackson, Nicola Murino, Nicolas Dufresne, Niklas Hambüchen,
1829 Nikolay Sivov, Nirbheek Chauhan, Olivier Blin, Olivier Crete, Olivier
1830 Crête, Paul Goulpié, Per Förlin, Peter Boba, P H, Philippe Normand,
1831 Philipp Zabel, Pieter Willem Jordaan, Piotrek Brzeziński, Rafał
1832 Dzięgiel, Rafostar, raghavendra, Raghavendra, Raju Babannavar, Raleigh
1833 Littles III, Randy Li, Randy Li (ayaka), Ratchanan Srirattanamet, Raul
1834 Tambre, reed.lawrence, Ricky Tang, Robert Rosengren, Robert Swain, Robin
1835 Burchell, Roman Sivriver, R S Nikhil Krishna, Ruben Gonzalez, Ruslan
1836 Khamidullin, Sanchayan Maity, Scott Moreau, Sebastian Dröge, Sergei
1837 Kovalev, Seungha Yang, Sid Sethupathi, sohwan.park, Sonny Piers, Staz M,
1838 Stefan Brüns, Stéphane Cerveau, Stephan Hesse, Stian Selnes, Stirling
1839 Westrup, Théo MAILLART, Thibault Saunier, Tim, Timo Wischer, Tim-Philipp
1840 Müller, Tim Schneider, Tobias Ronge, Tom Schoonjans, Tulio Beloqui,
1841 tyler-aicradle, U. Artie Eoff, Ung, Val Doroshchuk, VaL Doroshchuk,
1842 Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Vivienne
1843 Watermeier, Vladimir Menshakov, Will Miller, Wim Taymans, Xabier
1844 Rodriguez Calvar, Xavier Claessens, Xℹ Ruoyao, Yacine Bandou, Yinhang
1845 Liu, youngh.lee, youngsoo.lee, yychao, Zebediah Figura, Zhang yuankun,
1846 Zhang Yuankun, Zhao, Zhao Zhili, , Aleksandar Topic, Antonio Ospite,
1847 Bastien Nocera, Benjamin Gaignard, Brad Hards, Carlos Falgueras García,
1848 Célestin Marot, Corentin Damman, Corentin Noël, Daniel Almeida, Daniel
1849 Knobe, Danny Smith, Dave Piché, Dmitry Osipenko, Fabrice Fontaine,
1850 fjmax, Florian Zwoch, Guillaume Desmottes, Haihua Hu, Heinrich Kruger,
1851 He Junyan, Jakub Adam, James Cowgill, Jan Alexander Steffens (heftig),
1852 Jean Felder, Jeongki Kim, Jiri Uncovsky, Joe Todd, Jordan Petridis,
1853 Krystian Wojtas, Marc-André Lureau, Marcin Kolny, Marc Leeman, Mark
1854 Nauwelaerts, Martin Reboredo, Mathieu Duponchelle, Matthew Waters,
1855 Mengkejiergeli Ba, Michael Gruner, Nicolas Dufresne, Nirbheek Chauhan,
1856 Olivier Crête, Philippe Normand, Rafał Dzięgiel, Ralf Sippl, Robert
1857 Mader, Sanchayan Maity, Sangchul Lee, Sebastian Dröge, Seungha Yang,
1858 Stéphane Cerveau, Teh Yule Kim, Thibault Saunier, Thomas Klausner, Timo
1859 Wischer, Tim-Philipp Müller, Tobias Reineke, Tomasz Andrzejak, Trung Do,
1860 Tyler Compton, Ung, Víctor Manuel Jáquez Leal, Vivia Nikolaidou, Wim
1861 Taymans, wngecn, Wonchul Lee, wuchang li, Xavier Claessens, Xi Ruoyao,
1862 Yoshiharu Hirose, Zhao,
1863
1864 … and many others who have contributed bug reports, translations, sent
1865 suggestions or helped testing.
1866
1867 Stable 1.20 branch
1868
1869 After the 1.20.0 release there will be several 1.20.x bug-fix releases
1870 which will contain bug fixes which have been deemed suitable for a
1871 stable branch, but no new features or intrusive changes will be added to
1872 a bug-fix release usually. The 1.20.x bug-fix releases will be made from
1873 the git 1.20 branch, which will be a stable branch.
1874
1875 1.20.0
1876
1877 1.20.0 was released on 3 February 2022.
1878
1879 Schedule for 1.22
1880
1881 Our next major feature release will be 1.22, and 1.21 will be the
1882 unstable development version leading up to the stable 1.22 release. The
1883 development of 1.21/1.22 will happen in the git main branch.
1884
1885 The plan for the 1.22 development cycle is yet to be confirmed. Assuming
1886 no major project-wide reorganisations in the 1.22 cycle we might try and
1887 aim for a release around August 2022.
1888
1889 1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
1890 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
1891
1892 ------------------------------------------------------------------------
1893
1894 These release notes have been prepared by Tim-Philipp Müller with
1895 contributions from Matthew Waters, Nicolas Dufresne, Nirbheek Chauhan,
1896 Sebastian Dröge and Seungha Yang.
1897
1898 License: CC BY-SA 4.0