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