-- video nerds will be thrilled to know that `videotestsrc`'s snow is now
- deterministic. `videotestsrc` also gained some new properties to make the
- ball pattern based on system time, and invert colours each second
- (`"animation-mode"`, `"motion"`, and `"flip"` properties).
-
-- `oggdemux` reverse playback should work again now. You're welcome.
-
-- `playbin3` and `urisourcebin` now have buffering enabled by default, and
- buffering message aggregation was fixed.
-
-- `tcpclientsrc` now has a `"timeout"` property
-
-- `appsink` has gained support for buffer lists. For backwards compatibility
- reasons users need to enable this explicitly with `gst_app_sink_set_buffer_list_support()`,
- however. Once activated, a pulled `GstSample` can contain either a buffer
- list or a single buffer.
-
-- `splitmuxsrc` reverse playback was fixed and handling of sparse streams, such
- as subtitle tracks or metadata tracks, was improved.
-
-- `matroskamux` has acquired support for muxing G722 audio; it also marks all
- buffers as keyframes now when streaming only audio, so that `tcpserversink`
- will behave properly with audio-only streams.
-
-- `qtmux` gained support for ProRes 4444 XQ, HEVC/H.265 and CineForm (GoPro) formats,
- and generally writes more video stream-related metadata into the track headers.
- It is also allows configuration of the maximum interleave size in bytes and
- time now. For fragmented mp4 we always write the `tfdt` atom now as required
- by the DASH spec.
-
-- `qtdemux` supports FLAC, xvid, mp2, S16L and CineForm (GoPro) tracks now, and
- generally tries harder to extract more video-related information from track
- headers, such as colorimetry or interlacing details. It also received a
- couple of fixes for the scenario where upstream operates in TIME format and
- feeds chunks to qtdemux (e.g. DASH or MSE).
-
-- `audioecho` has two new properties to apply a delay only to certain channels
- to create a surround effect, rather than an echo on all channels. This is
- useful when upmixing from stereo, for example. The `"surround-delay"` property
- enables this, and the `"surround-mask"` property controls which channels
- are considered surround sound channels in this case.
-
-- `webrtcdsp` gained various new properties for gain control and also exposes
- voice activity detection now, in which case it will post `"voice-activity"`
- messages on the bus whenever the voice detection status changes.
-
-- The `decklink` capture elements for Blackmagic Decklink cards have seen a
- number of improvements:
-
- - `decklinkvideosrc` will post a warning message on "no signal" and an info
- message when the signal lock has been (re)acquired. There is also a new
- read-only `"signal"` property that can be used to query the signal lock
- status. The `GAP` flag will be set on buffers that are captured without
- a signal lock. The new `drop-no-signal-frames` will make `decklinkvideosrc`
- drop all buffers that have been captured without an input signal. The
- `"skip-first-time"` property will make the source drop the first few
- buffers, which is handy since some devices will at first output buffers
- with the wrong resolution before they manage to figure out the right input
- format and decide on the actual output caps.
-
- - `decklinkaudiosrc` supports more than just 2 audio channels now.
-
- - The capture sources no longer use the "hardware" timestamps which turn
- out to be useless and instead just use the pipeline clock directly.
-
-- `srtpdec` now also has a readonly `"stats"` property, just like `srtpenc`.
-
-- `rtpbin` gained RTP bundle support, as used by e.g. WebRTC. The first
- rtpsession will have a `rtpssrcdemux` element inside splitting the streams
- based on their SSRC and potentially dispatch to a different rtpsession.
- Because retransmission SSRCs need to be merged with the corresponding media
- stream the `::on-bundled-ssrc` signal is emitted on `rtpbin` so that the
- application can find out to which session the SSRC belongs.
-
-- `rtprtxqueue` gained two new properties exposing retransmission
- statistics (`"requests"` and `"fulfilled-requests"`)
-
-- `kmssink` will now use the preferred mode for the monitor and render to the
- base plane if nothing else has set a mode yet. This can also be done forcibly
- in any case via the new `"force-modesetting"` property. Furthermore, `kmssink`
- now allows only the supported connector resolutions as input caps in order to
- avoid scaling or positioning of the input stream, as `kmssink` can't know
- whether scaling or positioning would be more appropriate for the use case at
- hand.
-
-- `waylandsink` can now take DMAbuf buffers as input in the presence
- of a compatible Wayland compositor. This enables zero-copy transfer
- from a decoder or source that outputs DMAbuf.
-
-- `udpsrc` can be bound to more than one interface when joining a
- multicast group, this is done by giving a comma separate list of
- interfaces such as multicast-iface="eth0,eth1".
-
-### Plugin moves
-
-- `dataurisrc` moved from gst-plugins-bad to core
-
-- The `rawparse` plugin containing the `rawaudioparse` and `rawvideoparse`
- elements moved from gst-plugins-bad to gst-plugins-base. These elements
- supersede the old `videoparse` and `audioparse` elements. They work the
- same, with just some minor API changes. The old legacy elements still
- exist in gst-plugins-bad, but may be removed at some point in the future.
-
-- `timecodestamper` is an element that attaches time codes to video buffers
- in form of `GstVideoTimeCodeMeta`s. It had a `"clock-source"` property
- which has now been removed because it was fairly useless in practice. It
- gained some new properties however: the `"first-timecode"` property can
- be used to set the inital timecode; alternatively `"first-timecode-to-now"`
- can be set, and then the current system time at the time the first buffer
- arrives is used as base time for the time codes.
-
-
-### Plugin removals
-
-- The `mad` mp1/mp2/mp3 decoder plugin was removed from gst-plugins-ugly,
- as libmad is GPL licensed, has been unmaintained for a very long time, and
- there are better alternatives available. Use the `mpg123audiodec` element
- from the `mpg123` plugin in gst-plugins-ugly instead, or `avdec_mp3` from
- the `gst-libav` module which wraps the ffmpeg library. We expect that we
- will be able to move mp3 decoding to gst-plugins-good in the next cycle
- seeing that most patents around mp3 have expired recently or are about to
- expire.
-
-- The `mimic` plugin was removed from gst-plugins-bad. It contained a decoder
- and encoder for a video codec used by MSN messenger many many years ago (in
- a galaxy far far away). The underlying library is unmaintained and no one
- really needs to use this codec any more. Recorded videos can still be played
- back with the MIMIC decoder in gst-libav.
-
-## Miscellaneous API additions
-
-- Request pad name templates passed to `gst_element_request_pad()` may now
- contain multiple specifiers, such as e.g. `src_%u_%u`.
-
-- [`gst_buffer_iterate_meta_filtered()`][buffer-iterate-meta-filtered] is a
- variant of `gst_buffer_iterate_meta()` that only returns metas of the
- requested type and skips all other metas.
-
-- [`gst_pad_task_get_state()`][pad-task-get-state] gets the current state of
- a task in a thread-safe way.
-
-- [`gst_uri_get_media_fragment_table()`][uri-get-fragment-table] provides the
- media fragments of an URI as a table of key=value pairs.
-
-- [`gst_print()`][print], [`gst_println()`][println], [`gst_printerr()`][printerr],
- and [`gst_printerrln()`][printerrln] can be used to print to stdout or stderr.
- These functions are similar to `g_print()` and `g_printerr()` but they also
- support all the additional format specifiers provided by the GStreamer
- logging system, such as e.g. `GST_PTR_FORMAT`.
-
-- a `GstParamSpecArray` has been added, for elements who want to have array
- type properties, such as the `audiomixmatrix` element for example. There are
- also two new functions to set and get properties of this type from bindings:
- - gst_util_set_object_array()
- - gst_util_get_object_array()
-
-- various helper functions have been added to make it easier to set or get
- GstStructure fields containing caps-style array or list fields from language
- bindings (which usually support GValueArray but don't know about the GStreamer
- specific fundamental types):
- - [`gst_structure_get_array()`][get-array]
- - [`gst_structure_set_array()`][set-array]
- - [`gst_structure_get_list()`][get-list]
- - [`gst_structure_set_list()`][set-list]
-
-- a new ['dynamic type' registry factory type][dynamic-type] was added to
- register dynamically loadable GType types. This is useful for automatically
- loading enum/flags types that are used in caps, such as for example the
- `GstVideoMultiviewFlagsSet` type used in multiview video caps.
-
-- there is a new [`GstProxyControlBinding`][proxy-control-binding] for use
- with GstController. This allows proxying the control interface from one
- property on one GstObject to another property (of the same type) in another
- GstObject. So e.g. in parent-child relationship, one may need to call
- `gst_object_sync_values()` on the child and have a binding (set elsewhere)
- on the parent update the value. This is used in `glvideomixer` and `glsinkbin`
- for example, where `sync_values()` on the child pad or element will call
- `sync_values()` on the exposed bin pad or element.
-
- Note that this doesn't solve GObject property forwarding, that must
- be taken care of by the implementation manually or using GBinding.
-
-- `gst_base_parse_drain()` has been made public for subclasses to use.
-
-- `gst_base_sink_set_drop_out_of_segment()' can be used by subclasses to
- prevent GstBaseSink from dropping buffers that fall outside of the segment.
-
-- [`gst_calculate_linear_regression()`][calc-lin-regression] is a new utility
- function to calculate a linear regression.
-
-- [`gst_debug_get_stack_trace`][get-stack-trace] is an easy way to retrieve a
- stack trace, which can be useful in tracer plugins.
-
-- allocators: the dmabuf allocator is now sub-classable, and there is a new
- `GST_CAPS_FEATURE_MEMORY_DMABUF` define.
-
-- video decoder subclasses can use the newly-added function
- `gst_video_decoder_allocate_output_frame_with_params()` to
- pass a `GstBufferPoolAcquireParams` to the buffer pool for
- each buffer allocation.
-
-- the video time code API has gained a dedicated [`GstVideoTimeCodeInterval`][timecode-interval]
- type plus related API, including functions to add intervals to timecodes.
-
-- There is a new `libgstbadallocators-1.0` library in gst-plugins-bad, which
- may go away again in future releases once the `GstPhysMemoryAllocator`
- interface API has been validated by more users and was moved to
- `libgstallocators-1.0` from gst-plugins-base.
-
-[timecode-interval]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#gst-video-time-code-interval-new
-[buffer-iterate-meta-filtered]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-iterate-meta-filtered
-[pad-task-get-state]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-task-get-state
-[uri-get-fragment-table]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUri.html#gst-uri-get-media-fragment-table
-[print]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-print
-[println]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-println
-[printerr]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-printerr
-[printerrln]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-printerrln
-[get-array]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-get-array
-[set-array]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-set-array
-[get-list]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-get-list
-[set-list]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-set-list
-[dynamic-type]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstDynamicTypeFactory.html
-[proxy-control-binding]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstProxyControlBinding.html
-[calc-lin-regression]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUtils.html#gst-calculate-linear-regression
-[get-stack-trace]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUtils.html#gst-debug-get-stack-trace
-
-### GstPlayer