tests: Fix alpha test on big endian machines.
[platform/upstream/gstreamer.git] / NEWS
1 GStreamer 1.18 Release Notes
2
3 GStreamer 1.18.0 was originally released on 7 September 2020.
4
5 See https://gstreamer.freedesktop.org/releases/1.18/ for the latest
6 version of this document.
7
8 Last updated: Monday 7 September 2020, 10:30 UTC (log)
9
10 Introduction
11
12 The GStreamer team is proud to announce a new major feature release in
13 the stable 1.x API series of your favourite cross-platform multimedia
14 framework!
15
16 As always, this release is again packed with many new features, bug
17 fixes and other improvements.
18
19 Highlights
20
21 -   GstTranscoder: new high level API for applications to transcode
22     media files from one format to another
23
24 -   High Dynamic Range (HDR) video information representation and
25     signalling enhancements
26
27 -   Instant playback rate change support
28
29 -   Active Format Description (AFD) and Bar Data support
30
31 -   ONVIF trick modes support in both GStreamer RTSP server and client
32
33 -   Hardware-accelerated video decoding on Windows via DXVA2 /
34     Direct3D11
35
36 -   Microsoft Media Foundation plugin for video capture and
37     hardware-accelerated video encoding on Windows
38
39 -   qmlgloverlay: New overlay element that renders a QtQuick scene over
40     the top of an input video stream
41
42 -   New imagesequencesrc element to easily create a video stream from a
43     sequence of jpeg or png images
44
45 -   dashsink: Add new sink to produce DASH content
46
47 -   dvbsubenc: DVB Subtitle encoder element
48
49 -   TV broadcast compliant MPEG-TS muxing with constant bitrate muxing
50     and SCTE-35 support
51
52 -   rtmp2: new RTMP client source and sink element implementation
53
54 -   svthevcenc: new SVT-HEVC-based H.265 video encoder
55
56 -   vaapioverlay compositor element using VA-API
57
58 -   rtpmanager support for Google’s Transport-Wide Congestion Control
59     (twcc) RTP extension
60
61 -   splitmuxsink and splitmuxsrc gained support for auxiliary video
62     streams
63
64 -   webrtcbin now contains some initial support for renegotiation
65     involving stream addition and removal
66
67 -   New RTP source and sink elements to easily set up RTP streaming via
68     rtp:// URIs
69
70 -   New Audio Video Transport Protocol (AVTP) plugin for Time-Sensitive
71     Applications
72
73 -   Support for the Video Services Forum’s Reliable Internet Stream
74     Transport (RIST) TR-06-1 Simple Profile
75
76 -   Universal Windows Platform (UWP) support
77
78 -   rpicamsrc element for capturing from the Raspberry Pi camera
79
80 -   RTSP Server TCP interleaved backpressure handling improvements as
81     well as support for Scale/Speed headers
82
83 -   GStreamer Editing Services gained support for nested timelines,
84     per-clip speed rate control and the OpenTimelineIO format.
85
86 -   Autotools build system has been removed in favour of Meson
87
88 Major new features and changes
89
90 Noteworthy new features and API
91
92 Instant playback rate changes
93
94 Changing the playback rate as quickly as possible so far always required
95 a flushing seek. This generally works, but has the disadvantage of
96 flushing all data from the playback pipeline and requiring the demuxer
97 or parser to do a full-blown seek including resetting its internal state
98 and resetting the position of the data source. It might also require
99 considerable decoding effort to get to the right position to resume
100 playback from at the higher rate.
101
102 This release adds a new mechanism to achieve quasi-instant rate changes
103 in certain playback pipelines without interrupting the flow of data in
104 the pipeline. This is activated by sending a seek with the
105 GST_SEEK_FLAG_INSTANT_RATE_CHANGE flag and start_type = stop_type =
106 GST_SEEK_TYPE_NONE. This flag does not work for all pipelines, in which
107 case it is necessary to fall back to sending a full flushing seek to
108 change the playback rate. When using this flag, the seek event is only
109 allowed to change the current rate and can modify the trickmode flags
110 (e.g. keyframe only or not), but it is not possible to change the
111 current playback position, playback direction or do a flush.
112
113 This is particularly useful for streaming use cases like HLS or DASH
114 where the streaming download should not be interrupted when changing
115 rate.
116
117 Instant rate changing is handled in the pipeline in a specific sequence
118 which is detailed in the seeking design docs. Most elements don’t need
119 to worry about this, only elements that sync to the clock need some
120 special handling which is implemented in the GstBaseSink base class, so
121 should be taken care of automatically in most normal playback pipelines
122 and sink elements.
123
124 See Jan’s GStreamer Conference 2019 talk “Changing Playback Rate
125 Instantly” for more information.
126
127 You can try this feature by passing the -i command line option to
128 gst-play-1.0. It is supported at least by qtdemux, tsdemux, hlsdemux,
129 and dashdemux.
130
131 Google Transport-Wide Congestion Control
132
133 rtpmanager now supports the parsing and generating of RTCP messages for
134 the Google Transport-Wide Congestion Control RTP Extension, as described
135 in:
136 https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01.
137
138 This “just” provides the required plumbing/infrastructure, it does not
139 actually make effect any actual congestion control on the sender side,
140 but rather provides information for applications to use to make such
141 decisions.
142
143 See Håvard’s “Google Transport-Wide Congestion Control” talk for more
144 information about this feature.
145
146 GstTranscoder: a new high-level transcoding API for applications
147
148 The new GstTranscoder library, along with transcodebin and
149 uritranscodebin elements, provides high level API for applications to
150 transcode media files from one format to another. Watch Thibault’s talk
151 “GstTranscoder: A High Level API to Quickly Implement Transcoding
152 Capabilities in your Applications” for more information.
153
154 This also comes with a gst-transcoder-1.0 command line utility to
155 transcode one URI into another URI based on the specified encoding
156 profile.
157
158 Active Format Description (AFD) and Bar Data support
159
160 The GstVideo Ancillary Data API has gained support for Active Format
161 Description (AFD) and Bar data.
162
163 This includes various two new buffer metas: GstVideoAFDMeta and
164 GstVideoBarMeta.
165
166 GStreamer now also parses and extracts AFD/Bar data in the h264/h265
167 video parsers, and supports both capturing them and outputting them in
168 the decklink elements. See Aaron’s lightning talk at the GStreamer
169 Conference for more background.
170
171 ONVIF trick modes support in both GStreamer RTSP server and client
172
173 -   Support for the various trick modes described in section 6 of the
174     ONVIF streaming spec has been implemented in both gst-rtsp-server
175     and rtspsrc.
176 -   Various new properties in rtspsrc must be set to take advantage of
177     the ONVIF support
178 -   Examples are available here: test-onvif-server.c and
179     test-onvif-client.c
180 -   Watch Mathieu Duponchelle’s talk “Implementing a Trickmode Player
181     with ONVIF, RTSP and GStreamer” for more information and a live
182     demo.
183
184 GStreamer Codecs library with decoder base classes
185
186 This introduces a new library in gst-plugins-bad which contains a set of
187 base classes that handle bitstream parsing and state tracking for the
188 purpose of decoding different codecs. Currently H264, H265, VP8 and VP9
189 are supported. These bases classes are meant primarily for internal use
190 in GStreamer and are used in various decoder elements in connection with
191 low level decoding APIs like DXVA, NVDEC, VAAPI and V4L2 State Less
192 decoders. The new library is named gstreamer-codecs-1.0 /
193 libgstcodecs-1.0 and is not yet guaranteed to be API stable across major
194 versions.
195
196 MPEG-TS muxing improvements
197
198 The GStreamer MPEG-TS muxer has seen major improvements on various
199 fronts in this cycle:
200
201 -   It has been ported to the GstAggregator base class which means it
202     can work in defined-latency mode with live input sources and
203     continue streaming if one of the inputs stops producing data.
204
205 -   atscmux, a new ATSC-specific tsmux subclass
206
207 -   Constant Bit Rate (CBR) muxing support via the new bitrate property
208     which allows setting the target bitrate in bps. If this is set the
209     muxer will insert null packets as padding to achieve the desired
210     multiplex-wide constant bitrate.
211
212 -   compliance fixes for TV broadcasting use cases (esp. ATSC). See
213     Jan’s talk “TV Broadcast compliant MPEG-TS” for details.
214
215 -   Streams can now be added and removed at runtime: Until now, any
216     streams in tsmux had to be present when the element started
217     outputting its first buffer. Now they can appear at any point during
218     the stream, or even disappear and reappear later using the same PID.
219
220 -   new pcr-interval property allows applications to configure the
221     desired interval instead of hardcoding it
222
223 -   basic SCTE-35 support. This is enabled by setting the scte-35-pid
224     property on the muxer. Sending SCTE-35 commands is then done by
225     creating the appropriate SCTE-35 GstMpegtsSection and sending them
226     on the muxer.
227
228 -   MPEG-2 AAC handling improvements
229
230 New elements
231
232 -   New qmlgloverlay element for rendering a QtQuick scene over the top
233     of a video stream. qmlgloverlay requires that Qt support adopting an
234     external OpenGL context and is known to work on X11 and Windows.
235     Wayland is known not to work due to limitations within Qt. Check out
236     the example to see how it works.
237
238 -   The clocksync element is a generic element that can be placed in a
239     pipeline to synchronise passing buffers to the clock at that point.
240     This is similar to identity sync=true, but because it isn’t
241     GstBaseTransform-based, it can process GstBufferLists without
242     breaking them into separate GstBuffers. It is also more discoverable
243     than the identity option. Note that you do not need to insert this
244     element into your pipeline to make GStreamer sync to the pipeline
245     clock, this is usually handled automatically by the elements in the
246     pipeline (sources and sinks mostly). This element is useful to feed
247     non-live input such as local files into elements that expect live
248     input such as webrtcbin.`
249
250 -   New imagesequencesrc element to easily create a video stream from a
251     sequence of JPEG or PNG images (or any other encoding where the type
252     can be detected), basically a multifilesrc made specifically for
253     image sequences.
254
255 -   rpicamsrc element for capturing raw or encoded video (H.264, MJPEG)
256     from the Raspberry Pi camera. This works much like the popular
257     raspivid command line utility but outputs data nicely timestamped
258     and formatted in order to integrate nicely with other GStreamer
259     elements. Also comes with a device provider so applications can
260     discover the camera if available.
261
262 -   aatv and cacatv video filters that transform video ASCII art style
263
264 -   avtp: new Audio Video Transport Protocol (AVTP) plugin for Linux.
265     See Andre Guedes’ talk “Audio/Video Bridging (AVB) support in
266     GStreamer” for more details.
267
268 -   clockselect: a pipeline element that enables clock selection/forcing
269     via gst-launch pipeline syntax.
270
271 -   dashsink: Add new sink to produce DASH content. See Stéphane’s talk
272     or blog post for details.
273
274 -   dvbsubenc: a DVB subtitle encoder element
275
276 -   microdns: a libmicrodns-based mdns device provider to discover RTSP
277     cameras on the local network
278
279 -   mlaudiosink: new audio sink element for the Magic Leap platform,
280     accompanied by an MLSDK implementation in the amc plugin
281
282 -   msdkvp9enc: VP9 encoder element for the Intel MediaSDK
283
284 -   rist: new plugin implementing support for the Video Services Forum’s
285     Reliable Internet Stream Transport (RIST) TR-06-1 Simple Profile.
286     See Nicolas’ blog post “GStreamer support for the RIST
287     Specification” for more details.
288
289 -   rtmp2: new RTMP client source and sink elements with fully
290     asynchronous network operations, better robustness and additional
291     features such as handling ping and stats messages, and adobe-style
292     authentication. The new rtmp2src and rtmp2sink elements should be
293     API-compatible with the old rtmpsrc / rtmpsink elements and should
294     work as drop-in replacements.
295
296 -   new RTP source and sink elements to easily set up RTP streaming via
297     rtp:// URIs: The rtpsink and rtpsrc elements add an URI interface so
298     that streams can be decoded with decodebin using rtp:// URIs. These
299     can be used as follows: ``` gst-launch-1.0 videotestsrc ! x264enc !
300     rtph264pay config-interval=3 ! rtpsink uri=rtp://239.1.1.1:1234
301
302     gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=1
303     ! rtpsink uri=rtp://239.1.2.3:5000 gst-launch-1.0 rtpsrc
304     uri=rtp://239.1.2.3:5000?encoding-name=H264 ! rtph264depay !
305     avdec_h264 ! videoconvert ! xvimagesink
306
307     gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay
308     config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 gst-launch-1.0
309     rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=MP4V-ES ! rtpmp4vdepay
310     ! avdec_mpeg4 ! videoconvert ! xvimagesink ```
311
312 -   svthevcenc: new SVT-HEVC-based H.265 video encoder
313
314 -   switchbin: new helper element which chooses between a set of
315     processing chains (paths) based on input caps, and changes the
316     active chain if new caps arrive. Paths are child objects, which are
317     accessed by the GstChildProxy interface. See the switchbin
318     documentation for a usage example.
319
320 -   vah264dec: new experimental va plugin with an element for H.264
321     decoding with VA-API using GStreamer’s new stateless decoder
322     infrastructure (see Linux section below).
323
324 -   v4l2codecs: introduce an V4L2 CODECs Accelerator supporting the new
325     CODECs uAPI in the Linux kernel (see Linux section below)
326
327 -   zxing new plugin to detect QR codes and barcodes, based on libzxing
328
329 -   also see the Rust plugins section below which contains plenty of new
330     exciting plugins written in Rust!
331
332 New element features and additions
333
334 GStreamer core
335
336 -   filesink: Add a new “full” buffer mode. Previously the default and
337     full modes were the same. Now the default mode is like before: it
338     accumulates all buffers in a buffer list until the threshold is
339     reached and then writes them all out, potentially in multiple
340     writes. The new full mode works by always copying memory to a single
341     memory area and writing everything out with a single write once the
342     threshold is reached.
343
344 -   multiqueue: Add stats property and
345     current-level-{buffers, bytes, time} pad properties to query the
346     current levels of the corresponding internal queue.
347
348 Plugins Base
349
350 -   alsa: implement a device provider
351
352 -   alsasrc: added use-driver-timestamp property to force use of
353     pipeline timestamps (and disable driver timestamps) if so desired
354
355 -   audioconvert: fix changing the mix-matrix property at runtime
356
357 -   appsrc: added support for segment forwarding or custom GstSegments
358     via GstSample, enabled via the handle-segment-change property. This
359     only works for segments in TIME format for now.
360
361 -   compositor: various performance optimisations, checkerboard drawing
362     fixes, and support for VUYA format
363
364 -   encodebin: Fix and refactor smart encoding; ensure that a single
365     segment is pushed into encoders; improve force-key-unit event
366     handling.
367
368 -   opusenc: Add low delay option (audio-type=restricted-lowdelay) to
369     disable the SILK layer and achieve only 5ms delay.
370
371 -   opusdec: add stats property to retrieve various decoder statistics.
372
373 -   uridecodebin3: Let decodebin3 do its stream selection if no one
374     answers
375
376 -   decodebin3: Avoid overriding explicit user selection of streams
377
378 -   playbin: add flag to force use of software decoders over any
379     hardware decoders that might also be available
380
381 -   playbin3, playbin: propagate sink context
382
383 -   rawvideoparse: Fix tiling support, allow setting colorimetry
384
385 -   subparse: output plain utf8 text instead of pango-markup formatted
386     text if downstream requires it, useful for interop with elements
387     that only accept utf8-formatted subtitles such as muxers or closed
388     caption converters.
389
390 -   tcpserversrc, tcpclientsrc: add stats property with TCP connection
391     stats (some are only available on Linux though)
392
393 -   timeoverlay: add show-times-as-dates, datetime-format and
394     datetime-epoch properties to display times with dates
395
396 -   videorate: Fix changing rate property during playback; reverse
397     playback fixes; update QoS events taking into account our rate
398
399 -   videoscale: pass through and transform size sensitive metas instead
400     of just dropping them
401
402 Plugins Good
403
404 -   avidemux can handle H.265 video now. Our advice remains to
405     immediately cease all contact and communication with anyone who
406     hands you H.265 video in an AVI container, however.
407
408 -   avimux: Add support for S24LE and S32LE raw audio and v210 raw video
409     formats; support more than 2 channels of raw audio.
410
411 -   souphttpsrc: disable session sharing and cookie jar when the cookies
412     property is set; correctly handle seeks past the end of the content
413
414 -   deinterlace: new YADIF deinterlace method which should provide
415     better quality than the existing methods and is LGPL licensed;
416     alternate fields are supported as input to the deinterlacer as well
417     now, and there were also fixes for switching the deinterlace mode on
418     the fly.
419
420 -   flvmux: in streamable mode allow adding new pads even if the initial
421     header has already been written. Old clients will only process the
422     initial stream, new clients will get a header with the new streams.
423     The skip-backwards-streams property can be used to force flvmux to
424     skip and drop a few buffers rather than produce timestamps that go
425     backward and confuse librtmp-based clients. There’s also better
426     handling for timestamp rollover when streaming for a long time.
427
428 -   imagefreeze: Add live mode, which can be enabled via the new is-live
429     property. In this mode frames will only be output in PLAYING state
430     according to the negotiated framerate, skipping frames if the output
431     can’t keep up (e.g. because it’s blocked downstream). This makes it
432     possible to actually use imagefreeze in live pipelines without
433     having to manually ensure somehow that it starts outputting at the
434     current running time and without still risking to fall behind
435     without recovery.
436
437 -   matroskademux, qtdemux: Provide audio lead-in for some lossy formats
438     when doing accurate seeks, to make sure we can actually decode
439     samples at the desired position. This is especially important for
440     non-linear audio/video editing use-cases.
441
442 -   matroskademux, matroskamux: Handle interlaced field order (tff, bff)
443
444 -   matroskamux:
445
446     -   new offset-to-zero property to offset all streams to start at
447         zero. This takes the timestamp of the earliest stream and
448         offsets it so that it starts at 0. Some software (VLC,
449         ffmpeg-based) does not properly handle Matroska files that start
450         at timestamps much bigger than zero, which could happen with
451         live streams.
452     -   added a creation-time property to explicitly set the creation
453         time to write into the file headers. Useful when remuxing, for
454         example, but also for live feeds where the DateUTC header can be
455         set a UTC timestamp corresponding to the beginning of the file.
456     -   the muxer now also always waits for caps on sparse streams, and
457         warns if caps arrive after the header has already been sent,
458         otherwise the subtitle track might be silently absent in the
459         final file. This might affect applications that send sparse data
460         into matroskamux via an appsrc element, which will usually not
461         send out the initial caps before it sends out the first buffer.
462
463 -   pulseaudio: device provider improvements: fix discovery of
464     newly-added devices and hide the alsa device provider if we provide
465     alsa devices
466
467 -   qtdemux: raw audio handling improvements, support for AC4 audio, and
468     key-units trickmode interval support
469
470 -   qtmux:
471
472     -   was ported to the GstAggregator base class which allows for
473         better handling of live inputs, but might entail minor
474         behavioural changes for sparse inputs if inputs are not live.
475     -   has also gained a force-create-timecode-trak property to create
476         a timecode trak in non-mov flavors, which may not be supported
477         by Apple but is supported by other software such as Final Cut
478         Pro X
479     -   also a force-chunks property to force the creation of chunks
480         even in single-stream files, which is required for Apple ProRes
481         certification.
482     -   also supports 8k resolutions in prefill mode with ProRes.
483
484 -   rtpbin gained a request-jitterbuffer signal which allows
485     applications to plug in their own jitterbuffer implementation such
486     as the threadsharing jitterbuffer from the Rust plugins, for
487     example.
488
489 -   rtprtxsend: add clock-rate-map property to allow generic RTP input
490     caps without a clock-rate whilst still supporting the max-size-time
491     property for bundled streams.
492
493 -   rtpssrcdemux: introduce max-streams property to guard against
494     attacks where the sender changes SSRC for every RTP packet.
495
496 -   rtph264pay, rtph264pay: implement STAP-A and various aggregation
497     modes controled by the new aggegrate-mode property: none to not
498     aggregate NAL units (as before), zero-latency to aggregate NAL units
499     until a VCL or suffix unit is included, or max to aggregate all NAL
500     units with the same timestamp (which adds one frame of latency). The
501     default has been kept at none for backwards compatibility reasons
502     and because various RTP/RTSP implementions don’t handle aggregation
503     well. For WebRTC use cases this should be set to zero-latency,
504     however.
505
506 -   rtpmp4vpay: add support for config-interval=-1 to resend headers
507     with each IDR keyframe, like other video payloaders.
508
509 -   rtpvp8depay: Add wait-for-keyframe property for waiting until the
510     next keyframe after packet loss. Useful if the video stream was not
511     encoded with error resilience enabled, in which case packet loss
512     tends to cause very bad artefacts when decoding, and waiting for the
513     next keyframe instead improves user experience considerably.
514
515 -   splitmuxsink and splitmuxsrc can now handle auxiliary video streams
516     in addition to the primary video stream. The primary video stream is
517     still used to select fragment cut points at keyframe boundaries.
518     Auxilliary video streams may be broken up at any packet - so
519     fragments may not start with a keyframe for those streams.
520
521 -   splitmuxsink:
522
523     -   new muxer-preset and sink-preset properties for setting
524         muxer/sink presets
525     -   a new start-index property to set the initial fragment id
526     -   and a new muxer-pad-map property which explicitly maps
527         splitmuxsink pads to the muxer pads they should connect to,
528         overriding the implicit logic that tries to match pads but
529         yields arbitrary names.
530     -   Also includes the actual sink element in the fragment-opened and
531         fragment-closed element messages now, which is especially useful
532         for sinks without a location property or when finalisation of
533         the fragments is done asynchronously.
534
535 -   videocrop: add support for Y444, Y41B and Y42B pixel formats
536
537 -   vp8enc, vp9enc: change default value of VP8E_SET_STATIC_THRESHOLD
538     from 0 to 1 which matches what Google WebRTC does and results in
539     lower CPU usage; also added a new bit-per-pixel property to select a
540     better default bitrate
541
542 -   v4l2: add support for ABGR, xBGR, RGBA, and RGBx formats and for
543     handling interlaced video in alternate fields interlace mode (one
544     field per buffer instead of one frame per picture with both fields
545     interleaved)
546
547 -   v4l2: Profile and level probing support for H264, H265, MPEG-4,
548     MPEG-2, VP8, and VP9 video encoders and decoders
549
550 Plugins Ugly
551
552 -   asfdemux: extract more metadata: disc number and disc count
553
554 -   x264enc:
555
556     -   respect YouTube bitrate recommendation when user sets the
557         YouTube profile preset
558     -   separate high-10 video formats from 8-bit formats to improve
559         depth negotiation and only advertise suitable input raw formats
560         for the desired output depth
561     -   forward downstream colorimetry and chroma-site restrictions to
562         upstream elements
563     -   support more color primaries/mappings
564
565 Plugins Bad
566
567 -   av1enc: add threads, row-mt and tile-{columns,rows} properties for
568     this AOMedia AV1 encoder
569
570 -   ccconverter: implement support for CDP framerate conversions
571
572 -   ccextractor: Add remove-caption-meta property to remove caption
573     metas from the outgoing video buffers
574
575 -   decklink: add support for 2K DCI video modes, widescreen NTSC/PAL,
576     and for parsing/outputting AFD/Bar data. Also implement a simple
577     device provider for Decklink devices.
578
579 -   dtlsrtpenc: add rtp-sync property which synchronises RTP streams to
580     the pipeline clock before passing them to funnel for merging with
581     RTCP.
582
583 -   fdkaac: also decode MPEG-2 AAC; encoder now supports more
584     multichannel/surround sound layouts
585
586 -   hlssink2: add action signals for custom playlist/fragment handling:
587     Instead of always going through the file system API we allow the
588     application to modify the behaviour. For the playlist itself and
589     fragments, the application can provide a GOutputStream. In addition
590     the sink notifies the application whenever a fragment can be
591     deleted.
592
593 -   interlace: can now output data in alternate fields mode; added field
594     switching mode for 2:2 field pattern
595
596 -   iqa: Add a mode property to enable strict mode that checks that all
597     the input streams have the exact same number of frames; also
598     implement the child proxy interface
599
600 -   mpeg2enc: add disable-encode-retries property for lower CPU usage
601
602 -   mpeg4videoparse: allow re-sending codec config at IDR via
603     config-interval=-1
604
605 -   mpegtsparse: new alignment property to determine number of TS
606     packets per output buffer, useful for feeding an MPEG-TS stream for
607     sending via udpsink. This can be used in combination with the
608     split-on-rai property that makes sure to start a new output buffer
609     for any TS packet with the Random Access Indicator set. Also set
610     delta unit buffer flag on non-random-access buffers.
611
612 -   mpegdemux: add an ignore-scr property to ignore the SCR in
613     non-compliant MPEG-PS streams with a broken SCR, which will work as
614     long as PTS/DTS in the PES header is consistently increasing.
615
616 -   tsdemux:
617
618     -   add an ignore-pcr property to ignore MPEG-TS streams with broken
619         PCR streams on which we can’t reliably recover correct
620         timestamps.
621     -   new latency property to allow applications to lower the
622         advertised worst-case latency of 700ms if they know their
623         streams support this (must have timestamps in higher frequency
624         than required by the spec)
625     -   support for AC4 audio
626
627 -   msdk - Intel Media SDK plugin for hardware-accelerated video
628     decoding and encoding on Windows and Linux:
629
630     -   mappings for more video formats: Y210, Y410, P012_LE, Y212_LE
631     -   encoders now support bitrate changes and input format changes in
632         playing state
633     -   msdkh264enc, msdkh265enc: add support for CEA708 closed caption
634         insertion
635     -   msdkh264enc, msdkh265enc: set Region of Interest (ROI) region
636         from ROI metas
637     -   msdkh264enc, msdkh265enc: new tune property to enable low-power
638         mode
639     -   msdkh265enc: add support 12-bit 4:2:0 encoding and 8-bit 4:2:2
640         encoding and VUYA, Y210, and Y410 as input formats
641     -   msdkh265enc: add support for screen content coding extension
642     -   msdkh265dec: add support for main-12/main-12-intra,
643         main-422-10/main-422-10-intra 10bit,
644         main-422-10/main-422-10-intra 8bit,
645         main-422-12/main-422-12-intra, main-444-10/main-444-10-intra,
646         main-444-12/main-444-12-intra, and main-444 profiles
647     -   msdkvp9dec: add support for 12-bit 4:4:4
648     -   msdkvpp: add support for Y410 and Y210 formats, cropping via
649         properties, and a new video-direction property.
650
651 -   mxf: Add support for CEA-708 CDP from S436 essence tracks. mxfdemux
652     can now handle Apple ProRes
653
654 -   nvdec: add H264 + H265 stateless codec implementation nvh264sldec
655     and nvh265sldec with fewer features but improved latency. You can
656     set the environment variable GST_USE_NV_STATELESS_CODEC=h264 to use
657     the stateless decoder variant as nvh264dec instead of the “normal”
658     NVDEC decoder implementation.
659
660 -   nvdec: add support for 12-bit 4:4:4/4:2:0 and 10-bit 4:2:0 decoding
661
662 -   nvenc:
663
664     -   add more rate-control options, support for B-frame encoding (if
665         device supports it), an aud property to toggle Access Unit
666         Delimiter insertion, and qp-{min,max,const}-{i,p,b} properties.
667     -   the weighted-pred property enables weighted prediction.
668     -   support for more input formats, namely 8-bit and 10-bit RGB
669         formats (BGRA, RGBA, RGB10A2, BGR10A2) and YV12 and VUYA.
670     -   on-the-fly resolution changes are now supported as well.
671     -   in case there are multiple GPUs on the system, there are also
672         per-GPU elements registered now, since different devices will
673         have different capabilities.
674     -   nvh265enc can now support 10-bit YUV 4:4:4 encoding and 8-bit
675         4:4:4 / 10-bit 4:2:0 formats up to 8K resolution (with some
676         devices). In case of HDR content HDR related SEI nals will be
677         inserted automatically.
678
679 -   openjpeg: enable multi-threaded decoding and add support for
680     sub-frame encoding (for lower latency)
681
682 -   rtponviftimestamp: add opt-out “drop-out-of-segment” property
683
684 -   spanplc: new stats property
685
686 -   srt: add support for IPv6 and for using hostnames instead of IP
687     addresses; add streamid property, but also allow passing the id via
688     the stream URI; add wait-for-connection property to srtsink
689
690 -   timecodestamper: this element was rewritten with an updated API
691     (properties); it has gained many new properties, seeking support and
692     support for linear timecode (LTC) from an audio stream.
693
694 -   uvch264src now comes with a device provider to advertise available
695     camera sources that support this interface (mostly Logitech C920s)
696
697 -   wpe: Add software rendering support and support for mouse scroll
698     events
699
700 -   x265enc: support more 8/10/12 bits 4:2:0, 4:2:2 and 4:4:4 profiles;
701     add support for mastering display info and content light level
702     encoding SEIs
703
704 gst-libav
705
706 -   Add mapping for SpeedHQ video codec used by NDI
707
708 -   Add mapping for aptX and aptX-HD
709
710 -   avivf_mux: support VP9 and AV1
711
712 -   avvidenc: shift output buffer timestamps and output segment by 1h
713     just like x264enc does, to allow for negative DTS.
714
715 -   avviddec: Limit default number of decoder threads on systems with
716     more than 16 cores, as the number of threads used in avdec has a
717     direct impact on the latency of the decoder, which is of as many
718     frames as threads, so a large numbers of threads can make for
719     latency levels that can be problematic in some applications.
720
721 -   avviddec: Add thread-type property that allows applications to
722     specify the preferred multithreading method (auto, frame, slice).
723     Note that thread-type=frame may introduce additional latency
724     especially in live pipelines, since it introduces a decoding delay
725     of number of thread frames.
726
727 Plugin and library moves
728
729 -   There were no plugin moves or library moves in this cycle.
730
731 -   The rpicamsrc element was moved into -good from an external
732     repository on github.
733
734 Plugin removals
735
736 The following elements or plugins have been removed:
737
738 -   The yadif video deinterlacing plugin from gst-plugins-bad, which was
739     one of the few GPL licensed plugins, has been removed in favour of
740     deinterlace method=yadif.
741
742 -   The avdec_cdgraphics CD Graphics video decoder element from
743     gst-libav was never usable in GStreamer and we now have a cdgdec
744     element written in Rust in gst-plugins-rs to replace it.
745
746 -   The VDPAU plugin has been unmaintained and unsupported for a very
747     long time and does not have the feature set we expect from
748     hardware-accelerated video decoders. It’s been superseded by the
749     nvcodec plugin leveraging NVIDIA’s NVDEC API.
750
751 Miscellaneous API additions
752
753 GStreamer core
754
755 -   gst_task_resume(): This new API allows resuming a task if it was
756     paused, while leaving it in stopped state if it was stopped or not
757     started yet. This can be useful for callback-based driver workflows,
758     where you basically want to pause and resume the task when buffers
759     are notified while avoiding the race with a gst_task_stop() coming
760     from another thread.
761
762 -   info: add printf extensions GST_TIMEP_FORMAT and GST_STIMEP_FORMAT
763     for printing GstClockTime/GstClockTimeDiff pointers, which is much
764     more convenient to use in debug log statements than the usual
765     GST_TIME_FORMAT-followed-by-GST_TIME_ARGS dance. Also add an
766     explicit GST_STACK_TRACE_SHOW_NONE enum value.
767
768 -   gst_element_get_current_clock_time() and
769     gst_element_get_current_running_time(): new helper functions for
770     getting an element clock’s time, and the clock time minus base time,
771     respectively. Useful when adding additional input branches to
772     elements such as compositor, audiomixer, flvmux, interleave or
773     input-selector to determine initial pad offsets and such.
774
775 -   seeking: Add GST_SEEK_FLAG_TRICKMODE_FORWARD_PREDICTED to just skip
776     B-frames during trick mode, showing both keyframes + P-frame, and
777     add support for it in h264parse and h265parse.
778
779 -   elementfactory: add GST_ELEMENT_FACTORY_TYPE_HARDWARE to allow
780     elements to advertise that they are hardware-based or interact with
781     hardware. This has multiple applications:
782
783     -   it makes it possible to easily differentiate hardware and
784         software based element implementations such as audio or video
785         encoders and decoders. This is useful in order to force the use
786         of software decoders for specific use cases, or to check if a
787         selected decoder is actually hardware-accelerated or not.
788     -   elements interacting with hardware and their respective drivers
789         typically don’t know the actually supported capabilities until
790         the element is set into at least READY state and can open a
791         device handle and probe the hardware.
792
793 -   gst_uri_from_string_escaped(): identical to gst_uri_from_string()
794     except that the userinfo and fragment components of the URI will not
795     be unescaped while parsing. This is needed for correctly parsing
796     usernames or passwords with : in them .
797
798 -   paramspecs: new GstParamSpec flag GST_PARAM_CONDITIONALLY_AVAILABLE
799     to indicate that a property might not always exist.
800
801 -   gst_bin_iterate_all_by_element_factory_name() finds elements in a
802     bin by factory name
803
804 -   pad: gst_pad_get_single_internal_link() is a new convenience
805     function to return the single internal link of a pad, which is
806     useful e.g. to retrieve the output pad of a new multiqueue request
807     pad.
808
809 -   datetime: Add constructors to create datetimes with timestamps in
810     microseconds, gst_date_time_new_from_unix_epoch_local_time_usecs()
811     and gst_date_time_new_from_unix_epoch_utc_usecs().
812
813 -   gst_debug_log_get_lines() gets debug log lines formatted in the same
814     way the default log handler would print them
815
816 -   GstSystemClock: Add GST_CLOCK_TYPE_TAI as GStreamer abstraction for
817     CLOCK_TAI, to support transmission offloading features where network
818     packets are timestamped with the time they are deemed to be actually
819     transmitted. Useful in combination with the new AVTP plugin.
820
821 -   miscellaneous utility functions: gst_clear_uri(),
822     gst_structure_take().
823
824 -   harness: Added gst_harness_pull_until_eos()
825
826 -   GstBaseSrc:
827
828     -   gst_base_src_new_segment() allows subclasses to update the
829         segment to be used at runtime from the ::create() function. This
830         deprecates gst_base_src_new_seamless_segment()
831     -   gst_base_src_negotiate() allows subclasses to trigger format
832         renegotiation at runtime from inside the ::create() or ::alloc()
833         function
834
835 -   GstBaseSink: new stats property and gst_base_sink_get_stats() method
836     to retrieve various statistics such as average frame rate and
837     dropped/rendered buffers.
838
839 -   GstBaseTransform: gst_base_transform_reconfigure() is now public
840     API, useful for subclasses that need to completely re-implement the
841     ::submit_input_buffer() virtual method
842
843 -   GstAggregator:
844
845     -   gst_aggregator_update_segment() allows subclasses to update the
846         output segment at runtime. Subclasses should use this function
847         rather than push a segment event onto the source pad directly.
848     -   new sample selection API:
849         -   subclasses should now call gst_aggregator_selected_samples()
850             from their ::aggregate() implementation to signal that they
851             have selected the next samples they will aggregate
852         -   GstAggregator will then emit the samples-selected signal
853             where handlers can then look up samples per pad via
854             gst_aggregator_peek_next_sample().
855         -   This is useful for example to atomically update input pad
856             properties in mixer subclasses such as compositor.
857             Applications can now update properties with precise control
858             of when these changes will take effect, and for which input
859             buffer(s).
860     -   gst_aggregator_finish_buffer_list() allows subclasses to push
861         out a buffer list, improving efficiency in some cases.
862     -   a ::negotiate() virtual method was added, for consistency with
863         other base classes and to allow subclasses to completely
864         override the negotiation behaviour.
865     -   the new ::sink_event_pre_queue() and ::sink_query_pre_queue()
866         virtual methods allow subclasses to intercept or handle
867         serialized events and queries before they’re queued up
868         internally.
869
870 GStreamer Plugins Base Libraries
871
872 Audio library
873
874 -   audioaggregator, audiomixer: new output-buffer-duration-fraction
875     property which allows use cases such as keeping the buffers output
876     by compositor on one branch and audiomixer on another perfectly
877     aligned, by requiring the compositor to output a n/d frame rate, and
878     setting output-buffer-duration-fraction to d/n on the audiomixer.
879
880 -   GstAudioDecoder: new max-errors property so applications can
881     configure at what point the decoder should error out, or tell it to
882     just keep going
883
884 -   gst_audio_make_raw_caps() and gst_audio_formats_raw() are
885     bindings-friendly versions of the GST_AUDIO_CAPS_MAKE() C macro.
886
887 -   gst_audio_info_from_caps() now handles encoded audio formats as well
888
889 PbUtils library
890
891 -   GstEncodingProfile:
892     -   Do not restrict number of similar profiles in a container
893     -   add GstValue serialization function
894 -   codec utils now support more H.264/H.265 profiles/levels and have
895     improved extension handling
896
897 RTP library
898
899 -   rtpbasepayloader: Add scale-rtptime property for scaling RTP
900     timestamp according to the segment rate (equivalent to RTSP speed
901     parameter). This is useful for ONVIF trickmodes via RTSP.
902
903 -   rtpbasepayload: add experimental property for embedding twcc
904     sequencenumbers for Transport-Wide Congestion Control (gated behind
905     the GST_RTP_ENABLE_EXPERIMENTAL_TWCC_PROPERTY environment
906     variable) - more generic API for enabling this is expected to land
907     in the next development cycle.
908
909 -   rtcpbuffer: add RTPFB_TYPE_TWCC for Transport-Wide Congestion
910     Control
911
912 -   rtpbuffer: add
913     gst_rtp_buffer_get_extension_onebyte_header_from_bytes()``, so that one can parse theGBytes`
914     returned by gst_rtp_buffer_get_extension_bytes()
915
916 -   rtpbasedepayload: Add max-reorder property to make the
917     previously-hardcoded value when to consider a sender to have
918     restarted configurable. In some scenarios it’s particularly useful
919     to set max-reorder=0 to disable the behaviour that the depayloader
920     will drop packets: when max-reorder is set to 0 all
921     reordered/duplicate packets are considered coming from a restarted
922     sender.
923
924 RTSP library
925
926 -   add gst_rtsp_url_get_request_uri_with_control() to create request
927     uri combined with control url
928
929 -   GstRTSPConnection: add the possibility to limit the Content-Length
930     for RTSP messages via
931     gst_rtsp_connection_set_content_length_limit(). The same
932     functionality is also exposed in gst-rtsp-server.
933
934 SDP library
935
936 -   add support for parsing the extmap attribute from caps and storing
937     inside caps The extmap attribute allows mapping RTP extension header
938     IDs to well-known RTP extension header specifications. See RFC8285
939     for details.
940
941 Tags library
942
943 -   update to latest iso-code and support more languages
944
945 -   add tags for acoustid id & acoustid fingerprint, plus MusicBrainz ID
946     handling fixes
947
948 Video library
949
950 -   High Dynamic Range (HDR) video information representation and
951     signalling enhancements:
952
953     -   New APIs for HDR video information representation and
954         signalling:
955         -   GstVideoMasteringDisplayInfo: display color volume info as
956             per SMPTE ST 2086
957         -   GstVideoContentLightLevel: content light level specified in
958             CEA-861.3, Appendix A.
959         -   plus functions to serialise/deserialise and add them to or
960             parse them from caps
961         -   gst_video_color_{matrix,primaries,transfer}_{to,from}_iso():
962             new utilility functions for conversion from/to ISO/IEC
963             23001-8
964         -   add ARIB STD-B67 transfer chracteristic function
965         -   add SMPTE ST 2084 support and BT 2100 colorimetry
966         -   define bt2020-10 transfer characteristics for clarity:
967             bt707, bt2020-10, and bt2020-12 transfer characteristics are
968             functionally identical but have their own unique values in
969             the specification.
970     -   h264parse, h265parse: Parse mastering display info and content
971         light level from SEIs.
972     -   matroskademux: parse HDR metadata
973     -   matroskamux: Write MasteringMetadata and Max{CLL,FALL}. Enable
974         muxing with HDR meta data if upstream provided it
975     -   avviddec: Extract HDR information if any and map bt2020-10, PQ
976         and HLG transfer functions
977
978 -   added bt601 transfer function (for completeness)
979
980 -   support for more pixel formats:
981
982     -   Y412 (packed 12 bits 4:4:4:4)
983     -   Y212 (packed 12 bits 4:2:2)
984     -   P012 (semi-planar 4:2:0)
985     -   P016_{LE,BE} (semi-planar 16 bits 4:2:0)
986     -   Y444_16{LE,BE} (planar 16 bits 4:4:4)
987     -   RGB10A2_LE (packed 10-bit RGB with 2-bit alpha channel)
988     -   NV12_32L32 (NV12 with 32x32 tiles in linear order)
989     -   NV12_4L4 (NV12 with 4x4 tiles in linear order)
990
991 -   GstVideoDecoder:
992
993     -   new max-errors property so applications can configure at what
994         point the decoder should error out, or tell it to just keep
995         going
996
997     -   new qos property to disable dropping frames because of QoS, and
998         post QoS messages on the bus when dropping frames. This is
999         useful for example in a scenario where the decoded video is
1000         tee-ed off to go into a live sink that syncs to the clock in one
1001         branch, and an encoding and save to file pipeline in the other
1002         branch. In that case one wouldn’t want QoS events from the video
1003         sink make the decoder drop frames because that would also leave
1004         gaps in the encoding branch then.
1005
1006 -   GstVideoEncoder:
1007
1008     -   gst_video_encoder_finish_subframe() is new API to push out
1009         subframes (e.g. slices), so encoders can split the encoding into
1010         subframes, which can be useful to reduce the overall end-to-end
1011         latency as we no longer need to wait for the full frame to be
1012         encoded to start decoding or sending out the data.
1013     -   new min-force-key-unit-interval property allows configuring the
1014         minimum interval between force-key-unit requests and prevents a
1015         big bitrate increase if a lot of key-units are requested in a
1016         short period of time (as might happen in live streaming RTP
1017         pipelines when packet loss is detected).
1018     -   various force-key-unit event handling fixes
1019
1020 -   GstVideoAggregator, compositor, glvideomixer: expose
1021     max-last-buffer-repeat property on pads. This can be used to have a
1022     compositor display either the background or a stream on a lower
1023     zorder after a live input stream freezes for a certain amount of
1024     time, for example because of network issues.
1025
1026 -   gst_video_format_info_component() is new API to find out which
1027     components are packed into a given plane, which is useful to prevent
1028     us from assuming a 1-1 mapping between planes and components.
1029
1030 -   gst_video_make_raw_caps() and gst_video_formats_raw() are
1031     bindings-friendly versions of the GST_VIDEO_CAPS_MAKE() C macro.
1032
1033 -   video-blend: Add support for blending on top of 16 bit per component
1034     formats, which makes sure we can support every currently supported
1035     raw video format for blending subtitles or logos on top of video.
1036
1037 -   GST_VIDEO_BUFFER_IS_TOP_FIELD() and
1038     GST_VIDEO_BUFFER_IS_BOTTOM_FIELD() convenience macros to check
1039     whether the video buffer contains only the top field or bottom field
1040     of an interlaced picture.
1041
1042 -   GstVideoMeta now includes an alignment field with the
1043     GstVideoAlignment so buffer producers can explicitly specify the
1044     exact geometry of the planes, allowing users to easily know the
1045     padded size and height of each plane. Default values will be used if
1046     this is not set.
1047
1048     Use gst_video_meta_set_alignment() to set the alignment and
1049     gst_video_meta_get_plane_size() or gst_video_meta_get_plane_height()
1050     to compute the plane sizes or plane heights based on the information
1051     in the video meta.
1052
1053 -   gst_video_info_align_full() works like gst_video_info_align() but
1054     also retrieves the plane sizes.
1055
1056 MPEG-TS library
1057
1058 -   support for SCTE-35 sections
1059
1060 -   extend support for ATSC tables:
1061
1062     -   System Time Table (STT)
1063     -   Master Guide Table (MGT)
1064     -   Rating Region Table (RRT)
1065
1066 Miscellaneous performance, latency and memory optimisations
1067
1068 As always there have been many performance and memory usage improvements
1069 across all components and modules. Some of them have already been
1070 mentioned elsewhere so won’t be repeated here.
1071
1072 The following list is only a small snapshot of some of the more
1073 interesting optimisations that haven’t been mentioned in other contexts
1074 yet:
1075
1076 -   caps negotiation, structure and GValue performance optimizations
1077
1078 -   systemclock: clock waiting performance improvements (moved from
1079     GstPoll to GCond for waiting), especially on Windows.
1080
1081 -   rtpsession: add support for buffer lists on the recv path for better
1082     performance with higher packet rate streams.
1083
1084 -   rtpjitterbuffer: internal timer handling has been rewritten for
1085     better performance, see Nicolas’ talk “Revisiting RTP Jitter Buffer
1086     Timers” for more details.
1087
1088 -   H.264/H.265 parsers and RTP payloaders/depayloaders have been
1089     optimised for latency to make sure data is processed and pushed out
1090     as quickly as possible
1091
1092 -   video-scaler: correctness and performance improvements, esp. for
1093     interlaced formats and GBRA
1094
1095 -   GstVideoEncoder has gained new API to push out subframes
1096     (e.g. slices), so encoders can split the encoding into subframes,
1097     which can be useful to reduce the overall end-to-end latency as we
1098     no longer need to wait for the full frame to be encoded to start
1099     decoding or sending out the data.
1100
1101     This is complemented by the new GST_VIDEO_BUFFER_FLAG_MARKER which
1102     is a video-specific buffer flag to mark the end of a video frame, so
1103     elements can know that they have received all data for a frame
1104     without waiting for the beginning of the next frame. This is similar
1105     to how the RTP marker flag is used in many RTP video mappings.
1106
1107     The video encoder base class now also releases the internal stream
1108     lock before pushing out data, so as to not block the input side of
1109     things from processing more data in the meantime.
1110
1111 Miscellaneous other changes and enhancements
1112
1113 -   it is now possible to modify the initial rank of plugin features
1114     without modifying the source code or writing code to do so
1115     programmatically via the GST_PLUGIN_FEATURE_RANK environment
1116     variable. Users can adjust the rank of plugin(s) by passing a
1117     comma-separated list of feature:rank pairs where rank can be a
1118     numerical value or one of NONE, MARGINAL, SECONDARY, PRIMARY, and
1119     MAX. Example: GST_PLUGIN_FEATURE_RANK=myh264dec:MAX,avdec_h264:NONE
1120     sets the rank of the myh264dec element feature to the maximum and
1121     that of avdec_h264 to 0 (none), thus ensuring that myh264dec is
1122     prefered as H264 decoder in an autoplugging context.
1123
1124 -   GstDeviceProvider now does a static probe on start as fallback for
1125     providers that don’t support dynamic probing to make things easier
1126     for users
1127
1128 WebRTC
1129
1130 -   webrtcbin now contains initial support for renegotiation involving
1131     stream addition and removal. There are a number of caveats to this
1132     initial renegotiation support and many complex scenarios are known
1133     to require some work.
1134
1135 -   webrtcbin now exposes the internal ICE object for advanced
1136     configuration options. Using the internal ICE object, it is possible
1137     to toggle UDP or TCP connection usage as well as provide local
1138     network addresses.
1139
1140 -   Fix a number of call flows within webrtcbin’s GstPromise handling
1141     where a promise was never replied to. This has been fixed and now a
1142     promise will always receive a reply.
1143
1144 -   webrtcbin now exposes a latency property for configuring the
1145     internal rtpjitterbuffer latency and buffering when receiving
1146     streams.
1147
1148 -   webrtcbin now only synchronises the RTP part of a stream, allowing
1149     RTCP messages to skip synchronisation entirely.
1150
1151 -   Fixed most of the webrtcbin state properties (connection-state,
1152     ice-connection-state, signaling-state, but not ice-gathering-state
1153     as that requires newer API in libnice and will be fixed in the next
1154     release series) to advance through the state values correctly. Also
1155     implemented DTLS connection states in the DTLS elements so that
1156     peer-connection-state is not always new.
1157
1158 -   webrtcbin now accounts for the a=ice-lite attribute in a remote SDP
1159     offer and will configure the internal ICE implementation
1160     accordingly.
1161
1162 -   webrtcbin will now resolve .local candidate addresses using the
1163     system DNS resolver. .local candidate addresses are now produced by
1164     web browsers to help protect the privacy of users.
1165
1166 -   webrtcbin will now add candidates found in the SDP to the internal
1167     ICE agent. This was previously unsupported and required using the
1168     add-ice-candidate signal manually from the application.
1169
1170 -   webrtcbin will now correctly parse a TURN URI that contains a
1171     username or password with a : in it.
1172
1173 -   The GStreamer WebRTC library gained a GstWebRTCDataChannel object
1174     roughly matching the interface exposed by the WebRTC specification
1175     to allow for easier binding generation and use of data channels.
1176
1177 OpenGL integration
1178
1179 GStreamer OpenGL bindings/build related changes
1180
1181 -   The GStreamer OpenGL library (libgstgl) now ships pkg-config files
1182     for platform-specific API where libgstgl provides a public
1183     integration interface and a pkg-config file for a dependency on the
1184     detected OpenGL headers. The new list of pkg-config files in
1185     addition to the original gstreamer-gl-1.0 are gstreamer-gl-x11-1.0,
1186     gstreamer-gl-wayland-1.0, gstreamer-gl-egl-1.0, and
1187     gstreamer-gl-prototypes-1.0 (for OpenGL headers when including
1188     gst/gl/gstglfuncs.h).
1189
1190 -   GStreamer OpenGL now ships some platform-specific introspection data
1191     for platforms that have a public interface. This should allow for
1192     easier integration with bindings involving platform specific
1193     functionality. The new introspection data files are named
1194     GstGLX11-1.0, GstGLWayland-1.0, and GstGLEGL-1.0.
1195
1196 GStreamer OpenGL Features
1197
1198 -   The iOS implementation no longer accesses UIKit objects off the main
1199     thread fixing a loud warning message when used in iOS applications.
1200
1201 -   Support for mouse and keyboard handling using the GstNavigation
1202     interface was added for the wayland implementation complementing the
1203     already existing support for the X11 and Windows implementations.
1204
1205 -   A new helper base class for source elements, GstGLBaseSrc is
1206     provided to ease writing source elements producing OpenGL video
1207     frames.
1208
1209 -   Support for some more 12-bit and 16-bit video formats (Y412_LE,
1210     Y412_BE, Y212_LE, Y212_BE, P012_LE, P012_BE, P016, NV16, NV61) was
1211     added to glcolorconvert.
1212
1213 -   glupload can now import dma-buf’s into external-oes textures.
1214
1215 -   A new display type for EGLDevice-based systems was added. It is
1216     currently opt-in by using either the GST_GL_PLATFORM=egl-device
1217     environment variable or manual construction
1218     (gst_gl_display_egl_device_new*()) due to compatibility issues with
1219     some platforms.
1220
1221 -   Support was added for WinRT/UWP using the ANGLE project for running
1222     OpenGL-based pipelines within a UWP application.
1223
1224 -   Various elements now support changing the GstGLDisplay to be used at
1225     runtime in simple cases. This is primarily helpful for changing or
1226     adding an OpenGL-based video sink that must share an OpenGL context
1227     with an external source to an already running pipeline.
1228
1229 GStreamer Vulkan integration
1230
1231 -   There is now a GStreamer Vulkan library to provide integration
1232     points and helpers with applications and external GStreamer Vulkan
1233     based elements. The structure of the library is modelled similarly
1234     to the already existing GStreamer OpenGL library. Please note that
1235     the API is still unstable and may change in future releases,
1236     particularly around memory handling. The GStreamer Vulkan library
1237     contains objects for sharing the vkInstance, vkDevice, vkQueue,
1238     vkImage, VkMemory, etc with other elements and/or the application as
1239     well as some helper objects for using Vulkan in an application or
1240     element.
1241
1242 -   Added support for building and running on/for the Android and
1243     Windows systems to complement the existing XCB, Wayland, MacOS, and
1244     iOS implementations.
1245
1246 -   XCB gained support for mouse/keyboard events using the GstNavigation
1247     API.
1248
1249 -   New vulkancolorconvert element for converting between color formats.
1250     vulkancolorconvert can currently convert to/from all 8-bit RGBA
1251     formats as well as 8-bit RGBA formats to/from the YUV formats AYUV,
1252     NV12, and YUY2.
1253
1254 -   New vulkanviewconvert element for converting between stereo view
1255     layouts. vulkanviewconvert can currently convert between all of the
1256     single memory formats (side-by-side, top-bottom, column-interleaved,
1257     row-interleaved, checkerboard, left, right, mono).
1258
1259 -   New vulkanimageidentity element for a blit from the input vulkan
1260     image/s to a new vulkan image/s.
1261
1262 -   The vulkansink element can now scale the input image to the output
1263     window/surface size where that information is available.
1264
1265 -   The vulkanupload element can now configure a transfer from system
1266     memory to VulkanImage-based memory. Previously, this required two
1267     vulkanupload elements.
1268
1269 Tracing framework and debugging improvements
1270
1271 -   gst_tracing_get_active_tracers() returns a list of active tracer
1272     objects. This can be used to interact with tracers at runtime using
1273     GObject API such as action signals. This has been implemented in the
1274     leaks tracer for snapshotting and retrieving leaked/active objects
1275     at runtime.
1276
1277 -   The leaks tracer can now be interacted with programmatically at
1278     runtime via GObject action signals:
1279
1280     -   get-live-object returns a list of live (allocated) traced
1281         objects
1282     -   log-live-objects logs a list of live objects into the debug log.
1283         This is the same as sending the SIGUSR1 signal on unix systems,
1284         but works on all operating systems including Windows.
1285     -   activity-start-tracking, activity-get-checkpoint,
1286         activity-log-checkpoint, activity-stop-tracking: add support for
1287         tracking and checkpointing objects, similar to what was
1288         previously available via SIGUSR2 on unix systems, but works on
1289         all operating systems including Windows.
1290
1291 -   various GStreamer gdb debug helper improvements:
1292
1293     -   new ‘gst-pipeline-tree’ command
1294     -   more gdb helper functions: gst_element_pad(), gst_pipeline() and
1295         gst_bin_get()
1296     -   support for queries and buffers
1297     -   print more info for segment events, print event seqnums, object
1298         pointers and structures
1299     -   improve gst-print command to show more pad and element
1300         information
1301
1302 Tools
1303
1304 gst-launch-1.0
1305
1306 -   now prints the pipeline position and duration if available when the
1307     pipeline is advancing. This is hopefully more user-friendly and
1308     gives visual feedback on the terminal that the pipeline is actually
1309     up and running. This can be disabled with the --no-position command
1310     line option.
1311
1312 -   the parse-launch pipeline syntax now has support for presets:
1313     use@preset=<preset-name>" after an element to load a preset.
1314
1315 gst-inspect-1.0
1316
1317 -   new --color command line option to force coloured output even if not
1318     connected to a tty
1319
1320 gst-tester-1.0 (new)
1321
1322 -   gst-tester-1.0 is a new tool for plugin developers to launch
1323     .validatetest files with TAP compatible output, meaning it can
1324     easily and cleanly be integrated with the meson test harness. It
1325     allows you to use gst-validate (from the gst-devtools module) to
1326     write integration tests in any GStreamer repository whilst keeping
1327     the tests as close as possible to the code. The tool transparently
1328     handles gst-validate being installed or not: if it is not installed
1329     those integration tests will simply be skipped.
1330
1331 gst-play-1.0
1332
1333 -   interactive keyboard controls now also work on Windows
1334
1335 gst-transcoder-1.0 (new)
1336
1337 -   gst-transcoder-1.0 is a new command line tool to transcode one URI
1338     into another URI based on the specified encoding profile using the
1339     new GstTranscoder API (see above).
1340
1341 GStreamer RTSP server
1342
1343 -   Fix issue where the first few packets (i.e. keyframes) could
1344     sometimes be dropped if the rtsp media pipeline had a live input.
1345     This was a regression from GStreamer 1.14. There are more fixes
1346     pending for that which will hopefully land in 1.18.1.
1347
1348 -   Fix backpressure handling when sending data in TCP interleave mode
1349     where RTSP requests and responses and RTP/RTCP packets flow over the
1350     same RTSP TCP connection: The previous implementation would at some
1351     point stop sending data to other clients when a single client
1352     stopped consuming data or did not consume data fast enough. This
1353     obviously created problems for shared media, where the same stream
1354     from a single producer pipeline is sent to multiple clients. Instead
1355     we now manage a backlog in the server’s stream-transport component
1356     and remove slow clients once this backlog exceeds a maximum duration
1357     (which is currently hardcoded).
1358
1359 -   Onvif Streaming Specification trick modes support (see section at
1360     the beginning)
1361
1362 -   Scale/Speed header support: Speed will deliver the data at the
1363     requested speed, which means increasing the data bandwidth for
1364     speeds > 1.0. Scale will attempt to do the same without affecting
1365     the overall bandwidth requirement vis-a-vis normal playback speed
1366     (e.g. it might drop data for fast-forward playback).
1367
1368 -   rtspclientsink: send buffer lists in one go for better performance
1369
1370 GStreamer VAAPI
1371
1372 -   A lot of work was done adding support for media-driver (iHD), the
1373     new VAAPI driver for Intel, mostly for Gen9 onwards.
1374
1375 -   Available color formats and frame sizes are now detected at run-time
1376     according to the context configuration.
1377
1378 -   Gallium drivers have been re-enabled in the allowed drivers list
1379
1380 -   Improved the mapping between VA formats and GStreamer formats by
1381     generating a mapping table at run-time since even among different
1382     drivers the mapping might be different, particularly for RGB with
1383     little endianness.
1384
1385 -   The experimental Flexible Encoding Infrastructure (FEI) elements
1386     have been removed since they were not really actively maintained or
1387     tested.
1388
1389 -   Enhanced the juggling of DMABuf buffers and VASurface metas
1390
1391 -   New vaapioverlay element: a compositor element using VA VPP blend
1392     capabilities to accelerate overlaying and compositing. Example
1393     pipeline:
1394
1395           gst-launch-1.0 -vf videotestsrc ! vaapipostproc ! tee name=testsrc ! queue \
1396           ! vaapioverlay sink_1::xpos=300 sink_1::alpha=0.75 name=overlay ! vaapisink \
1397           testsrc. ! queue ! overlay.
1398
1399 vaapipostproc
1400
1401 -   added video-orientation support, supporting frame mirroring and
1402     rotation
1403
1404 -   added cropping support, either via properties (crop-left,
1405     crop-right, crop-bottom and crop-top) or buffer meta.
1406
1407 -   new skin-tone-enhancenment-level property which is the iHD
1408     replacement of the i965 driver’s sink-tone-level. Both are
1409     incompatible with each other, so both were kept.
1410
1411 -   handle video colorimetry
1412
1413 -   support HDR10 tone mapping
1414
1415 vaapisink
1416
1417 -   resurrected wayland backend for non-weston compositors by extracting
1418     the DMABuf from the VASurface and rendering it.
1419
1420 -   merged the video overlay API for wayland. Now applications can
1421     define the “window” to render on.
1422
1423 -   demoted the vaapisink element to secondary rank since libva
1424     considers rendering as a second-class feature.
1425
1426 VAAPI Encoders
1427
1428 -   new common target-percentage property which is the desired target
1429     percentage of bitrate for variable rate control.
1430
1431 -   encoders now extract their caps from the driver at registration
1432     time.
1433
1434 -   vaapivp9enc: added support for low power mode and support for
1435     profile 2 (profile 0 by default)
1436
1437 -   vaapih264enc: new max-qp property that sets the maximum quantization
1438     value. Support for ICQ and QBVR bitrate control mode, adding a
1439     quality-factor property for these modes. Support baseline profile as
1440     constrained-baseline
1441
1442 -   vaapih265enc:
1443
1444     -   support for main-444 and main-12 encoding profiles.
1445     -   new max-qp property that sets the maximum quantization value.
1446     -   support for ICQ and QBVR bitrate control mode, adding a
1447         quality-factor property for these modes.
1448     -   handle SCC profiles.
1449     -   num-tile-cols and num-tile-row properties to specify the number
1450         of tiles to use.
1451     -   the low-delay-b property was deprecated and is now determined
1452         automatically.
1453     -   improved profile selection through caps.
1454
1455 VAAPI Decoders
1456
1457 -   Decoder surfaces are not bound to their context any longer and can
1458     thus be created and used dynamically, removing the deadlock
1459     headache.
1460
1461 -   Reverse playback is now fluid
1462
1463 -   Forward Region-of-Interest (ROI) metas downstream
1464
1465 -   GLTextureUploadMeta uses DMABuf when GEM is not available. Now
1466     Gallium drivers can use this meta for rendering with EGL.
1467
1468 -   vaapivp9dec: support for 4:2:2 and 4:4:4 chroma type streams
1469
1470 -   vaapih265dec: skip all pictures prior to the first I-frame. Enable
1471     passing range extension flags to the driver. Handle SCC profiles.
1472
1473 -   vaapijpegdec: support for 4:0:0, 4:1:1, 4:2:2 and 4:4:4 chroma types
1474     pictures
1475
1476 -   vaapih264dec: handle baseline streams as constrained-baseline if
1477     possible and make it more tolerant when encountering unknown NALs
1478
1479 GStreamer OMX
1480
1481 -   omxvideoenc: use new video encoder subframe API to push out slices
1482     as soon as they’re ready
1483
1484 -   omxh264enc, omxh265enc: negotiate subframe mode via caps. To enable
1485     it, force downstream caps to video/x-h264,alignment=nal or
1486     video/x-h265,alignment=nal.
1487
1488 -   omxh264enc: Add ref-frames property
1489
1490 -   Zynq ultrascale+ specific video encoder/decoder improvements:
1491
1492     -   GRAY8 format support
1493     -   support for alternate fields interlacing mode
1494     -   video encoder: look-ahead, long-term-ref, and long-term-freq
1495         properties
1496
1497 GStreamer Editing Services and NLE
1498
1499 -   Added nested timelines and subproject support so that GES projects
1500     can be used as clips, potentially serializing nested projects in the
1501     main file or referencing external project files.
1502
1503 -   Implemented an OpenTimelineIO GES formatter. This means GES and
1504     GStreamer can now load and save projects in all the formats
1505     supported by otio.
1506
1507 -   Implemented a GESMarkerList object which allow setting timed
1508     metadata on any GES object.
1509
1510 -   Fixed audio rendering issues during clip transition by ensuring that
1511     a single segment is pushed into encoders.
1512
1513 -   The GESUriClipAsset API is now MT safe.
1514
1515 -   Added ges_meta_container_register_static_meta() to allow fixing a
1516     type for a specific metadata without actually setting a value.
1517
1518 -   The framepositioner element now handles resizing the project and
1519     keeps the same positioning when the aspect ratio is not changed .
1520
1521 -   Reworked the documentation, making it more comprehensive and much
1522     more detailed.
1523
1524 -   Added APIs to retrieve natural size and framerate of a clip (for
1525     example in the case of URIClip it is the framerate/size of the
1526     underlying file).
1527
1528 -   ges_container_edit() is now deprecated and GESTimelineElement gained
1529     the ges_timeline_element_edit() method so the editing API is now
1530     usable from any element in the timeline.
1531
1532 -   GESProject::loading was added so applications can be notified about
1533     when a new timeline starts loading.
1534
1535 -   Implemented the GstStream API in GESTimeline.
1536
1537 -   Added a way to add a timeoverlay inside the test source (potentially
1538     with timecodes).
1539
1540 -   Added APIs to convert times to frame numbers and vice versa:
1541
1542     -   ges_timeline_get_frame_time()
1543
1544     -   ges_timeline_get_frame_at()
1545
1546     -   ges_clip_asset_get_frame_time()
1547
1548     -   ges_clip_get_timeline_time_from_source_frame()
1549
1550         Quite a few validate tests have been implemented to check the
1551         behavior for various demuxer/codec formats
1552
1553 -   Added ges_layer_set_active_for_tracks() which allows muting layers
1554     for the specified tracks
1555
1556 -   Deprecated GESImageSource and GESMultiFileSource now that we have
1557     imagesequencesrc which handles the imagesequence “protocol”
1558
1559 -   Stopped exposing ‘deinterlacing’ children properties for clip types
1560     where they do not make sense.
1561
1562 -   Added support for simple time remapping effects
1563
1564 GStreamer validate
1565
1566 -   Introduced the concept of “Test files” allowing to implement “all
1567     included” test cases, meaning that inside the file the following can
1568     be defined:
1569
1570     -   The application arguments
1571     -   The validate configurations
1572     -   The validate scenario
1573
1574     This replaces the previous big dictionary file in
1575     gst-validate-launcher to implement specific test cases.
1576
1577     We set several variables inside the files (as well as inside
1578     scenarios and config files) to make them relocatable.
1579
1580     The file format has been enhanced so it is easier to read and write,
1581     for example line ending with a coma or (curly) brackets can now be
1582     used as continuation marker so you do not need to add \ at the end
1583     of lines to write a structure on several lines.
1584
1585 -   Support the imagesequence “protocol” and added integration tests for
1586     it.
1587
1588 -   Added action types to allow the scenario to run the Test Clock for
1589     better reproducibility of tests.
1590
1591 -   Support generating tests to check that seeking is frame accurate
1592     (base on ssim).
1593
1594 -   Added ways to record buffers checksum (in different ways) in the
1595     validateflow module.
1596
1597 -   Added vp9 encoding tests.
1598
1599 -   Enhanced seeking action types implementation to allow support for
1600     segment seeks.
1601
1602 -   Output improvements:
1603
1604     -   Logs are now in markdown formats (and bat is used to dump them
1605         if available).
1606     -   File format issues in scenarios/configs/tests files are nicely
1607         reported with the line numbers now.
1608
1609 GStreamer Python Bindings
1610
1611 -   Python 2.x is no longer supported
1612
1613 -   Support mapping buffers without any memcpy:
1614
1615     -   Added a ContextManager to make the API more pythonic
1616
1617             with buf.map(Gst.MapFlags.READ | Gst.MapFlags.WRITE) as info:
1618                 info.data[42] = 0
1619
1620 -   Added high-level helper API for constructing pipelines:
1621
1622     -   Gst.Bin.make_and_add(factory_name, instance_name=None)
1623     -   Gst.Element.link_many(element, ...)
1624
1625 GStreamer C# Bindings
1626
1627 -   Bind gst_buffer_new_wrapped() manually to fix memory handling.
1628
1629 -   Fix gst_promise_new_with_change_func() where bindgen didn’t properly
1630     detect the func as a closure.
1631
1632 -   Declare GstVideoOverlayComposition and GstVideoOverlayRectangle as
1633     opaque type and subclasses of Gst.MiniObject. This changes the API
1634     but without this all usage will cause memory corruption or simply
1635     not work.
1636
1637 -   on Windows, look for gstreamer, glib and gobject DLLs using the MSVC
1638     naming convention (i.e. gstvideo-1.0-0.dll instead of
1639     libgstvideo-1.0-0.dll).
1640
1641     The names of these DLLs have to be hardcoded in the bindings, and
1642     most C# users will probably be using the Microsoft toolchain anyway.
1643
1644     This means that the MSVC compiler is now required to build the
1645     bindings, MingW will no longer work out of the box.
1646
1647 GStreamer Rust Bindings and Rust Plugins
1648
1649 The GStreamer Rust bindings are released separately with a different
1650 release cadence that’s tied to gtk-rs, but the latest release has
1651 already been updated for the new GStreamer 1.18 API, so there’s
1652 absolutely no excuse why your next GStreamer application can’t be
1653 written in Rust anymore.
1654
1655 gst-plugins-rs, the module containing GStreamer plugins written in Rust,
1656 has also seen lots of activity with many new elements and plugins.
1657
1658 What follows is a list of elements and plugins available in
1659 gst-plugins-rs, so people don’t miss out on all those potentially useful
1660 elements that have no C equivalent.
1661
1662 Rust audio plugins
1663
1664 -   audiornnoise: New element for audio denoising which implements the
1665     noise removal algorithm of the Xiph RNNoise library, in Rust
1666 -   rsaudioecho: Port of the audioecho element from gst-plugins-good
1667     rsaudioloudnorm: Live audio loudness normalization element based on
1668     the FFmpeg af_loudnorm filter
1669 -   claxondec: FLAC lossless audio codec decoder element based on the
1670     pure-Rust claxon implementation
1671 -   csoundfilter: Audio filter that can use any filter defined via the
1672     Csound audio programming language
1673 -   lewtondec: Vorbis audio decoder element based on the pure-Rust
1674     lewton implementation
1675
1676 Rust video plugins
1677
1678 -   cdgdec/cdgparse: Decoder and parser for the CD+G video codec based
1679     on a pure-Rust CD+G implementation, used for example by karaoke CDs
1680 -   cea608overlay: CEA-608 Closed Captions overlay element
1681 -   cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT
1682     subtitles) converter
1683 -   tttocea608: CEA-608 Closed Captions from timed-text converter
1684 -   mccenc/mccparse: MacCaption Closed Caption format encoder and parser
1685 -   sccenc/sccparse: Scenarist Closed Caption format encoder and parser
1686 -   dav1dec: AV1 video decoder based on the dav1d decoder implementation
1687     by the VLC project
1688 -   rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e
1689     encoder implementation
1690 -   rsflvdemux: Alternative to the flvdemux FLV demuxer element from
1691     gst-plugins-good, not feature-equivalent yet
1692 -   rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust
1693     implementations by the image-rs project
1694
1695 Rust text plugins
1696
1697 -   textwrap: Element for line-wrapping timed text (e.g. subtitles) for
1698     better screen-fitting, including hyphenation support for some
1699     languages
1700
1701 Rust network plugins
1702
1703 -   reqwesthttpsrc: HTTP(S) source element based on the Rust
1704     reqwest/hyper HTTP implementations and almost feature-equivalent
1705     with the main GStreamer HTTP source souphttpsrc
1706 -   s3src/s3sink: Source/sink element for the Amazon S3 cloud storage
1707 -   awstranscriber: Live audio to timed text transcription element using
1708     the Amazon AWS Transcribe API
1709
1710 Generic Rust plugins
1711
1712 -   sodiumencrypter/sodiumdecrypter: Encryption/decryption element based
1713     on libsodium/NaCl
1714 -   togglerecord: Recording element that allows to pause/resume
1715     recordings easily and considers keyframe boundaries
1716 -   fallbackswitch/fallbacksrc: Elements for handling potentially
1717     failing (network) sources, restarting them on errors/timeout and
1718     showing a fallback stream instead
1719 -   threadshare: Set of elements that provide alternatives for various
1720     existing GStreamer elements but allow to share the streaming threads
1721     between each other to reduce the number of threads
1722 -   rsfilesrc/rsfilesink: File source/sink elements as replacements for
1723     the existing filesrc/filesink elements
1724
1725 Build and Dependencies
1726
1727 -   The Autotools build system has finally been removed in favour of the
1728     Meson build system. Developers who currently use gst-uninstalled
1729     should move to gst-build.
1730
1731 -   API and plugin documentation are no longer built with gtk_doc. The
1732     gtk_doc documentation has been removed in favour of a new unified
1733     documentation module built with hotdoc (also see “Documentation
1734     improvements” section below). Distributors should use the
1735     documentation release tarball instead of trying to package hotdoc
1736     and building the documentation from scratch.
1737
1738 -   gst-plugins-bad now includes an internal copy of libusrsctp, as
1739     there are problems in usrsctp with global shared state, lack of API
1740     stability guarantees, and the absence of any kind of release
1741     process. We also can’t rely on distros shipping a version with the
1742     fixes we need. Both firefox and Chrome bundle their own copies too.
1743     It is still possible to build against an external copy of usrsctp if
1744     so desired.
1745
1746 -   nvcodec no longer needs the NVIDIA NVDEC/NVENC SDKs available at
1747     build time, only at runtime. This allows distributions to ship this
1748     plugin by default and it will just start to work when the required
1749     run-time SDK libraries are installed by the user, without users
1750     needing to build and install the plugin from source.
1751
1752 -   the gst-editing-services tarball is now named gst-editing-services
1753     for consistency (used to be gstreamer-editing-services).
1754
1755 -   the gst-validate tarball has been superseded by the gst-devtools
1756     tarball for consistency with the git module name.
1757
1758 gst-build
1759
1760 gst-build is a meta-module and serves primarily as our uninstalled
1761 development environment. It makes it easy to build most of GStreamer,
1762 but unlike Cerbero it only comes with a limited number of external
1763 dependencies that can be built as subprojects if they are not found on
1764 the system.
1765
1766 gst-build is based on Meson and replaces the old autotools
1767 gst-uninstalled script.
1768
1769 -   The ‘uninstalled’ target has been renamed to ‘devenv’
1770
1771 -   Experimental gstreamer-full library containing all built plugins and
1772     their deps when building with -Ddefault_library=static. A monolithic
1773     library is easier to distribute, and may be required in some
1774     environments. GStreamer core, GLib and GObject are always included,
1775     but external dependencies are still dynamically linked. The
1776     gst-full-libraries meson option allows adding other GStreamer
1777     libraries to the gstreamer-full build. This is an experiment for now
1778     and its behaviour or API may still change in future releases.
1779
1780 -   Add glib-networking as a subproject when glib is a subproject and
1781     load gio modules in the devenv, tls option control whether to use
1782     openssl or gnutls.
1783
1784 -   git-worktree: Allow multiple worktrees for subproject branches
1785
1786 -   Guard against meson being run from inside the uninstalled devenv, as
1787     this might have unexpected consequences.
1788
1789 -   our ffmpeg and x264 meson ports have been updated to the latest
1790     stable version (you might need to update the subprojects checkout
1791     manually though, or just remove the checkouts so meson checks out
1792     the latest version again; improvements for this are pending in
1793     meson, but not merged yet).
1794
1795 Cerbero
1796
1797 Cerbero is a meta build system used to build GStreamer plus dependencies
1798 on platforms where dependencies are not readily available, such as
1799 Windows, Android, iOS and macOS.
1800
1801 General improvements
1802
1803 -   Recipe build steps are done in parallel wherever possible. This
1804     leads to massive improvements in overall build time.
1805 -   Several recipes were ported to Meson, which improved build times
1806 -   Moved from using both GnuTLS and OpenSSL to only OpenSSL
1807 -   Moved from yasm to nasm for all assembly compilation
1808 -   Support zsh when running the cerbero shell command
1809 -   Numerous version upgrades for dependencies
1810 -   Default to xz for tarball binary packages. bz2 can be selected with
1811     the --compress-method option to package.
1812 -   Added boolean variant for controlling the optimization level:
1813     -v optimization
1814 -   Ship .pc pkgconfig files for all plugins in the binary packages
1815 -   CMake and nasm will only be built by Cerbero if the system versions
1816     are unusable
1817 -   The nvcodec variant was removed and the nvcodec plugin is built by
1818     default now (as it no longer requires the SDK to be installed at
1819     build time, only at runtime)
1820
1821 macOS / iOS
1822
1823 -   Minimum iOS SDK version bumped to 11.0
1824 -   Minimum macOS SDK version bumped to 10.11
1825 -   No longer need to manually add support for newer iOS SDK versions
1826 -   Added Vulkan elements via MoltenVK
1827 -   Build times were improved by code-signing all build tools
1828 -   macOS framework ships all gstreamer libraries instead of an outdated
1829     subset
1830 -   Ship pkg-config in the macOS framework package
1831 -   fontconfig: Fix EXC_BAD_ACCESS crash on iOS ARM64
1832 -   Improved App Store compatibility by setting LC_VERSION_MIN_MACOSX,
1833     fixing relocations, and improved bitcode support
1834
1835 Windows
1836
1837 -   MinGW-GCC toolchain was updated to 8.2. It uses the Universal CRT
1838     instead of MSVCRT which eliminates cross-CRT issues in the Visual
1839     Studio build.
1840 -   Require Windows 7 or newer for running binaries produced by Cerbero
1841 -   Require Windows x86_64 for running Cerbero to build binary packages
1842 -   Cerbero no longer uses C:/gstreamer/1.0 as a prefix when building.
1843     That prefix is reserved for use by the MSI installers.
1844 -   Several recipes can now be buit with Visual Studio instead of MinGW.
1845     Ported to meson: opus, libsrtp, harfbuzz, cairo, openh264, libsoup,
1846     libusrsctp. Existing build system: libvpx, openssl.
1847 -   Support building using Visual Studio for 32-bit x86. Previously we
1848     only supported building for 32-bit x86 using the MinGW toolchain.
1849 -   Fixed annoying msgmerge popups in the middle of cerbero builds
1850 -   Added configuration options vs_install_path and vs_install_version
1851     for specifying custom search locations for older Visual Studio
1852     versions that do not support vswhere. You can set these in
1853     ~/.cerbero/cerbero.cbc where ~ is the MSYS homedir, not your Windows
1854     homedir.
1855 -   New Windows-specific plugins: d3d11, mediafoundation, wasapi2
1856 -   Numerous compatibility and reliability fixes when running Cerbero on
1857     Windows, especially non-English locales
1858 -   proxy-libintl now exports the same symbols as gettext, which makes
1859     it a drop-in replacement
1860 -   New mapping variant for selecting the Visual Studio CRT to use:
1861     -v vscrt=<value>. Valid values are md, mdd, and auto (default). A
1862     separate prefix is used when building with either md (release) or
1863     mdd (debug), and the outputted package will have +debug in the
1864     filename. This variant is also used for selecting the correct Qt
1865     libraries (debug vs release) to use when building with -v qt5 on
1866     Windows.
1867 -   Support cross-compile on Windows to Windows ARM64 and ARMv7
1868 -   Support cross-compile on Windows to the Universal Windows Platform
1869     (UWP). Only the subset of plugins that can be built entirely with
1870     Visual Studio will be selected in this case. To do so, use the
1871     config/cross-uwp-universal.cbc configuration, which will build
1872     ARM64, x86, and x86_64 binaries linked to the release CRT, with
1873     optimizations enabled, and debugging turned on. You can combine this
1874     with -v vscrt=mdd to produce binaries linked to the debug CRT. You
1875     can turn off optimizations with the -v nooptimization variant.
1876
1877 Windows MSI installer
1878
1879 -   Require Windows 7 or newer for running GStreamer
1880 -   Fixed some issues with shipping of pkg-config in the Windows
1881     installers
1882 -   Plugin PDB debug files are now shipped in the development package,
1883     not the runtime package
1884 -   Ship installers for 32-bit binaries built with Visual Studio
1885 -   Ship debug and release “universal” (ARM64, X86, and X86_64) tarballs
1886     built for the Universal Windows Platform
1887 -   Windows MSI installers now install into separate prefixes when
1888     building with MSVC and MinGW. Previously both would be installed
1889     into C:/gstreamer/1.0/x86 or C:/gstreamer/1.0/x86_64. Now, the
1890     installation prefixes are:
1891
1892   ----------------------------------------------------------------------------------------------------------------
1893   Target                      Path                                 Build options
1894   --------------------------- ------------------------------------ -----------------------------------------------
1895   MinGW 32-bit                C:/gstreamer/1.0/mingw_x86           -c config/win32.cbc
1896
1897   MinGW 64-bit                C:/gstreamer/1.0/mingw_x86_64        -c config/win64.cbc
1898
1899   MSVC 32-bit                 C:/gstreamer/1.0/msvc_x86            -c config/win32.cbc -v visualstudio
1900
1901   MSVC 64-bit                 C:/gstreamer/1.0/msvc_x86_64         -c config/win64.cbc -v visualstudio
1902
1903   MSVC 32-bit (debug)         C:/gstreamer/1.0/msvc-debug_x86      -c config/win32.cbc -v visualstudio,vscrt=mdd
1904
1905   MSVC 64-bit (debug)         C:/gstreamer/1.0/msvc-debug_x86_64   -c config/win64.cbc -v visualstudio,vscrt=mdd
1906   ----------------------------------------------------------------------------------------------------------------
1907
1908 Note: UWP binary packages are tarballs, not MSI installers.
1909
1910 Linux
1911
1912 -   Support creating MSI installers using WiX when cross-compiling to
1913     Windows
1914 -   Support running cross-windows binaries with Wine when using the
1915     shell and runit cerbero commands
1916 -   Added bash-completion support inside the cerbero shell on Linux
1917 -   Require a system-wide installation of openssl on Linux
1918 -   Added variant -v vaapi to build gstreamer-vaapi and the new gstva
1919     plugin
1920 -   Debian packaging was disabled because it does not work. Help in
1921     fixing this is appreciated.
1922 -   Trimmed the list of packages needed for bootstrap on Linux
1923
1924 Android
1925
1926 -   Updated to NDK r21
1927 -   Support Vulkan
1928 -   Support Qt 5.14+ binary package layout
1929
1930 Platform-specific changes and improvements
1931
1932 Android
1933
1934 -   opensles: Remove hard-coded buffer-/latency-time values and allow
1935     openslessink to handle 48kHz streams.
1936
1937 -   photography interface and camera source: Add additional settings
1938     relevant to Android such as: Exposure mode property, extra colour
1939     tone values (aqua, emboss, sketch, neon), extra scene modes
1940     (backlight, flowers, AR, HDR), and missing virtual methods for
1941     exposure mode, analog gain, lens focus, colour temperature, min &
1942     max exposure time. Add new effects and scene modes to Camera
1943     parameters.
1944
1945 macOS and iOS
1946
1947 -   vtdec can now output to Vulkan-backed memory for zerocopy support
1948     with the Vulkan elements.
1949
1950 Windows
1951
1952 -   d3d11videosink: new Direct3D11-based video sink with support for
1953     HDR10 rendering if supported.
1954
1955 -   Hardware-accelerated video decoding on Windows via DXVA2 /
1956     Direct3D11 using native Windows APIs rather than per-vendor SDKs
1957     (like MSDK for Intel or NVCODEC for NVidia). Plus modern Direct3D11
1958     integration rather than the almost 20-year old Direct3D9 from
1959     Windows XP times used in d3dvideosink. Formats supported for
1960     decoding are H.264, H.265, VP8, and VP9, and zero-copy operation
1961     should be supported in combination with the new d3d11videosink. See
1962     Seungha’s blog post “Windows DXVA2 (via Direct3D 11) Support in
1963     GStreamer 1.17” for more details.
1964
1965 -   Microsoft Media Foundation plugin for hardware-accelerated video
1966     encoding on Windows using native Windows APIs rather than per-vendor
1967     SDKs. Formats supported for encoding are H.264, H.265 and VP9. Also
1968     includes audio encoders for AAC and MP3. See Seungha’s blog post
1969     “Bringing Microsoft Media Foundation to GStreamer” for some more
1970     details about this.
1971
1972 -   new mfvideosrc video capture source element using the latest Windows
1973     APIs rather than ancient APIs used by ksvideosrc/winks. ksvideosrc
1974     should be considered deprecated going forward.
1975
1976 -   d3d11: add d3d11convert, a color space conversion and rescaling
1977     element using shaders, and introduce d3d11upload and d3d11download
1978     elements that work just like glupload and gldownload but for D3D11.
1979
1980 -   Universal Windows Platform (UWP) support, including official
1981     GStreamer binary packages for it. Check out Nirbheek’s latest blog
1982     post “GStreamer 1.18 supports the Universal Windows Platform” for
1983     more details.
1984
1985 -   systemclock correctness and reliability fixes, and also don’t start
1986     the system clock at 0 any longer (which shouldn’t make any
1987     difference to anyone, as absolute clock time values are supposed to
1988     be meaningless in themselves, only the rate of increase matters).
1989
1990 -   toolchain specific plugin registry: the registry cache is now named
1991     differently for MSVC and MinGW toolchains/packages, which should
1992     avoid problems when switching between binaries built with a
1993     different toolchain.
1994
1995 -   new wasapi2 plugin mainly to support UWP applications. The core
1996     logic of this plugin is almost identical to existing wasapi plugin,
1997     but the main target is Windows 10 and UWP. This plugin uses WinRT
1998     APIs, so will likely not work on Windows 8 or older. Unlike the
1999     existing wasapi plugin, this plugin supports automatic stream
2000     routing (auto fallback when device was removed) and device level
2001     mute/volume control. Exclusive streaming mode is not supported,
2002     however, and loopback features are not implemented yet. It is also
2003     only possible to build this plugin with MSVC and the Windows 10 SDK,
2004     it can’t be cross-compiled with the MingW toolchain.
2005
2006 -   new dxgiscreencapsrc element which uses the Desktop Duplication API
2007     to capture the desktop screen at high speed. This is only supported
2008     on Windows 8 or later. Compared to the existing elements
2009     dxgiscreencapsrc offers much better performance, works in High DPI
2010     environments and draws an accurate mouse cursor.
2011
2012 -   d3dvideosink was downgraded to secondary rank, d3d11videosink is
2013     preferred now. Support OverlayComposition for GPU overlay
2014     compositing of subtitles and logos.
2015
2016 -   debug log output fixes, esp. with a non-UTF8 locale/codepage
2017
2018 -   speex, jack: fixed crashes on Windows caused by cross-CRT issues
2019
2020 -   gst-play-1.0 interactive keyboard controls now also work on Windows
2021
2022 Linux
2023
2024 -   kmssink: Add support for P010 and P016 formats
2025
2026 -   vah264dec: new experimental va plugin with an element for H.264
2027     decoding with VA-API. This novel approach, different from
2028     gstreamer-vaapi, uses the gstcodecs library for decoder state
2029     handling, which it is hoped will make for cleaner code because it
2030     uses VA-API without further layers or wrappers. Check out Víctor’s
2031     blog post “New VA-API H.264 decoder in gst-plugins-bad” for the full
2032     lowdown and the limitations of this new plugin, and how to give it a
2033     spin.
2034
2035 -   v4l2codecs: introduce a V4L2 CODECs Accelerator. This plugin will
2036     support the new CODECs uAPI in the Linux kernel, which consists of
2037     an accelerator interface similar to DXVA, NVDEC, VDPAU and VAAPI. So
2038     far H.264 and VP8 are supported. This is used on certain embedded
2039     systems such as i.mx8m, rk3288, rk3399, Allwinner H-series SoCs.
2040
2041 Documentation improvements
2042
2043 -   unified documentation containing tutorials, API docs, plugin docs,
2044     etc. all under one roof, shipped in form of a documentation release
2045     tarball containing both devhelp and html documentation.
2046
2047 -   all documentation is now generated using hotdoc, gtk-doc is no
2048     longer used. Distributors should use the above-mentioned
2049     documentation release tarball instead of trying to package hotdoc
2050     and building the documentation from scratch.
2051
2052 -   there is now documentation for wrapper plugins like gst-libav and
2053     frei0r, as well as tracer plugins.
2054
2055 -   for more info, check out Thibault’s “GStreamer Documentation”
2056     lightning talk from the 2019 GStreamer Conference.
2057
2058 -   new API for plugins to support the documentation system:
2059
2060     -   new GParamSpecFlag GST_PARAM_DOC_SHOW_DEFAULT to make
2061         gst-inspect-1.0 (and the documentation) show the paramspec’s
2062         default value rather than the actually set value as default
2063     -   GstPadTemplate getter and setter for “documentation caps”,
2064         gst_pad_template_set_documentation_caps() and
2065         gst_pad_template_get_documentation_caps(): This can be used in
2066         elements where the caps of pad templates are dynamically
2067         generated and/or dependent on the environment, to override the
2068         caps shown in the documentation (usually to advertise the full
2069         set of possible caps).
2070     -   gst_type_mark_as_plugin_api() for marking types as plugin API,
2071         used for plugin-internal types like enums, flags, pad
2072         subclasses, boxed types, and such.
2073
2074 Possibly Breaking Changes
2075
2076 -   GstVideo: the canonical list of raw video formats (for use in caps)
2077     has been reordered, so video elements such as videotestsrc or
2078     videoconvert might negotiate to a different format now than before.
2079     The new format might be a higher-quality format or require more
2080     processing overhead, which might affect pipeline performance.
2081
2082 -   mpegtsdemux used to wrongly advertise H.264 and H.265 video
2083     elementary streams as alignment=nal. This has now been fixed and
2084     changed to alignment=none, which means an h264parse or h265parse
2085     element is now required after tsdemux for some pipelines where there
2086     wasn’t one before, e.g. in transmuxing scenarios (tsdemux ! tsmux).
2087     Pipelines without such a parser may now fail to link or error out at
2088     runtime. As parsers after demuxers and before muxers have been
2089     generally required for a long time now it is hoped that this will
2090     only affect a small number of applications or pipelines.
2091
2092 -   The Android opensles audio source and sink used to have hard-coded
2093     buffer-/latency-time values of 20ms. This is no longer needed with
2094     newer Android versions and has now been removed. This means a higher
2095     or lower value might now be negotiated by default, which can affect
2096     pipeline performance and latency.
2097
2098 Known Issues
2099
2100 -   None in particular
2101
2102 Contributors
2103
2104 Aaron Boxer, Adam Duskett, Adam x Nilsson, Adrian Negreanu, Akinobu
2105 Mita, Alban Browaeys, Alcaro, Alexander Lapajne, Alexandru Băluț, Alex
2106 Ashley, Alex Hoenig, Alicia Boya García, Alistair Buxton, Ali Yousuf,
2107 Ambareesh “Amby” Balaji, Amr Mahdi, Andoni Morales Alastruey, Andreas
2108 Frisch, Andre Guedes, Andrew Branson, Andrey Sazonov, Antonio Ospite,
2109 aogun, Arun Raghavan, Askar Safin, AsociTon, A. Wilcox, Axel Mårtensson,
2110 Ayush Mittal, Bastian Bouchardon, Benjamin Otte, Bilal Elmoussaoui,
2111 Brady J. Garvin, Branko Subasic, Camilo Celis Guzman, Carlos Rafael
2112 Giani, Charlie Turner, Cheng-Chang Wu, Chris Ayoup, Chris Lord,
2113 Christoph Reiter, cketti, Damian Hobson-Garcia, Daniel Klamt, Daniel
2114 Molkentin, Danny Smith, David Bender, David Gunzinger, David Ing, David
2115 Svensson Fors, David Trussel, Debarshi Ray, Derek Lesho, Devarsh
2116 Thakkar, dhilshad, Dimitrios Katsaros, Dmitriy Purgin, Dmitry Shusharin,
2117 Dominique Leuenberger, Dong Il Park, Doug Nazar, dudengke, Dylan McCall,
2118 Dylan Yip, Ederson de Souza, Edward Hervey, Eero Nurkkala, Eike Hein,
2119 ekwange, Eric Marks, Fabian Greffrath, Fabian Orccon, Fabio D’Urso,
2120 Fabrice Bellet, Fabrice Fontaine, Fanchao L, Felix Yan, Fernando
2121 Herrrera, Francisco Javier Velázquez-García, Freyr, Fuwei Tang, Gaurav
2122 Kalra, George Kiagiadakis, Georgii Staroselskii, Georg Lippitsch, Georg
2123 Ottinger, gla, Göran Jönsson, Gordon Hart, Gregor Boirie, Guillaume
2124 Desmottes, Guillermo Rodríguez, Haakon Sporsheim, Haihao Xiang, Haihua
2125 Hu, Havard Graff, Håvard Graff, Heinrich Kruger, He Junyan, Henry
2126 Wilkes, Hosang Lee, Hou Qi, Hu Qian, Hyunjun Ko, ibauer, Ignacio Casal
2127 Quinteiro, Ilya Smelykh, Jake Barnes, Jakub Adam, James Cowgill, James
2128 Westman, Jan Alexander Steffens, Jan Schmidt, Jan Tojnar, Javier Celaya,
2129 Jeffy Chen, Jennifer Berringer, Jens Göpfert, Jérôme Laheurte, Jim
2130 Mason, Jimmy Ohn, J. Kim, Joakim Johansson, Jochen Henneberg, Johan
2131 Bjäreholt, Johan Sternerup, John Bassett, Jonas Holmberg, Jonas Larsson,
2132 Jonathan Matthew, Jordan Petridis, Jose Antonio Santos Cadenas, Josep
2133 Torra, Jose Quaresma, Josh Matthews, Joshua M. Doe, Juan Navarro,
2134 Juergen Werner, Julian Bouzas, Julien Isorce, Jun-ichi OKADA, Justin
2135 Chadwell, Justin Kim, Keri Henare, Kevin JOLY, Kevin King, Kevin Song,
2136 Knut Andre Tidemann, Kristofer Björkström, krivoguzovVlad, Kyrylo
2137 Polezhaiev, Lenny Jorissen, Linus Svensson, Loïc Le Page, Loïc Minier,
2138 Lucas Stach, Ludvig Rappe, Luka Blaskovic, luke.lin, Luke Yelavich,
2139 Marcin Kolny, Marc Leeman, Marco Felsch, Marcos Kintschner, Marek
2140 Olejnik, Mark Nauwelaerts, Markus Ebner, Martin Liska, Martin Theriault,
2141 Mart Raudsepp, Matej Knopp, Mathieu Duponchelle, Mats Lindestam, Matthew
2142 Read, Matthew Waters, Matus Gajdos, Maxim Paymushkin, Maxim P.
2143 Dementiev, Michael Bunk, Michael Gruner, Michael Olbrich, Miguel París
2144 Díaz, Mikhail Fludkov, Milian Wolff, Millan Castro, Muhammet Ilendemli,
2145 Nacho García, Nayana Topolsky, Nian Yan, Nicola Murino, Nicolas
2146 Dufresne, Nicolas Pernas Maradei, Niels De Graef, Nikita Bobkov, Niklas
2147 Hambüchen, Nirbheek Chauhan, Ognyan Tonchev, okuoku, Oleksandr
2148 Kvl,Olivier Crête, Ondřej Hruška, Pablo Marcos Oltra, Patricia Muscalu,
2149 Peter Seiderer, Peter Workman, Philippe Normand, Philippe Renon, Philipp
2150 Zabel, Pieter Willem Jordaan, Piotr Drąg, Ralf Sippl, Randy Li, Rasmus
2151 Thomsen, Ratchanan Srirattanamet, Raul Tambre, Ray Tiley, Richard
2152 Kreckel, Rico Tzschichholz, R Kh, Robert Rosengren, Robert Tiemann,
2153 Roman Shpuntov, Roman Sivriver, Ruben Gonzalez, Rubén Gonzalez,
2154 rubenrua, Ryan Huang, Sam Gigliotti, Santiago Carot-Nemesio, Saunier
2155 Thibault, Scott Kanowitz, Sebastian Dröge, Sebastiano Barrera, Seppo
2156 Yli-Olli, Sergey Nazaryev, Seungha Yang, Shinya Saito, Silvio
2157 Lazzeretti, Simon Arnling Bååth, Siwon Kang, sohwan.park, Song Bing,
2158 Soohyun Lee, Srimanta Panda, Stefano Buora, Stefan Sauer, Stéphane
2159 Cerveau, Stian Selnes, Sumaid Syed, Swayamjeet, Thiago Santos, Thibault
2160 Saunier, Thomas Bluemel, Thomas Coldrick, Thor Andreassen, Tim-Philipp
2161 Müller, Ting-Wei Lan, Tobias Ronge, trilene, Tulio Beloqui, U. Artie
2162 Eoff, VaL Doroshchuk, Varunkumar Allagadapa, Vedang Patel, Veerabadhran
2163 G, Víctor Manuel Jáquez Leal, Vivek R, Vivia Nikolaidou, Wangfei, Wang
2164 Zhanjun, Wim Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier
2165 Claessens, Xidorn Quan, Xu Guangxin, Yan Wang, Yatin Maan, Yeongjin
2166 Jeong, yychao, Zebediah Figura, Zeeshan Ali, Zeid Bekli, Zhiyuan Sraf,
2167 Zoltán Imets,
2168
2169 … and many others who have contributed bug reports, translations, sent
2170 suggestions or helped testing.
2171
2172 Stable 1.18 branch
2173
2174 After the 1.18.0 release there will be several 1.18.x bug-fix releases
2175 which will contain bug fixes which have been deemed suitable for a
2176 stable branch, but no new features or intrusive changes will be added to
2177 a bug-fix release usually. The 1.18.x bug-fix releases will be made from
2178 the git 1.18 branch, which will be a stable branch.
2179
2180 1.18.0
2181
2182 1.18.0 was released on 7 September 2020.
2183
2184 Schedule for 1.20
2185
2186 Our next major feature release will be 1.20, and 1.19 will be the
2187 unstable development version leading up to the stable 1.20 release. The
2188 development of 1.19/1.20 will happen in the git master branch.
2189
2190 The plan for the 1.20 development cycle is yet to be confirmed, but it
2191 is now expected that feature freeze will take place some time in January
2192 2021, with the first 1.20 stable release around February/March 2021.
2193
2194 1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
2195 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
2196
2197 ------------------------------------------------------------------------
2198
2199 These release notes have been prepared by Tim-Philipp Müller with
2200 contributions from Mathieu Duponchelle, Matthew Waters, Nirbheek
2201 Chauhan, Sebastian Dröge, Thibault Saunier, and Víctor Manuel Jáquez
2202 Leal.
2203
2204 License: CC BY-SA 4.0