gstpad: Probes that return HANDLED can reset the data info field
[platform/upstream/gstreamer.git] / NEWS
diff --git a/NEWS b/NEWS
index 547de7f..816a3aa 100644 (file)
--- a/NEWS
+++ b/NEWS
-# GStreamer 1.10 Release Notes
 
-**GStreamer 1.10.0 was released on 1st November 2016.**
 
-The GStreamer team is proud to announce a new major feature release in the
-stable 1.x API series of your favourite cross-platform multimedia framework!
+GSTREAMER 1.16 RELEASE NOTES
 
-As always, this release is again packed with new features, bug fixes and other
-improvements.
 
-See [https://gstreamer.freedesktop.org/releases/1.10/][latest] for the latest
+GStreamer 1.16.0 was originally released on 19 April 2019.
+
+See https://gstreamer.freedesktop.org/releases/1.16/ for the latest
 version of this document.
 
-*Last updated: Tuesday 1 Nov 2016, 15:00 UTC [(log)][gitlog]*
-
-[latest]: https://gstreamer.freedesktop.org/releases/1.10/
-[gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.10/release-notes-1.10.md
-
-## Introduction
-
-The GStreamer team is proud to announce a new major feature release in the
-stable 1.x API series of your favourite cross-platform multimedia framework!
-
-As always, this release is again packed with new features, bug fixes and other
-improvements.
-
-## Highlights
-
-- Several convenience APIs have been added to make developers' lives easier
-- A new `GstStream` API provides applications a more meaningful view of the
-  structure of streams, simplifying the process of dealing with media in
-  complex container formats
-- Experimental `decodebin3` and `playbin3` elements which bring a number of
-  improvements which were hard to implement within `decodebin` and `playbin`
-- A new `parsebin` element to automatically unpack and parse a stream, stopping
-  just short of decoding
-- Experimental new `meson`-based build system, bringing faster build and much
-  better Windows support (including for building with Visual Studio)
-- A new `gst-docs` module has been created, and we are in the process of moving
-  our documentation to a markdown-based format for easier maintenance and
-  updates
-- A new `gst-examples` module has been create, which contains example
-  GStreamer applications and is expected to grow with many more examples in
-  the future
-- Various OpenGL and OpenGL|ES-related fixes and improvements for greater
-  efficiency on desktop and mobile platforms, and Vulkan support on Wayland was
-  also added
-- Extensive improvements to the VAAPI plugins for improved robustness and
-  efficiency
-- Lots of fixes and improvements across the board, spanning RTP/RTSP, V4L2,
-  Bluetooth, audio conversion, echo cancellation, and more!
-
-## Major new features and changes
-
-### Noteworthy new API, features and other changes
-
-#### Core API additions
-
-##### Receive property change notifications via bus messages
-
-New API was added to receive element property change notifications via
-bus messages. So far, applications had to connect a callback to an element's
-`notify::property-name` signal via the GObject API, which was inconvenient for
-at least two reasons: one had to implement a signal callback function, and that
-callback function would usually be called from one of the streaming threads, so
-one had to marshal (send) any information gathered or pending requests to the
-main application thread which was tedious and error-prone.
-
-Enter [`gst_element_add_property_notify_watch()`][notify-watch] and
-[`gst_element_add_property_deep_notify_watch()`][deep-notify-watch] which will
-watch for changes of a property on the specified element, either only for this
-element or recursively for a whole bin or pipeline. Whenever such a
-property change happens, a `GST_MESSAGE_PROPERTY_NOTIFY` message will be posted
-on the pipeline bus with details of the element, the property and the new
-property value, all of which can be retrieved later from the message in the
-application via [`gst_message_parse_property_notify()`][parse-notify]. Unlike
-the GstBus watch functions, this API does not rely on a running GLib main loop.
-
-The above can be used to be notified asynchronously of caps changes in the
-pipeline, or volume changes on an audio sink element, for example.
-
-[notify-watch]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-add-property-notify-watch
-[deep-notify-watch]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-add-property-deep-notify-watch
-[parse-notify]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-parse-property-notify
-
-##### GstBin "deep" element-added and element-removed signals
-
-GstBin has gained `"deep-element-added"` and `"deep-element-removed"` signals
-which makes it easier for applications and higher-level plugins to track when
-elements are added or removed from a complex pipeline with multiple sub-bins.
-
-`playbin` makes use of this to implement the new `"element-setup"` signal which
-can be used to configure elements as they are added to `playbin`, just like the
-existing `"source-setup"` signal which can be used to configure the source
-element created.
-
-##### Error messages can contain additional structured details
-
-It is often useful to provide additional, structured information in error,
-warning or info messages for applications (or higher-level elements) to make
-intelligent decisions based on them. To allow this, error, warning and info
-messages now have API for adding arbitrary additional information to them
-using a `GstStructure`:
-[`GST_ELEMENT_ERROR_WITH_DETAILS`][element-error-with-details] and
-corresponding API for the other message types.
-
-This is now used e.g. by the new [`GST_ELEMENT_FLOW_ERROR`][element-flow-error]
-API to include the actual flow error in the error message, and the
-[souphttpsrc element][souphttpsrc-detailed-errors] to provide the HTTP
-status code, and the URL (if any) to which a redirection has happened.
+_Last updated: Friday 19 April 2019, 00:00 UTC (log)_
 
-[element-error-with-details]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-ELEMENT-ERROR-WITH-DETAILS:CAPS
-[element-flow-error]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-ELEMENT-FLOW-ERROR:CAPS
-[souphttpsrc-detailed-errors]: https://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/ext/soup/gstsouphttpsrc.c?id=60d30db912a1aedd743e66b9dcd2e21d71fbb24f#n1318
-
-##### Redirect messages have official API now
-
-Sometimes, elements need to redirect the current stream URL and tell the
-application to proceed with this new URL, possibly using a different
-protocol too (thus changing the pipeline configuration). Until now, this was
-informally implemented using `ELEMENT` messages on the bus.
-
-Now this has been formalized in the form of a new `GST_MESSAGE_REDIRECT` message.
-A new redirect message can be created using [`gst_message_new_redirect()`][new-redirect].
-If needed, multiple redirect locations can be specified by calling
-[`gst_message_add_redirect_entry()`][add-redirect] to add further redirect
-entries, all with metadata, so the application can decide which is
-most suitable (e.g. depending on the bitrate tags).
-
-[new-redirect]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-redirect
-[add-redirect]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-add-redirect-entry
-
-##### New pad linking convenience functions that automatically create ghost pads
-
-New pad linking convenience functions were added:
-[`gst_pad_link_maybe_ghosting()`][pad-maybe-ghost] and
-[`gst_pad_link_maybe_ghosting_full()`][pad-maybe-ghost-full] which were
-previously internal to GStreamer have now been exposed for general use.
-
-The existing pad link functions will refuse to link pads or elements at
-different levels in the pipeline hierarchy, requiring the developer to
-create ghost pads where necessary. These new utility functions will
-automatically create ghostpads as needed when linking pads at different
-levels of the hierarchy (e.g. from an element inside a bin to one that's at
-the same level in the hierarchy as the bin, or in another bin).
-
-[pad-maybe-ghost]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-link-maybe-ghosting
-[pad-maybe-ghost-full]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-link-maybe-ghosting-full
-
-##### Miscellaneous
-
-Pad probes: IDLE and BLOCK probes now work slightly differently in pull mode,
-so that push and pull mode have opposite scenarios for idle and blocking probes.
-In push mode, it will block with some data type and IDLE won't have any data.
-In pull mode, it will block _before_ getting a buffer and will be IDLE once some
-data has been obtained. ([commit][commit-pad-probes], [bug][bug-pad-probes])
-
-[commit-pad-probes]: https://cgit.freedesktop.org/gstreamer/gstreamer/commit/gst/gstpad.c?id=368ee8a336d0c868d81fdace54b24431a8b48cbf
-[bug-pad-probes]: https://bugzilla.gnome.org/show_bug.cgi?id=761211
-
-[`gst_parse_launch_full()`][parse-launch-full] can now be made to return a
-`GstBin` instead of a top-level pipeline by passing the new
-`GST_PARSE_FLAG_PLACE_IN_BIN` flag.
-
-[parse-launch-full]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch-full
-
-The default GStreamer debug log handler can now be removed before
-calling `gst_init()`, so that it will never get installed and won't be active
-during initialization.
-
-A new [`STREAM_GROUP_DONE` event][stream-group-done-event] was added. In some
-ways it works similar to the `EOS` event in that it can be used to unblock
-downstream elements which may be waiting for further data, such as for example
-`input-selector`. Unlike `EOS`, further data flow may happen after the
-`STREAM_GROUP_DONE` event though (and without the need to flush the pipeline).
-This is used to unblock input-selector when switching between streams in
-adaptive streaming scenarios (e.g. HLS).
-
-[stream-group-done-event]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-new-stream-group-done
-
-The `gst-launch-1.0` command line tool will now print unescaped caps in verbose
-mode (enabled by the -v switch).
-
-[`gst_element_call_async()`][call-async] has been added as convenience API for
-plugin developers. It is useful for one-shot operations that need to be done
-from a thread other than the current streaming thread. It is backed by a
-thread-pool that is shared by all elements.
-
-[call-async]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-call-async
-
-Various race conditions have been fixed around the `GstPoll` API used by e.g.
-`GstBus` and `GstBufferPool`. Some of these manifested themselves primarily
-on Windows.
-
-`GstAdapter` can now keep track of discontinuities signalled via the `DISCONT`
-buffer flag, and has gained [new API][new-adapter-api] to track PTS, DTS and
-offset at the last discont. This is useful for plugins implementing advanced
-trick mode scenarios.
-
-[new-adapter-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-pts-at-discont
-
-`GstTestClock` gained a new [`"clock-type"` property][clock-type-prop].
-
-[clock-type-prop]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#GstTestClock--clock-type
-
-#### GstStream API for stream announcement and stream selection
-
-New stream listing and stream selection API: new API has been added to
-provide high-level abstractions for streams ([`GstStream`][stream-api])
-and collections of streams ([`GstStreamCollections`][stream-collection-api]).
-
-##### Stream listing
-
-A [`GstStream`][stream-api] contains all the information pertinent to a stream,
-such as stream id, caps, tags, flags and stream type(s); it can represent a
-single elementary stream (e.g. audio, video, subtitles, etc.) or a container
-stream. This will depend on the context. In a decodebin3/playbin3 one
-it will typically be elementary streams that can be selected and unselected.
-
-A [`GstStreamCollection`][stream-collection-api] represents a group of streams
-and is used to announce or publish all available streams. A GstStreamCollection
-is immutable - once created it won't change. If the available streams change,
-e.g. because a new stream appeared or some streams disappeared, a new stream
-collection will be published. This new stream collection may contain streams
-from the previous collection if those streams persist, or completely new ones.
-Stream collections do not yet list all theoretically available streams,
-e.g. other available DVD angles or alternative resolutions/bitrate of the same
-stream in case of adaptive streaming.
-
-New events and messages have been added to notify or update other elements and
-the application about which streams are currently available and/or selected.
-This way, we can easily and seamlessly let the application know whenever the
-available streams change, as happens frequently with digital television streams
-for example. The new system is also more flexible. For example, it is now also
-possible for the application to select multiple streams of the same type
-(e.g. in a transcoding/transmuxing scenario).
-
-A [`STREAM_COLLECTION` message][stream-collection-msg] is posted on the bus
-to inform the parent bin (e.g. `playbin3`, `decodebin3`) and/or the application
-about what streams are available, so you no longer have to hunt for this
-information at different places. The available information includes number of
-streams of each type, caps, tags etc.  Bins and/or the application can intercept
-the message synchronously to select and deselect streams before any data is
-produced - for the case where elements such as the demuxers support the new
-stream API, not necessarily in the parsebin compatibility fallback case.
-
-Similarly, there is also a [`STREAM_COLLECTION` event][stream-collection-event]
-to inform downstream elements of the available streams. This event can be used
-by elements to aggregate streams from multiple inputs into one single collection.
-
-The `STREAM_START` event was extended so that it can also contain a GstStream
-object with all information about the current stream, see
-[`gst_event_set_stream()`][event-set-stream] and
-[`gst_event_parse_stream()`][event-parse-stream].
-[`gst_pad_get_stream()`][pad-get-stream] is a new utility function that can be
-used to look up the GstStream from the `STREAM_START` sticky event on a pad.
-
-[stream-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStream.html
-[stream-collection-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStreamCollection.html
-[stream-collection-msg]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-stream-collection
-[stream-collection-event]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-new-stream-collection
-[event-set-stream]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-set-stream
-[event-parse-stream]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-parse-stream
-[pad-get-stream]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-stream
-
-##### Stream selection
-
-Once the available streams have been published, streams can be selected via
-their stream ID using the new `SELECT_STREAMS` event, which can be created
-with [`gst_event_new_select_streams()`][event-select-streams]. The new API
-supports selecting multiple streams per stream type. In the future, we may also
-implement explicit deselection of streams that will never be used, so
-elements can skip these and never expose them or output data for them in the
-first place.
-
-The application is then notified of the currently selected streams via the
-new `STREAMS_SELECTED` message on the pipeline bus, containing both the current
-stream collection as well as the selected streams. This might be posted in
-response to the application sending a `SELECT_STREAMS` event or when
-`decodebin3` or `playbin3` decide on the streams to be initially selected without
-application input.
-
-[event-select-streams]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-new-select-streams
-
-##### Further reading
-
-See further below for some notes on the new elements supporting this new
-stream API, namely: `decodebin3`, `playbin3` and `parsebin`.
-
-More information about the new API and the new elements can also be found here:
-
-- GStreamer [stream selection design docs][streams-design]
-- Edward Hervey's talk ["The new streams API: Design and usage"][streams-talk] ([slides][streams-slides])
-- Edward Hervey's talk ["Decodebin3: Dealing with modern playback use cases"][db3-talk] ([slides][db3-slides])
-
-[streams-design]: https://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-stream-selection.txt
-[streams-talk]: https://gstconf.ubicast.tv/videos/the-new-gststream-api-design-and-usage/
-[streams-slides]: https://gstreamer.freedesktop.org/data/events/gstreamer-conference/2016/Edward%20Hervey%20-%20The%20New%20Streams%20API%20Design%20and%20Usage.pdf
-[db3-talk]: https://gstconf.ubicast.tv/videos/decodebin3-or-dealing-with-modern-playback-use-cases/
-[db3-slides]: https://gstreamer.freedesktop.org/data/events/gstreamer-conference/2015/Edward%20Hervey%20-%20decodebin3.pdf
-
-#### Audio conversion and resampling API
-
-The audio conversion library received a completely new and rewritten audio
-resampler, complementing the audio conversion routines moved into the audio
-library in the [previous release][release-notes-1.8]. Integrating the resampler
-with the other audio conversion library allows us to implement generic
-conversion much more efficiently, as format conversion and resampling can now
-be done in the same processing loop instead of having to do it in separate
-steps (our element implementations do not make use of this yet though).
-
-The new audio resampler library is a combination of some of the best features
-of other samplers such as ffmpeg, speex and SRC. It natively supports S16, S32,
-F32 and F64 formats and uses optimized x86 and neon assembly for most of its
-processing. It also has support for dynamically changing sample rates by incrementally
-updating the filter tables using linear or cubic interpolation. According to
-some benchmarks, it's one of the fastest and most accurate resamplers around.
-
-The `audioresample` plugin has been ported to the new audio library functions
-to make use of the new resampler.
-
-[release-notes-1.8]: https://gstreamer.freedesktop.org/releases/1.8/
-
-#### Support for SMPTE timecodes
-
-Support for SMPTE timecodes was added to the GStreamer video library. This
-comes with an abstraction for timecodes, [`GstVideoTimeCode`][video-timecode]
-and a [`GstMeta`][video-timecode-meta] that can be placed on video buffers for
-carrying the timecode information for each frame. Additionally there is
-various API for making handling of timecodes easy and to do various
-calculations with them.
-
-A new plugin called [`timecode`][timecode-plugin] was added, that contains an
-element called `timecodestamper` for putting the timecode meta on video frames
-based on counting the frames and another element called `timecodewait` that
-drops all video (and audio) until a specific timecode is reached.
-
-Additionally support was added to the Decklink plugin for including the
-timecode information when sending video out or capturing it via SDI, the
-`qtmux` element is able to write timecode information into the MOV container,
-and the `timeoverlay` element can overlay timecodes on top of the video.
-
-More information can be found in the [talk about timecodes][timecode-talk] at
-the GStreamer Conference 2016.
-
-[video-timecode]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoTimeCode
-[video-timecode-meta]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-time-code-meta
-[timecode-plugin]: https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/gst/timecode
-[timecode-talk]: https://gstconf.ubicast.tv/videos/smpte-timecodes-in-gstreamer/
-
-#### GStreamer OpenMAX IL plugin
-
-The last gst-omx release, 1.2.0, was in July 2014. It was about time to get
-a new one out with all the improvements that have happened in the meantime.
-From now on, we will try to release gst-omx together with all other modules.
-
-This release features a lot of bugfixes, improved support for the Raspberry Pi
-and in general improved support for zerocopy rendering via EGL and a few minor
-new features.
-
-At this point, gst-omx is known to work best on the Raspberry Pi platform but
-it is also known to work on various other platforms. Unfortunately, we are
-not including configurations for any other platforms, so if you happen to use
-gst-omx: please send us patches with your configuration and code changes!
-
-### New Elements
-
-#### decodebin3, playbin3, parsebin (experimental)
-
-This release features new decoding and playback elements as experimental
-technology previews: `decodebin3` and `playbin3` will soon supersede the
-existing `decodebin` and `playbin` elements. We skipped the number 2 because
-it was already used back in the 0.10 days, which might cause confusion.
-Experimental technology preview means that everything should work fine already,
-but we can't guarantee there won't be minor behavioural changes in the
-next cycle. In any case, please test and report any problems back.
-
-Before we go into detail about what these new elements improve, let's look at
-the new [`parsebin`][parsebin] element. It works similarly to `decodebin` and
-`decodebin3`, only that it stops one step short and does not plug any actual
-decoder elements. It will only plug parsers, tag readers, demuxers and
-depayloaders. Also note that parsebin does not contain any queueing element.
-
-[`decodebin3`'s][decodebin3] internal architecture is slightly different from
-the existing `decodebin` element and fixes many long-standing issues with our
-decoding engine. For one, data is now fed into the internal `multiqueue` element
-*after* it has been parsed and timestamped, which means that the `multiqueue`
-element now has more knowledge and is able to calculate the interleaving of the
-various streams, thus minimizing memory requirements and doing away with magic
-values for buffering limits that were conceived when videos were 240p or 360p.
-Anyone who has tried to play back 4k video streams with decodebin2
-will have noticed the limitations of that approach. The improved timestamp
-tracking also enables `multiqueue` to keep streams of the same type (audio,
-video) aligned better, making sure switching between streams of the same type
-is very fast.
-
-Another major improvement in `decodebin3` is that it will no longer decode
-streams that are not being used. With the old `decodebin` and `playbin`, when
-there were 8 audio streams we would always decode all 8 streams even
-if 7 were not actually used. This caused a lot of CPU overhead, which was
-particularly problematic on embedded devices. When switching between streams
-`decodebin3` will try hard to re-use existing decoders. This is useful when
-switching between multiple streams of the same type if they are encoded in the
-same format.
-
-Re-using decoders is also useful when the available streams change on the fly,
-as might happen with radio streams (chained Oggs), digital television
-broadcasts, when adaptive streaming streams change bitrate, or when switching
-gaplessly to the next title. In order to guarantee a seamless transition, the
-old `decodebin2` would plug a second decoder for the new stream while finishing
-up the old stream. With `decodebin3`, this is no longer needed - at least not
-when the new and old format are the same. This will be particularly useful
-on embedded systems where it is often not possible to run multiple decoders
-at the same time, or when tearing down and setting up decoders is fairly
-expensive.
-
-`decodebin3` also allows for multiple input streams, not just a single one.
-This will be useful, in the future, for gapless playback, or for feeding
-multiple external subtitle streams to decodebin/playbin.
-
-`playbin3` uses `decodebin3` internally, and will supercede `playbin`.
-It was decided that it would be too risky to make the old `playbin` use the
-new `decodebin3` in a backwards-compatible way. The new architecture
-makes it awkward, if not impossible, to maintain perfect backwards compatibility
-in some aspects, hence `playbin3` was born, and developers can migrate to the
-new element and new API at their own pace.
-
-All of these new elements make use of the new `GstStream` API for listing and
-selecting streams, as described above. `parsebin` provides backwards
-compatibility for demuxers and parsers which do not advertise their streams
-using the new API yet (which is most).
-
-The new elements are not entirely feature-complete yet: `playbin3` does not
-support so-called decodersinks yet where the data is not decoded inside
-GStreamer but passed directly for decoding to the sink. `decodebin3` is missing
-the various `autoplug-*` signals to influence which decoders get autoplugged
-in which order. We're looking to add back this functionality, but it will probably
-be in a different way, with a single unified signal and using GstStream perhaps.
-
-For more information on these new elements, check out Edward Hervey's talk
-[*decodebin3 - dealing with modern playback use cases*][db3-talk]
-
-[parsebin]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-parsebin.html
-[decodebin3]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-decodebin3.html
-[db3-talk]: https://gstconf.ubicast.tv/videos/decodebin3-or-dealing-with-modern-playback-use-cases/
-
-#### LV2 ported from 0.10 and switched from slv2 to lilv2
-
-The LV2 wrapper plugin has been ported to 1.0 and moved from using the
-deprecated slv2 library to its replacement liblv2. We support sources and
-filter elements. lv2 is short for *Linux Audio Developer's Simple Plugin API
-(LADSPA) version 2* and is an open standard for audio plugins which includes
-support for audio synthesis (generation), digital signal processing of digital
-audio, and MIDI. The new lv2 plugin supersedes the existing LADSPA plugin.
-
-#### WebRTC DSP Plugin for echo-cancellation, gain control and noise suppression
-
-A set of new elements ([webrtcdsp][webrtcdsp], [webrtcechoprobe][webrtcechoprobe])
-based on the WebRTC DSP software stack can now be used to improve your audio
-voice communication pipelines. They support echo cancellation, gain control,
-noise suppression and more. For more details you may read
-[Nicolas' blog post][webrtc-blog-post].
-
-[webrtcdsp]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-webrtcdsp.html
-[webrtcechoprobe]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-webrtcechoprobe.html
-[webrtc-blog-post]: https://ndufresne.ca/2016/06/gstreamer-echo-canceller/
-
-#### Fraunhofer FDK AAC encoder and decoder
-
-New encoder and decoder elements wrapping the Fraunhofer FDK AAC library have
-been added (`fdkaacdec`, `fdkaacdec`). The Fraunhofer FDK AAC encoder is
-generally considered to be a very high-quality AAC encoder, but unfortunately
-it comes under a non-free license with the option to obtain a paid, commercial
-license.
-
-### Noteworthy element features and additions
-
-#### Major RTP and RTSP improvements
-
-- The RTSP server and source element, as well as the RTP jitterbuffer now support
-  remote clock synchronization according to [RFC7273][https://tools.ietf.org/html/rfc7273].
-- Support for application and profile specific RTCP packets was added.
-- The H265/HEVC payloader/depayloader is again in sync with the final RFC.
-- Seeking stability of the RTSP source and server was improved a lot and
-  runs stably now, even when doing scrub-seeking.
-- The RTSP server received various major bugfixes, including for regressions that
-  caused the IP/port address pool to not be considered, or NAT hole punching
-  to not work anymore. [Bugzilla #766612][https://bugzilla.gnome.org/show_bug.cgi?id=766612]
-- Various other bugfixes that improve the stability of RTP and RTSP, including
-  many new unit / integration tests.
-
-#### Improvements to splitmuxsrc and splitmuxsink
-
-- The splitmux element received reliability and error handling improvements,
-  removing at least one deadlock case. `splitmuxsrc` now stops cleanly at the end
-  of the segment when handling seeks with a stop time. We fixed a bug with large
-  amounts of downstream buffering causing incorrect out-of-sequence playback.
-
-- `splitmuxsrc` now has a `"format-location"` signal to directly specify the list
-  of files to play from.
-
-- `splitmuxsink` can now optionally send force-keyunit events to upstream
-  elements to allow splitting files more accurately instead of having to wait
-  for upstream to provide a new keyframe by itself.
-
-#### OpenGL/GLES improvements
-
-##### iOS and macOS (OS/X)
-
-- We now create OpenGL|ES 3.x contexts on iOS by default with a fallback to
-  OpenGL|ES 2.x if that fails.
-- Various zerocopy decoding fixes and enhancements with the
-  encoding/decoding/capturing elements.
-- libdispatch is now used on all Apple platforms instead of GMainLoop, removing
-  the expensive poll()/pthread_*() overhead.
-
-##### New API
-
-- `GstGLFramebuffer` - for wrapping OpenGL frame buffer objects.  It provides
-  facilities for attaching `GstGLMemory` objects to the necessary attachment
-  points, binding and unbinding and running a user-supplied function with the
-  framebuffer bound.
-- `GstGLRenderbuffer` (a `GstGLBaseMemory` subclass) - for wrapping OpenGL
-  render buffer objects that are typically used for depth/stencil buffers or
-  for color buffers where we don't care about the output.
-- `GstGLMemoryEGL` (a `GstGLMemory` subclass) - for combining `EGLImage`s with a GL
-  texture that replaces `GstEGLImageMemory` bringing the improvements made to the
-  other `GstGLMemory` implementations.  This fixes a performance regression in
-  zerocopy decoding on the Raspberry Pi when used with an updated gst-omx.
-
-##### Miscellaneous improvements
-
-- `gltestsrc` is now usable on devices/platforms with OpenGL 3.x and OpenGL|ES
-  and has completed or gained support for new patterns in line with the
-  existing ones in `videotestsrc`.
-- `gldeinterlace` is now available on devices/platforms with OpenGL|ES
-  implementations.
-- The dispmanx backend (used on the Raspberry Pi) now supports the
-  `gst_video_overlay_set_window_handle()` and
-  `gst_video_overlay_set_render_rectangle()` functions.
-- The `gltransformation` element now correctly transforms mouse coordinates (in
-  window space) to stream coordinates for both perspective and orthographic
-  projections.
-- The `gltransformation` element now detects if the
-  `GstVideoAffineTransformationMeta` is supported downstream and will efficiently
-  pass its transformation downstream. This is a performance improvement as it
-  results in less processing being required.
-- The wayland implementation now uses the multi-threaded safe event-loop API
-  allowing correct usage in applications that call wayland functions from
-  multiple threads.
-- Support for native 90 degree rotations and horizontal/vertical flips
-  in `glimagesink`.
-
-#### Vulkan
-
-- The Vulkan elements now work under Wayland and have received numerous
-  bugfixes.
-
-#### QML elements
-
-- `qmlglsink` video sink now works on more platforms, notably, Windows, Wayland,
-  and Qt's eglfs (for embedded devices with an OpenGL implementation) including
-  the Raspberry Pi.
-- New element `qmlglsrc` to record a QML scene into a GStreamer pipeline.
-
-#### KMS video sink
-
-- New element `kmssink` to render video using Direct Rendering Manager
-  (DRM) and Kernel Mode Setting (KMS) subsystems in the Linux
-  kernel. It is oriented to be used mostly in embedded systems.
-
-#### Wayland video sink
-
-- `waylandsink` now supports the wl_viewporter extension allowing
-  video scaling and cropping to be delegated to the Wayland
-  compositor. This extension is also been made optional, so that it can
-  also work on current compositors that don't support it. It also now has
-  support for the video meta, allowing zero-copy operations in more
-  cases.
-
-#### DVB improvements
-
-- `dvbsrc` now has better delivery-system autodetection and several
-  new parameter sanity-checks to improve its resilience to configuration
-  omissions and errors. Superfluous polling continues to be trimmed down,
-  and the debugging output has been made more consistent and precise.
-  Additionally, the channel-configuration parser now supports the new dvbv5
-  format, enabling `dvbbasebin` to automatically playback content transmitted
-  on delivery systems that previously required manual description, like ISDB-T.
-
-#### DASH, HLS and adaptivedemux
-
-- HLS now has support for Alternate Rendition audio and video tracks. Full
-  support for Alternate Rendition subtitle tracks will be in an upcoming release.
-- DASH received support for keyframe-only trick modes if the
-  `GST_SEEK_FLAG_TRICKMODE_KEY_UNITS` flag is given when seeking. It will
-  only download keyframes then, which should help with high-speed playback.
-  Changes to skip over multiple frames based on bandwidth and other metrics
-  will be added in the near future.
-- Lots of reliability fixes around seek handling and bitrate switching.
-
-#### Bluetooth improvements
-
-- The `avdtpsrc` element now supports metadata such as track title, artist
-  name, and more, which devices can send via AVRCP. These are published as
-  tags on the pipeline.
-- The `a2dpsink` element received some love and was cleaned up so that it
-  actually works after the initial GStreamer 1.0 port.
-
-#### GStreamer VAAPI
-
-- All the decoders have been split, one plugin feature per codec. So
-  far, the available ones, depending on the driver, are:
-  `vaapimpeg2dec`, `vaapih264dec`, `vaapih265dec`, `vaapivc1dec`, `vaapivp8dec`,
-  `vaapivp9dec` and `vaapijpegdec` (which already was split).
-- Improvements when mapping VA surfaces into memory. It now differentiates
-  between negotiation caps and allocations caps, since the allocation
-  memory for surfaces may be bigger than one that is going to be
-  mapped.
-- `vaapih265enc` now supports constant bitrate mode (CBR).
-- Since several VA drivers are unmaintained, we decide to keep a whitelist
-  with the va drivers we actually test, which is mostly the i915 and to a lesser
-  degree gallium from the mesa project. Exporting the environment variable
-  `GST_VAAPI_ALL_DRIVERS` disables the whitelist.
-- Plugin features are registered at run-time, according to their support by
-  the loaded VA driver. So only the decoders and encoder supported by the
-  system are registered. Since the driver can change, some dependencies are
-  tracked to invalidate the GStreamer registry and reload the plugin.
-- `dmabuf` importation from upstream has been improved, gaining performance.
-- `vaapipostproc` now can negotiate buffer transformations via caps.
-- Decoders now can do I-frame only reverse playback. This decodes I-frames
-  only because the surface pool is smaller than the required by the GOP to show all the
-  frames.
-- The upload of frames onto native GL textures has been optimized too, keeping
-  a cache of the internal structures for the offered textures by the sink.
-
-#### V4L2 changes
-
-- More pixels formats are now supported
-- Decoder is now using `G_SELECTION` instead of the deprecated `G_CROP`
-- Decoder now uses the `STOP` command to handle EOS
-- Transform element can now scale the pixel aspect ratio
-- Colorimetry support has been improved even more
-- We now support the `OUTPUT_OVERLAY` type of video node in v4l2sink
-
-#### Miscellaneous
-
-- `multiqueue`'s input pads gained a new `"group-id"` property which
-  can be used to group input streams. Typically one will assign
-  different id numbers to audio, video and subtitle streams for
-  example. This way `multiqueue` can make sure streams of the same
-  type advance in lockstep if some of the streams are unlinked and the
-  `"sync-by-running-time"` property is set. This is used in
-  decodebin3/playbin3 to implement almost-instantaneous stream
-  switching.  The grouping is required because different downstream
-  paths (audio, video, etc.)  may have different buffering/latency
-  etc. so might be consuming data from multiqueue with a slightly
-  different phase, and if we track different stream groups separately
-  we minimize stream switching delays and buffering inside the
-  `multiqueue`.
-- `alsasrc` now supports ALSA drivers without a position for each
-  channel, this is common in some professional or industrial hardware.
-- `libvpx` based decoders (`vp8dec` and `vp9dec`) now create multiple threads on
-  computers with multiple CPUs automatically.
-- `rfbsrc` - used for capturing from a VNC server - has seen a lot of
-  debugging. It now supports the latest version of the RFB
-  protocol and uses GIO everywhere.
-- `tsdemux` can now read ATSC E-AC-3 streams.
-- New `GstVideoDirection` video orientation interface for rotating, flipping
-  and mirroring video in 90° steps. It is implemented by the `videoflip` and
-  `glvideoflip` elements currently.
-- It is now possible to give `appsrc` a duration in time, and there is now a
-  non-blocking try-pull API for `appsink` that returns NULL if nothing is
-  available right now.
-- `x264enc` has support now for chroma-site and colorimetry settings
-- A new JPEG2000 parser element was added, and the JPEG2000 caps were cleaned
-  up and gained more information needed in combination with RTP and various
-  container formats.
-- Reverse playback support for `videorate` and `deinterlace` was implemented
-- Various improvements everywhere for reverse playback and `KEY_UNITS` trick mode
-- New cleaned up `rawaudioparse` and `rawvideoparse` elements that replace the
-  old `audioparse` and `videoparse` elements. There are compatibility element
-  factories registered with the old names to allow existing code to continue
-  to work.
-- The Decklink plugin gained support for 10 bit video SMPTE timecodes, and
-  generally got many bugfixes for various issues.
-- New API in `GstPlayer` for setting the multiview mode for stereoscopic
-  video, setting an HTTP/RTSP user agent and a time offset between audio and
-  video. In addition to that, there were various bugfixes and the new
-  gst-examples module contains Android, iOS, GTK+ and Qt example applications.
-- `GstBin` has new API for suppressing various `GstElement` or `GstObject`
-  flags that would otherwise be affected by added/removed child elements. This
-  new API allows `GstBin` subclasses to handle for themselves if they
-  should be considered a sink or source element, for example.
-- The `subparse` element can handle WebVTT streams now.
-- A new `sdpsrc` element was added that can read an SDP from a file, or get it
-  as a string as property and then sets up an RTP pipeline accordingly.
-
-### Plugin moves
-
-No plugins were moved this cycle. We'll make up for it next cycle, promise!
-
-### Rewritten memory leak tracer
-
-GStreamer has had basic functionality to trace allocation and freeing of
-both mini-objects (buffers, events, caps, etc.) and objects in the form of the
-internal `GstAllocTrace` tracing system. This API was never exposed in the
-1.x API series though. When requested, this would dump a list of objects and
-mini-objects at exit time which had still not been freed at that point,
-enabled with an environment variable. This subsystem has now been removed
-in favour of a new implementation based on the recently-added tracing framework.
-
-Tracing hooks have been added to trace the creation and destruction of
-GstObjects and mini-objects, and a new tracer plugin has been written using
-those new hooks to track which objects are still live and which are not. If
-GStreamer has been compiled against the libunwind library, the new leaks tracer
-will remember where objects were allocated from as well. By default the leaks
-tracer will simply output a warning if leaks have been detected on `gst_deinit()`.
-
-If the `GST_LEAKS_TRACER_SIG` environment variable is set, the leaks tracer
-will also handle the following UNIX signals:
-
- - `SIGUSR1`: log alive objects
- - `SIGUSR2`: create a checkpoint and print a list of objects created and
-   destroyed since the previous checkpoint.
-
-Unfortunately this will not work on Windows due to no signals, however.
-
-If the `GST_LEAKS_TRACER_STACK_TRACE` environment variable is set, the leaks
-tracer will also log the creation stack trace of leaked objects. This may
-significantly increase memory consumption however.
-
-New `MAY_BE_LEAKED` flags have been added to GstObject and GstMiniObject, so
-that objects and mini-objects that are likely to stay around forever can be
-flagged and blacklisted from the leak output.
-
-To give the new leak tracer a spin, simply call any GStreamer application such
-as `gst-launch-1.0` or `gst-play-1.0` like this:
-
-    GST_TRACERS=leaks gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
-
-If there are any leaks, a warning will be raised at the end.
-
-It is also possible to trace only certain types of objects or mini-objects:
-
-    GST_TRACERS="leaks(GstEvent,GstMessage)" gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
-
-This dedicated leaks tracer is much much faster than valgrind since all code is
-executed natively instead of being instrumented. This makes it very suitable
-for use on slow machines or embedded devices. It is however limited to certain
-types of leaks and won't catch memory leaks when the allocation has been made
-via plain old `malloc()` or `g_malloc()` or other means. It will also not trace
-non-GstObject GObjects.
-
-The goal is to enable leak tracing on GStreamer's Continuous-Integration and
-testing system, both for the regular unit tests (make check) and media tests
-(gst-validate), so that accidental leaks in common code paths can be detected
-and fixed quickly.
-
-For more information about the new tracer, check out Guillaume Desmottes's
-["Tracking Memory Leaks"][leaks-talk] talk or his [blog post][leaks-blog] about
-the topic.
-
-[leaks-talk]: https://gstconf.ubicast.tv/videos/tracking-memory-leaks/
-[leaks-blog]: https://blog.desmottes.be/?post/2016/06/20/GStreamer-leaks-tracer
-
-### GES and NLE changes
-
-- Clip priorities are now handled by the layers, and the GESTimelineElement
-  priority property is now deprecated and unused
-- Enhanced (de)interlacing support to always use the `deinterlace` element
-  and expose needed properties to users
-- Allow reusing clips children after removing the clip from a layer
-- We are now testing many more rendering formats in the gst-validate
-  test suite, and failures have been fixed.
-- Also many bugs have been fixed in this cycle!
 
-### GStreamer validate changes
+Introduction
 
-This cycle has been focused on making GstValidate more than just a validating
-tool, but also a tool to help developers debug their GStreamer issues. When
-reporting issues, we try to gather as much information as possible and expose
-it to end users in a useful way. For an example of such enhancements, check out
-Thibault Saunier's [blog post](improving-debugging-gstreamer-validate) about
-the new Not Negotiated Error reporting mechanism.
+The GStreamer team is proud to announce a new major feature release in
+the stable 1.x API series of your favourite cross-platform multimedia
+framework!
 
-Playbin3 support has been added so we can run validate tests with `playbin3`
-instead of playbin.
+As always, this release is again packed with many new features, bug
+fixes and other improvements.
 
-We are now able to properly communicate between `gst-validate-launcher` and
-launched subprocesses with actual IPC between them. That has enabled the test
-launcher to handle failing tests specifying the exact expected issue(s).
 
-[improving-debugging-gstreamer-validate]: https://blogs.s-osg.org/improving-debugging-gstreamer-validate/
+Highlights
 
-### gst-libav changes
+-   GStreamer WebRTC stack gained support for data channels for
+    peer-to-peer communication based on SCTP, BUNDLE support, as well as
+    support for multiple TURN servers.
 
-gst-libav uses the recently released ffmpeg 3.2 now, which brings a lot of
-improvements and bugfixes from the ffmpeg team in addition to various new
-codec mappings on the GStreamer side and quite a few bugfixes to the GStreamer
-integration to make it more robust.
+-   AV1 video codec support for Matroska and QuickTime/MP4 containers
+    and more configuration options and supported input formats for the
+    AOMedia AV1 encoder
 
-## Build and Dependencies
+-   Support for Closed Captions and other Ancillary Data in video
 
-### Experimental support for Meson as build system
+-   Support for planar (non-interleaved) raw audio
 
-#### Overview
+-   GstVideoAggregator, compositor and OpenGL mixer elements are now in
+    -base
 
-We have have added support for building GStreamer using the
-[Meson build system][meson]. This is currently experimental, but should work
-fine at least on Linux using the gcc or clang toolchains and on Windows using
-the MingW or MSVC toolchains.
+-   New alternate fields interlace mode where each buffer carries a
+    single field
 
-Autotools remains the primary build system for the time being, but we hope to
-someday replace it and will steadily work towards that goal.
+-   WebM and Matroska ContentEncryption support in the Matroska demuxer
 
-More information about the background and implications of all this and where
-we're hoping to go in future with this can be found in [Tim's mail][meson-mail]
-to the gstreamer-devel mailing list.
+-   new WebKit WPE-based web browser source element
 
-For more information on Meson check out [these videos][meson-videos] and also
-the [Meson talk][meson-gstconf] at the GStreamer Conference.
+-   Video4Linux: HEVC encoding and decoding, JPEG encoding, and improved
+    dmabuf import/export
 
-Immediate benefits for Linux users are faster builds and rebuilds. At the time
-of writing the Meson build of GStreamer is used by default in GNOME's jhbuild
-system.
+-   Hardware-accelerated Nvidia video decoder gained support for VP8/VP9
+    decoding, whilst the encoder gained support for H.265/HEVC encoding.
 
-The Meson build currently still lacks many of the fine-grained configuration
-options to enable/disable specific plugins. These will be added back in due
-course.
+-   Many improvements to the Intel Media SDK based hardware-accelerated
+    video decoder and encoder plugin (msdk): dmabuf import/export for
+    zero-copy integration with other components; VP9 decoding; 10-bit
+    HEVC encoding; video post-processing (vpp) support including
+    deinterlacing; and the video decoder now handles dynamic resolution
+    changes.
 
-Note: The meson build files are not distributed in the source tarballs, you will
-need to get GStreamer from git if you want try it out.
+-   The ASS/SSA subtitle overlay renderer can now handle multiple
+    subtitles that overlap in time and will show them on screen
+    simultaneously
 
-[meson]: http://mesonbuild.com/
-[meson-mail]: https://lists.freedesktop.org/archives/gstreamer-devel/2016-September/060231.html
-[meson-videos]: http://mesonbuild.com/videos.html
-[meson-gstconf]: https://gstconf.ubicast.tv/videos/gstreamer-development-on-windows-ans-faster-builds-everywhere-with-meson/
+-   The Meson build is now feature-complete (*) and it is now the
+    recommended build system on all platforms. The Autotools build is
+    scheduled to be removed in the next cycle.
 
-#### Windows Visual Studio toolchain support
+-   The GStreamer Rust bindings and Rust plugins module are now
+    officially part of upstream GStreamer.
 
-Windows users might appreciate being able to build GStreamer using the MSVC
-toolchain, which is not possible using autotools. This means that it will be
-possible to debug GStreamer and applications in Visual Studio, for example.
-We require VS2015 or newer for this at the moment.
+-   The GStreamer Editing Services gained a gesdemux element that allows
+    directly playing back serialized edit list with playbin or
+    (uri)decodebin
 
-There are two ways to build GStreamer using the MSVC toolchain:
+-   Many performance improvements
 
-1. Using the MSVC command-line tools (`cl.exe` etc.) via Meson's "ninja" backend.
-2. Letting Meson's "vs2015" backend generate Visual Studio project files that
-   can be opened in Visual Studio and compiled from there.
 
-This is currently only for adventurous souls though. All the bits are in place,
-but support for all of this has not been merged into GStreamer's cerbero build
-tool yet at the time of writing. This will hopefully happen in the next cycle,
-but for now this means that those wishing to compile GStreamer with MSVC will
-have to get their hands dirty.
+Major new features and changes
 
-There are also no binary SDK builds using the MSVC toolchain yet.
+Noteworthy new API
 
-For more information on GStreamer builds using Meson and the Windows toolchain
-check out Nirbheek Chauhan's blog post ["Building and developing GStreamer using Visual Studio"][msvc-blog].
+-   GstAggregator has a new "min-upstream-latency" property that forces
+    a minimum aggregate latency for the input branches of an aggregator.
+    This is useful for dynamic pipelines where branches with a higher
+    latency might be added later after the pipeline is already up and
+    running and where a change in the latency would be disruptive. This
+    only applies to the case where at least one of the input branches is
+    live though, it won’t force the aggregator into live mode in the
+    absence of any live inputs.
 
-[msvc-blog]: http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+-   GstBaseSink gained a "processing-deadline" property and
+    setter/getter API to configure a processing deadline for live
+    pipelines. The processing deadline is the acceptable amount of time
+    to process the media in a live pipeline before it reaches the sink.
+    This is on top of the systemic latency that is normally reported by
+    the latency query. This defaults to 20ms and should make pipelines
+    such as v4l2src ! xvimagesink not claim that all frames are late in
+    the QoS events. Ideally, this should replace the "max-lateness"
+    property for most applications.
 
-### Dependencies
+-   RTCP Extended Reports (XR) parsing according to RFC 3611:
+    Loss/Duplicate RLE, Packet Receipt Times, Receiver Reference Time,
+    Delay since the last Receiver (DLRR), Statistics Summary, and VoIP
+    Metrics reports. This only provides the ability to parse such
+    packets, generation of XR packets is not supported yet and XR
+    packets are not automatically parsed by rtpbin / rtpsession but must
+    be actively handled by the application.
 
-#### gstreamer
+-   a new mode for interlaced video was added where each buffer carries
+    a single field of interlaced video, with buffer flags indicating
+    whether the field is the top field or bottom field. Top and bottom
+    fields are expected to alternate in this mode. Caps for this
+    interlace mode must also carry a format:Interlaced caps feature to
+    ensure backwards compatibility.
+
+-   The video library has gained support for three new raw pixel
+    formats:
 
-libunwind was added as an optional dependency. It is used only for debugging
-and tracing purposes.
+    -   Y410: packed 4:4:4 YUV, 10 bits per channel
+    -   Y210: packed 4:2:2 YUV, 10 bits per channel
+    -   NV12_10LE40: fully-packed 10-bit variant of NV12_10LE32,
+        i.e. without the padding bits
+
+-   GstRTPSourceMeta is a new meta that can be used to transport
+    information about the origin of depayloaded or decoded RTP buffers,
+    e.g. when mixing audio from multiple sources into a single stream. A
+    new "source-info" property on the RTP depayloader base class
+    determines whether depayloaders should put this meta on outgoing
+    buffers. Similarly, the same property on RTP payloaders determines
+    whether they should use the information from this meta to construct
+    the CSRCs list on outgoing RTP buffers.
 
-The `opencv` plugin in gst-plugins-bad can now be built against OpenCV
-version 3.1, previously only 2.3-2.5 were supported.
+-   gst_sdp_message_from_text() is a convenience constructor to parse
+    SDPs from a string which is particularly useful for language
+    bindings.
+
+Support for Planar (Non-Interleaved) Raw Audio
+
+Raw audio samples are usually passed around in interleaved form in
+GStreamer, which means that if there are multiple audio channels the
+samples for each channel are interleaved in memory, e.g.
+|LEFT|RIGHT|LEFT|RIGHT|LEFT|RIGHT| for stereo audio. A non-interleaved
+or planar arrangement in memory would look like
+|LEFT|LEFT|LEFT|RIGHT|RIGHT|RIGHT| instead, possibly with
+|LEFT|LEFT|LEFT| and |RIGHT|RIGHT|RIGHT| residing in separate memory
+chunks or separated by some padding.
+
+GStreamer has always had signalling for non-interleaved audio since
+version 1.0, but it was never actually properly implemented in any
+elements. audioconvert would advertise support for it, but wasn’t
+actually able to handle it correctly.
+
+With this release we now have full support for non-interleaved audio as
+well, which means more efficient integration with external APIs that
+handle audio this way, but also more efficient processing of certain
+operations like interleaving multiple 1-channel streams into a
+multi-channel stream which can be done without memory copies now.
+
+New API to support this has been added to the GStreamer Audio support
+library: There is now a new GstAudioMeta which describes how data is
+laid out inside the buffer, and buffers with non-interleaved audio must
+always carry this meta. To access the non-interleaved audio samples you
+must map such buffers with gst_audio_buffer_map() which works much like
+gst_buffer_map() or gst_video_frame_map() in that it will populate a
+little GstAudioBuffer helper structure passed to it with the number of
+samples, the number of planes and pointers to the start of each plane in
+memory. This function can also be used to map interleaved audio buffers
+in which case there will be only one plane of interleaved samples.
+
+Of course support for this has also been implemented in the various
+audio helper and conversion APIs, base classes, and in elements such as
+audioconvert, audioresample, audiotestsrc, audiorate.
+
+Support for Closed Captions and Other Ancillary Data in Video
+
+The video support library has gained support for detecting and
+extracting Ancillary Data from videos as per the SMPTE S291M
+specification, including:
+
+-   a VBI (Vertical Blanking Interval) parser that can detect and
+    extract Ancillary Data from Vertical Blanking Interval lines of
+    component signals. This is currently supported for videos in v210
+    and UYVY format.
+
+-   a new GstMeta for closed captions: GstVideoCaptionMeta. This
+    supports the two types of closed captions, CEA-608 and CEA-708,
+    along with the four different ways they can be transported (other
+    systems are a superset of those).
+
+-   a VBI (Vertical Blanking Interval) encoder for writing ancillary
+    data to the Vertical Blanking Interval lines of component signals.
+
+The new closedcaption plugin in gst-plugins-bad then makes use of all
+this new infrastructure and provides the following elements:
+
+-   cccombiner: a closed caption combiner that takes a closed captions
+    stream and another stream and adds the closed captions as
+    GstVideoCaptionMeta to the buffers of the other stream.
+
+-   ccextractor: a closed caption extractor which will take
+    GstVideoCaptionMeta from input buffers and output them as a separate
+    closed captions stream.
+
+-   ccconverter: a closed caption converter that can convert between
+    different formats
+
+-   line21encoder, line21decoder: inject/extract line21 closed captions
+    to/from SD video streams
+
+-   cc708overlay: decodes CEA 608/708 captions and overlays them on
+    video
+
+Additionally, the following elements have also gained Closed Caption
+support:
+
+-   qtdemux and qtmux support CEA 608/708 Closed Caption tracks
+
+-   mpegvideoparse, h264parse extracts Closed Captions from MPEG-2/H.264
+    video streams
+
+-   avviddec, avvidenc, x264enc got support for extracting/injecting
+    Closed Captions
+
+-   decklinkvideosink can output closed captions and decklinkvideosrc
+    can extract closed captions
+
+-   playbin and playbin3 learned how to autoplug CEA 608/708 CC overlay
+    elements
+
+-   the externally maintained ajavideosrc element for AJA capture cards
+    has support for extracting closed captions
+
+The rsclosedcaption plugin in the Rust plugins collection includes a
+MacCaption (MCC) file parser and encoder.
+
+New Elements
+
+-   overlaycomposition: New element that allows applications to draw
+    GstVideoOverlayCompositions on a stream. The element will emit the
+    "draw" signal for each video buffer, and the application then
+    generates an overlay for that frame (or not). This is much more
+    performant than e.g. cairooverlay for many use cases, e.g. because
+    pixel format conversions can be avoided or the blitting of the
+    overlay can be delegated to downstream elements (such as
+    gloverlaycompositor). It’s particularly useful for cases where only
+    a small section of the video frame should be drawn on.
+
+-   gloverlaycompositor: New OpenGL-based compositor element that
+    flattens any overlays from GstVideoOverlayCompositionMetas into the
+    video stream. This element is also always part of glimagesink.
+
+-   glalpha: New element that adds an alpha channel to a video stream.
+    The values of the alpha channel can either be set to a constant or
+    can be dynamically calculated via chroma keying. It is similar to
+    the existing alpha element but based on OpenGL. Calculations are
+    done in floating point so results may not be identical to the output
+    of the existing alpha element.
+
+-   rtpfunnel funnels together RTP streams into a single session. Use
+    cases include multiplexing and bundle. webrtcbin uses it to
+    implement BUNDLE support.
+
+-   testsrcbin is a source element that provides an audio and/or video
+    stream and also announces them using the recently-introduced
+    GstStream API. This is useful for testing elements such as playbin3
+    or uridecodebin3 etc.
+
+-   New closed caption elements: cccombiner, ccextractor, ccconverter,
+    line21encoder, line21decoder and cc708overlay (see above)
+
+-   wpesrc: new source element acting as a Web Browser based on WebKit
+    WPE
+
+-   Two new OpenCV-based elements: cameracalibrate and cameraundistort
+    that can communicate to figure out distortion correction parameters
+    for a camera and correct for the distortion.
+
+-   New sctp plugin based on usrsctp with sctpenc and sctpdec elements.
+    These elements are used inside webrtcbin for implementing data
+    channels.
+
+New element features and additions
+
+-   playbin3, playbin and playsink have gained a new "text-offset"
+    property to adjust the positioning of the selected subtitle stream
+    vis-a-vis the audio and video streams. This uses subtitleoverlay’s
+    new "subtitle-ts-offset" property. GstPlayer has gained matching API
+    for this, namely gst_player_get_text_video_offset().
+
+-   playbin3 buffering improvements: in network playback scenarios there
+    may be multiple inputs to decodebin3, and buffering will be done
+    before decodebin3 using queue2 or downloadbuffer elements inside
+    urisourcebin. Since this is before any parsers or demuxers there may
+    not be any bitrate information available for the various streams, so
+    it was difficult to configure the buffering there smartly within
+    global constraints. This was improved now: The queue2 elements
+    inside urisourcebin will now use the new bitrate query to figure out
+    a bitrate estimate for the stream if no bitrate was provided by
+    upstream, and urisourcebin will use the bitrates of the individual
+    queues to distribute the globally-set "buffer-size" budget in bytes
+    to the various queues. urisourcebin also gained "low-watermark" and
+    "high-watermark" properties which will be proxied to the internal
+    queues, as well as a read-only "statistics" property which allows
+    querying of the minimum/maximum/average byte and time levels of the
+    queues inside the urisourcebin in question.
+
+-   splitmuxsink has gained a couple of new features:
+
+    -   new "async-finalize" mode: This mode is useful for muxers or
+        outputs that can take a long time to finalize a file. Instead of
+        blocking the whole upstream pipeline while the muxer is doing
+        its stuff, we can unlink it and spawn a new muxer + sink
+        combination to continue running normally. This requires us to
+        receive the muxer and sink (if needed) as factories via the new
+        "muxer-factory" and "sink-factory" properties, optionally
+        accompanied by their respective properties structures (set via
+        the new "muxer-properties" and "sink-properties" properties).
+        There are also new "muxer-added" and "sink-added" signals in
+        case custom code has to be called for them to configure them.
+
+    -   "split-at-running-time" action signal: When called by the user,
+        this action signal ends the current file (and starts a new one)
+        as soon as the given running time is reached. If called multiple
+        times, running times are queued up and processed in the order
+        they were given.
+
+    -   "split-after" action signal to finish outputting the current GOP
+        to the current file and then start a new file as soon as the GOP
+        is finished and a new GOP is opened (unlike the existing
+        "split-now" which immediately finishes the current file and
+        writes the current GOP into the next newly-started file).
+
+    -   "reset-muxer" property: when unset, the muxer is reset using
+        flush events instead of setting its state to NULL and back. This
+        means the muxer can keep state across resets, e.g. mpegtsmux
+        will keep the continuity counter continuous across segments as
+        required by hlssink2.
+
+-   qtdemux gained PIFF track encryption box support in addition to the
+    already-existing PIFF sample encryption support, and also allows
+    applications to select which encryption system to use via a
+    "drm-preferred-decryption-system-id" context in case there are
+    multiple options.
+
+-   qtmux: the "start-gap-threshold" property determines now whether an
+    edit list will be created to account for small gaps or offsets at
+    the beginning of a stream in case the start timestamps of tracks
+    don’t line up perfectly. Previously the threshold was hard-coded to
+    1% of the (video) frame duration, now it is 0 by default (so edit
+    list will be created even for small differences), but fully
+    configurable.
+
+-   rtpjitterbuffer has improved end-of-stream handling
+
+-   rtpmp4vpay will be prefered over rtpmp4gpay for MPEG-4 video in
+    autoplugging scenarios now
+
+-   rtspsrc now allows applications to send RTSP SET_PARAMETER and
+    GET_PARAMETER requests using action signals.
+
+-   rtspsrc has a small (100ms) configurable teardown delay by default
+    to try and make sure an RTSP TEARDOWN request gets sent out when the
+    source element shuts down. This will block the downward PAUSED to
+    READY state change for a short time, but can be disabled where it’s
+    a problem. Some servers only allow a limited number of concurrent
+    clients, so if no proper TEARDOWN is sent new clients may have
+    problems connecting to the server for a while.
+
+-   souphttpsrc behaves better with low bitrate streams now. Before it
+    would increase the read block size too quickly which could lead to
+    it not reading any data from the socket for a very long time with
+    low bitrate streams that are output live downstream. This could lead
+    to servers kicking off the client.
+
+-   filesink: do internal buffering to avoid performance regression with
+    small writes since we bypass libc buffering by using writev()
+    instead of fwrite()
+
+-   identity: add "eos-after" property and fix "error-after" property
+    when the element is reused
+
+-   input-selector: lets context queries pass through, so that
+    e.g. upstream OpenGL elements can use contexts and displays
+    advertised by downstream elements
+
+-   queue2: avoid ping-pong between 0% and 100% buffering messages if
+    upstream is pushing buffers larger than one of its limits, plus
+    performance optimisations
+
+-   opusdec: new "phase-inversion" property to control phase inversion.
+    When enabled, this will slightly increase stereo quality, but
+    produces a stream that when downmixed to mono will suffer audio
+    distortions.
+
+-   The x265enc HEVC encoder also exposes a "key-int-max" property to
+    configure the maximum allowed GOP size now.
+
+-   decklinkvideosink has seen stability improvements for long-running
+    pipelines (potential crash due to overflow of leaked clock refcount)
+    and clock-slaving improvements when performing flushing seeks
+    (causing stalls in the output timeline), pausing and/or buffering.
+
+-   srtpdec, srtpenc: add support for MKIs which allow multiple keys to
+    be used with a single SRTP stream
+
+-   srtpdec, srtpenc: add support for AES-GCM and also add support for
+    it in gst-rtsp-server and rtspsrc.
+
+-   The srt Secure Reliable Transport plugin has integrated server and
+    client elements srt{client,server}{src,sink} into one (srtsrc and
+    srtsink), since SRT connection mode can be changed by uri
+    parameters.
+
+-   h264parse and h265parse will handle SEI recovery point messages and
+    mark recovery points as keyframes as well (in addition to IDR
+    frames)
+
+-   webrtcbin: "add-turn-server" action signal to pass multiple ICE
+    relays (TURN servers).
+
+-   The removesilence element has received various new features and
+    properties, such as a "threshold" property, detecting silence only
+    after minimum silence time/buffers, a "silent" property to control
+    bus message notifications as well as a "squash" property.
+
+-   AOMedia AV1 decoder gained support for 10/12bit decoding whilst the
+    AV1 encoder supports more image formats and subsamplings now and
+    acquired support for rate control and profile related configuration.
+
+-   The Fraunhofer fdkaac plugin can now be built against the 2.0.0
+    version API and has improved multichannel support
+
+-   kmssink now supports unpadded 24-bit RGB and can configure mode
+    setting from video info, which enables display of multi-planar
+    formats such as I420 or NV12 with modesetting. It has also gained a
+    number of new properties: The "restore-crtc" property does what it
+    says on the tin and is enabled by default. "plane-properties" and
+    "connector-properties" can be used to pass custom properties to the
+    DRM.
+
+-   waylandsink has a "fullscreen" property now and supports the
+    XDG-Shell protocol.
 
-#### gst-plugins-ugly
+-   decklinkvideosink, decklinkvideosrc support selecting between
+    half/full duplex
+
+-   The vulkan plugin gained support for macOS and iOS via MoltenVK in
+    addition to the existing support for X11 and Wayland
 
-- `mpeg2dec` now requires at least libmpeg2 0.5.1 (from 2008).
+-   imagefreeze has a new num-buffers property to limit the number of
+    buffers that are produced and to send an EOS event afterwards
 
-#### gst-plugins-bad
+-   webrtcbin has a new, introspectable get-transceiver signal in
+    addition to the old get-transceivers signal that couldn’t be used
+    from bindings
+
+-   Support for per-element latency information was added to the latency
+    tracer
+
+Plugin and library moves
+
+-   The stereo element was moved from -bad into the existing audiofx
+    plugin in -good. If you get duplicate type registration warnings
+    when upgrading, check that you don’t have a stale stereoplugin lying
+    about somewhere.
+
+GstVideoAggregator, compositor, and OpenGL mixer elements moved from -bad to -base
+
+GstVideoAggregator is a new base class for raw video mixers and muxers
+and is based on GstAggregator. It provides defined-latency mixing of raw
+video inputs and ensures that the pipeline won’t stall even if one of
+the input streams stops producing data.
+
+As part of the move to stabilise the API there were some last-minute API
+changes and clean-ups, but those should mostly affect internal elements.
+Most notably, the "ignore-eos" pad property was renamed to
+"repeat-after-eos" and the conversion code was moved to a
+GstVideoAggregatorConvertPad subclass to avoid code duplication, make
+things less awkward for subclasses like the OpenGL-based video mixer,
+and make the API more consistent with the audio aggregator API.
+
+It is used by the compositor element, which is a replacement for
+‘videomixer’ which did not handle live inputs very well. compositor
+should behave much better in that respect and generally behave as one
+would expected in most scenarios.
+
+The compositor element has gained support for per-pad blending mode
+operators (SOURCE, OVER, ADD) which determines what operator to use for
+blending this pad over the previous ones. This can be used to implement
+crossfading and the available operators can be extended in the future as
+needed.
+
+A number of OpenGL-based video mixer elements (glvideomixer, glmixerbin,
+glvideomixerelement, glstereomix, glmosaic) which are built on top of
+GstVideoAggregator have also been moved from -bad to -base now. These
+elements have been merged into the existing OpenGL plugin, so if you get
+duplicate type registration warnings when upgrading, check that you
+don’t have a stale openglmixers plugin lying about somewhere.
+
+Plugin removals
+
+The following plugins have been removed from gst-plugins-bad:
+
+-   The experimental daala plugin has been removed, since it’s not so
+    useful now that all effort is focused on AV1 instead, and it had to
+    be enabled explicitly with --enable-experimental anyway.
+
+-   The spc plugin has been removed. It has been replaced by the gme
+    plugin.
+
+-   The acmmp3dec and acmenc plugins for Windows have been removed. ACM
+    is an ancient legacy API and there was no point in keeping the
+    plugins around for a licensed MP3 decoder now that the MP3 patents
+    have expired and we have a decoder in -good. We also didn’t ship
+    these in our cerbero-built Windows packages, so it’s unlikely that
+    they’ll be missed.
+
+
+Miscellaneous API additions
+
+-   GstBitwriter: new generic bit writer API to complement the existing
+    bit reader
+
+-   gst_buffer_new_wrapped_bytes() creates a wrap buffer from a GBytes
+
+-   gst_caps_set_features_simple() sets a caps feature on all the
+    structures of a GstCaps
+
+-   New GST_QUERY_BITRATE query: This allows determining from downstream
+    what the expected bitrate of a stream may be which is useful in
+    queue2 for setting time based limits when upstream does not provide
+    timing information. tsdemux, qtdemux and matroskademux have basic
+    support for this query on their sink pads.
+
+-   elements: there is a new “Hardware” class specifier. Elements
+    interacting with hardware devices should specify this classifier in
+    their element factory class metadata. This is useful to advertise as
+    one might need to put such elements into READY state to test if the
+    hardware is present in the system for example.
+
+-   protection: Add a new definition for unspecified system protection,
+    GST_PROTECTION_UNSPECIFIED_SYSTEM_ID
+
+-   take functions for various mini objects that didn’t have them yet:
+    gst_query_take(), gst_message_take(), gst_tag_list_take(),
+    gst_buffer_list_take(). Unlike the various _replace() functions
+    _take() does not increase the reference count but takes ownership of
+    the mini object passed.
+
+-   clear functions for various mini object types and GstObject which
+    unrefs the object or mini object (if non-NULL) and sets the variable
+    pointed to to NULL: gst_clear_structure(), gst_clear_tag_list(),
+    gst_clear_query(), gst_clear_message(), gst_clear_event(),
+    gst_clear_caps(), gst_clear_buffer_list(), gst_clear_buffer(),
+    gst_clear_mini_object(), gst_clear_object()
+
+-   miniobject: new API gst_mini_object_add_parent() and
+    gst_mini_object_remove_parent() to set parent pointers on mini
+    objects to ensure correct writability: Every container of
+    miniobjects now needs to store itself as parent in the child object,
+    and remove itself again later. A mini object is then only writable
+    if there is at most one parent, that parent is writable itself, and
+    the reference count of the mini object is 1. GstBuffer (for
+    memories), GstBufferList (for buffers), GstSample (for caps, buffer,
+    bufferlist), and GstVideoOverlayComposition were updated
+    accordingly. Without this it was possible to have e.g. a buffer list
+    with a refcount of 2 used in two places at once that both modify the
+    same buffer with refcount 1 at the same time wrongly thinking it is
+    writable even though it’s really not.
+
+-   poll: add API to watch for POLLPRI and stop treating POLLPRI as a
+    read. This is useful to wait for video4linux events which are
+    signalled via POLLPRI.
+
+-   sample: new API to update the contents of a GstSample and make it
+    writable: gst_sample_set_buffer(), gst_sample_set_caps(),
+    gst_sample_set_segment(), gst_sample_set_info(), plus
+    gst_sample_is_writable() and gst_sample_make_writable(). This makes
+    it possible to reuse a sample object and avoid unnecessary memory
+    allocations, for example in appsink.
+
+-   ClockIDs now keep a weak reference to underlying clock to avoid
+    crashes in basesink in corner cases where a clock goes away while
+    the ClockID is still in use, plus some new API
+    (gst_clock_id_get_clock(), gst_clock_id_uses_clock()) to check the
+    clock a ClockID is linked to.
+
+-   The GstCheck unit test library gained a
+    fail_unless_equals_clocktime() convenience macro as well as some new
+    GstHarness API for for proposing meta APIs from the allocation
+    query: gst_harness_add_propose_allocation_meta(). ASSERT_CRITICAL()
+    checks in unit tests are now skipped if GStreamer was compiled with
+    GST_DISABLE_GLIB_CHECKS.
+
+-   gst_audio_buffer_truncate() convenience function to truncate a raw
+    audio buffer
+
+-   GstDiscoverer has support for caching the results of discovery in
+    the default cache directory. This can be enabled with the use-cache
+    property and is disabled by default.
+
+-   GstMeta that are attached to GstBuffers are now always stored in the
+    order in which they were added.
+
+-   Additional support for signalling ONVIF specific features were
+    added: the SEEK event can store a trickmode-interval now and support
+    for the Rate-Control and Frames RTSP headers was added to the RTSP
+    library.
+
+
+Miscellaneous performance and memory optimisations
+
+As always there have been many performance and memory usage improvements
+across all components and modules. Some of them (such as dmabuf
+import/export) have already been mentioned elsewhere so won’t be
+repeated here.
+
+The following list is only a small snapshot of some of the more
+interesting optimisations that haven’t been mentioned in other contexts
+yet:
+
+-   The GstVideoEncoder and GstVideoDecoder base classes now release the
+    STREAM_LOCK when pushing out buffers, which means (multi-threaded)
+    encoders and decoders can now receive and continue to process input
+    buffers whilst waiting for downstream elements in the pipeline to
+    process the buffer that was pushed out. This increases throughput
+    and reduces processing latency, also and especially for
+    hardware-accelerated encoder/decoder elements.
+
+-   GstQueueArray has seen a few API additions
+    (gst_queue_array_peek_nth(), gst_queue_array_set_clear_func(),
+    gst_queue_array_clear()) so that it can be used in other places like
+    GstAdapter instead of a GList, which reduces allocations and
+    improves performance.
+
+-   appsink now reuses the sample object in pull_sample() if possible
+
+-   rtpsession only starts the RTCP thread when it’s actually needed now
+
+-   udpsrc uses a buffer pool now and the GstUdpSrc object structure was
+    optimised for better cache performance
+
+GstPlayer
+
+-   API was added to fine-tune the synchronisation offset between
+    subtitles and video
+
+
+Miscellaneous changes
+
+-   As a result of moving to newer FFmpeg APIs, encoder and decoder
+    elements exposed by the GStreamer FFmpeg wrapper plugin (gst-libav)
+    may have seen possibly incompatible changes to property names and/or
+    types, and not all properties exposed might be functional. We are
+    still reviewing the new properties and aim to minimise breaking
+    changes at least for the most commonly-used properties, so please
+    report any issues you run into!
 
-- `gltransformation` now requires at least graphene 1.4.0.
+OpenGL integration
 
-- `lv2` now plugin requires at least lilv 0.16 instead of slv2.
+-   The OpenGL mixer elements have been moved from -bad to
+    gst-plugins-base (see above)
 
-### Packaging notes
+-   The Mesa GBM backend now supports headless mode
 
-Packagers please note that the `gst/gstconfig.h` public header file in the
-GStreamer core library moved back from being an architecture dependent include
-to being architecture independent, and thus it is no longer installed into
-`$(libdir)/gstreamer-1.0/include/gst` but into the normal include directory
-where it lives happily ever after with all the other public header files. The
-reason for this is that we now check whether the target supports unaligned
-memory access based on predefined compiler macros at compile time instead of
-checking it at configure time.
+-   gloverlaycompositor: New OpenGL-based compositor element that
+    flattens any overlays from GstVideoOverlayCompositionMetas into the
+    video stream.
 
-## Platform-specific improvements
+-   glalpha: New element that adds an alpha channel to a video stream.
+    The values of the alpha channel can either be set to a constant or
+    can be dynamically calculated via chroma keying. It is similar to
+    the existing alpha element but based on OpenGL. Calculations are
+    done in floating point so results may not be identical to the output
+    of the existing alpha element.
 
-### Android
+-   glupload: Implement direct dmabuf uploader, the idea being that some
+    GPUs (like the Vivante series) can actually perform the YUV->RGB
+    conversion internally, so no custom conversion shaders are needed.
+    To make use of this feature, we need an additional uploader that can
+    import DMABUF FDs and also directly pass the pixel format, relying
+    on the GPU to do the conversion.
 
-#### New universal binaries for all supported ABIs
+-   The OpenGL library no longer restores the OpenGL viewport. This is a
+    performance optimization to not require performing multiple
+    expensive glGet*() function calls per frame. This affects any
+    application or plugin use of the following functions and objects:
+    -   glcolorconvert library object (not the element)
+    -   glviewconvert library object (not the element)
+    -   gst_gl_framebuffer_draw_to_texture()
+    -   custom GstGLWindow implementations
 
-We now provide a "universal" tarball to allow building apps against all the
-architectures currently supported (x86, x86-64, armeabi, armeabi-v7a,
-armeabi-v8a). This is needed for building with recent versions of the Android
-NDK which defaults to building against all supported ABIs. Use [the Android
-player example][android-player-example-build] as a reference for the required
-changes.
 
-[android-player-example-build]: https://cgit.freedesktop.org/gstreamer/gst-examples/commit/playback/player/android?id=a5cdde9119f038a1eb365aca20faa9741a38e788
+Tracing framework and debugging improvements
 
-#### Miscellaneous
+-   There is now a GDB PRETTY PRINTER FOR VARIOUS GSTREAMER TYPES: For
+    GstObject pointers the type and name is added, e.g.
+    0x5555557e4110 [GstDecodeBin|decodebin0]. For GstMiniObject pointers
+    the object type is added, e.g. 0x7fffe001fc50 [GstBuffer]. For
+    GstClockTime and GstClockTimeDiff the time is also printed in human
+    readable form, e.g. 150116219955 [+0:02:30.116219955].
 
-- New `ahssrc` element that allows reading the hardware sensors, e.g. compass
-  or accelerometer.
+-   GDB EXTENSION WITH TWO CUSTOM GDB COMMANDS gst-dot AND gst-print:
 
-### macOS (OS/X) and iOS
+    -   gst-dot creates dot files that a very close to what
+        GST_DEBUG_BIN_TO_DOT_FILE() produces, but object properties and
+        buffer contents such as codec-data in caps are not available.
 
-- Support for querying available devices on OS/X via the GstDeviceProvider
-  API was added.
-- It is now possible to create OpenGL|ES 3.x contexts on iOS and use them in
-  combination with the VideoToolbox based decoder element.
-- many OpenGL/GLES improvements, see OpenGL section above
+    -   gst-print produces high-level information about a GStreamer
+        object. This is currently limited to pads for GstElements and
+        events for the pads. The output may look like this:
 
-### Windows
+-   gst_structure_to_string() now serialises the actual value of
+    pointers when serialising GstStructures instead of claiming they’re
+    NULL. This makes debug logging in various places less confusing,
+    because it’s clear now that structure fields actually hold valid
+    objects. Such object pointer values will never be deserialised
+    however.
 
-- gstconfig.h: Always use dllexport/import on Windows with MSVC
-- Miscellaneous fixes to make libs and plugins compile with the MVSC toolchain
-- MSVC toolchain support (see Meson section above for more details)
 
-## New Modules for Documentation, Examples, Meson Build
+Tools
 
-Three new git modules have been added recently:
+-   gst-inspect-1.0 has coloured output now and will automatically use a
+    pager if the output does not fit on a page. This only works in a
+    UNIX environment and if the output is not piped, and on Windows 10
+    build 16257 or newer. If you don’t like the colours you can disable
+    them by setting the GST_INSPECT_NO_COLORS=1 environment variable or
+    passing the --no-color command line option.
 
-### gst-docs
 
-This is a new module where we will maintain documentation in the markdown
-format.
+GStreamer RTSP server
 
-It contains the former gstreamer.com SDK tutorials which have kindly been made
-available by Fluendo under a Creative Commons license. The tutorials have been
-reviewed and updated for GStreamer 1.x and will be available as part of the
-[official GStreamer documentation][doc] going forward. The old gstreamer.com
-site will then be shut down with redirects pointing to the updated tutorials.
+-   Improved backlog handling when using TCP interleaved for data
+    transport. Before there was a fixed maximum size for backlog
+    messages, which was prone to deadlocks and made it difficult to
+    control memory usage with the watch backlog. The RTSP server now
+    limits queued TCP data messages to one per stream, moving queuing of
+    the data into the pipeline and leaving the RTSP connection
+    responsive to RTSP messages in both directions, preventing all those
+    problems.
 
-Some of the existing docbook XML-formatted documentation from the GStreamer
-core module such as the *Application Development Manual* and the *Plugin
-Writer's Guide* have been converted to markdown as well and will be maintained
-in the gst-docs module in future. They will be removed from the GStreamer core
-module in the next cycle.
+-   Initial ULP Forward Error Correction support in rtspclientsink and
+    for RECORD mode in the server.
 
-This is just the beginning. Our goal is to provide a more cohesive documentation
-experience for our users going forward, and easier to create and maintain
-documentation for developers. There is a lot more work to do, get in touch if
-you want to help out.
+-   API to explicitly enable retransmission requests (RTX)
 
-If you encounter any problems or spot any omissions or outdated content in the
-new documentation, please [file a bug in bugzilla][doc-bug] to let us know.
+-   Lots of multicast-related fixes
 
-We will probably release gst-docs as a separate tarball for distributions to
-package in the next cycle.
+-   rtsp-auth: Add support for parsing .htdigest files
 
-[doc]: http://gstreamer.freedesktop.org/documentation/
-[doc-bug]: https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=documentation
 
-### gst-examples
+GStreamer VAAPI
 
-A new [module][examples-git] has been added for examples. It does not contain
-much yet, currently it only contains a small [http-launch][http-launch] utility
-that serves a pipeline over http as well as various [GstPlayer playback frontends][puis]
-for Android, iOS, Gtk+ and Qt.
-
-More examples will be added over time. The examples in this repository should
-be more useful and more substantial than most of the examples we ship as part
-of our other modules, and also written in a way that makes them good example
-code. If you have ideas for examples, let us know.
-
-No decision has been made yet if this module will be released and/or packaged.
-It probably makes sense to do so though.
-
-[examples-git]: https://cgit.freedesktop.org/gstreamer/gst-examples/tree/
-[http-launch]: https://cgit.freedesktop.org/gstreamer/gst-examples/tree/network/http-launch/
-[puis]: https://cgit.freedesktop.org/gstreamer/gst-examples/tree/playback/player
-
-### gst-build
-
-[gst-build][gst-build-git] is a new meta module to build GStreamer using the
-new Meson build system. This module is not required to build GStreamer with
-Meson, it is merely for convenience and aims to provide a development setup
-similar to the existing `gst-uninstalled` setup.
-
-gst-build makes use of Meson's [subproject feature][meson-subprojects] and sets
-up the various GStreamer modules as subprojects, so they can all be updated and
-built in parallel.
-
-This module is still very new and highly experimental. It should work at least
-on Linux and Windows (OS/X needs some build fixes). Let us know of any issues
-you encounter by popping into the `#gstreamer` IRC channel or by
-[filing a bug][gst-build-bug].
-
-This module will probably not be released or packaged (does not really make sense).
-
-[gst-build-git]: https://cgit.freedesktop.org/gstreamer/gst-build/tree/
-[gst-build-bug]: https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=gst-build
-[meson-subprojects]: https://github.com/mesonbuild/meson/wiki/Subprojects
-
-## Contributors
-
-Aaron Boxer, Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț, Alex
-Ashley, Alex-P. Natsios, Alistair Buxton, Allen Zhang, Andreas Naumann, Andrew
-Eikum, Andy Devar, Anthony G. Basile, Arjen Veenhuizen, Arnaud Vrac, Artem
-Martynovich, Arun Raghavan, Aurélien Zanelli, Barun Kumar Singh, Bernhard
-Miller, Brad Lackey, Branko Subasic, Carlos Garcia Campos, Carlos Rafael
-Giani, Christoffer Stengren, Daiki Ueno, Damian Ziobro, Danilo Cesar Lemes de
-Paula, David Buchmann, Dimitrios Katsaros, Duncan Palmer, Edward Hervey,
-Emmanuel Poitier, Enrico Jorns, Enrique Ocaña González, Fabrice Bellet,
-Florian Zwoch, Florin Apostol, Francisco Velazquez, Frédéric Bertolus, Fredrik
-Fornwall, Gaurav Gupta, George Kiagiadakis, Georg Lippitsch, Göran Jönsson,
-Graham Leggett, Gregoire Gentil, Guillaume Desmottes, Gwang Yoon Hwang, Haakon
-Sporsheim, Haihua Hu, Havard Graff, Heinrich Fink, Hoonhee Lee, Hyunjun Ko,
-Iain Lane, Ian, Ian Jamison, Jagyum Koo, Jake Foytik, Jakub Adam, Jan
-Alexander Steffens (heftig), Jan Schmidt, Javier Martinez Canillas, Jerome
-Laheurte, Jesper Larsen, Jie Jiang, Jihae Yi, Jimmy Ohn, Jinwoo Ahn, Joakim
-Johansson, Joan Pau Beltran, Jonas Holmberg, Jonathan Matthew, Jonathan Roy,
-Josep Torra, Julien Isorce, Jun Ji, Jürgen Slowack, Justin Kim, Kazunori
-Kobayashi, Kieran Bingham, Kipp Cannon, Koop Mast, Kouhei Sutou, Kseniia, Kyle
-Schwarz, Kyungyong Kim, Linus Svensson, Luis de Bethencourt, Marcin Kolny,
-Marcin Lewandowski, Marianna Smidth Buschle, Mario Sanchez Prada, Mark
-Combellack, Mark Nauwelaerts, Martin Kelly, Matej Knopp, Mathieu Duponchelle,
-Mats Lindestam, Matthew Gruenke, Matthew Waters, Michael Olbrich, Michal Lazo,
-Miguel París Díaz, Mikhail Fludkov, Minjae Kim, Mohan R, Munez, Nicola Murino,
-Nicolas Dufresne, Nicolas Huet, Nikita Bobkov, Nirbheek Chauhan, Olivier
-Crête, Paolo Pettinato, Patricia Muscalu, Paulo Neves, Peng Liu, Peter
-Seiderer, Philippe Normand, Philippe Renon, Philipp Zabel, Pierre Lamot, Piotr
-Drąg, Prashant Gotarne, Raffaele Rossi, Ray Strode, Reynaldo H. Verdejo
-Pinochet, Santiago Carot-Nemesio, Scott D Phillips, Sebastian Dröge, Sebastian
-Rasmussen, Sergei Saveliev, Sergey Borovkov, Sergey Mamonov, Sergio Torres
-Soldado, Seungha Yang, sezero, Song Bing, Sreerenj Balachandran, Stefan Sauer,
-Stephen, Steven Hoving, Stian Selnes, Thiago Santos, Thibault Saunier, Thijs
-Vermeir, Thomas Bluemel, Thomas Jones, Thomas Klausner, Thomas Scheuermann,
-Tim-Philipp Müller, Ting-Wei Lan, Tom Schoonjans, Ursula Maplehurst, Vanessa
-Chipirras Navalon, Víctor Manuel Jáquez Leal, Vincent Penquerc'h, Vineeth TM,
-Vivia Nikolaidou, Vootele Vesterblom, Wang Xin-yu (王昕宇), William Manley,
-Wim Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier Claessens, xlazom00,
-Yann Jouanin, Zaheer Abbas Merali
-
-... and many others who have contributed bug reports, translations, sent
-suggestions or helped testing.
+-   Support Wayland’s display for context sharing, so the application
+    can pass its own wl_display in order to be used for the VAAPI
+    display creation.
+
+-   A lot of work to support new Intel hardware using media-driver as VA
+    backend.
+
+-   For non-x86 devices, VAAPI display can instantiate, through DRM,
+    with no PCI bus. This enables the usage of libva-v4l2-request
+    driver.
+
+-   Added support for XDG-shell protocol as wl_shell replacement which
+    is currently deprecated. This change add as dependency
+    wayland-protocol.
+
+-   GstVaapiFilter, GstVaapiWindow, and GstVaapiDecoder classes now
+    inherit from GstObject, gaining all the GStreamer’s instrumentation
+    support.
+
+-   The metadata now specifies the plugin as Hardware class.
+
+-   H264 decoder is more stable with problematic streams.
+
+-   In H265 decoder added support for profiles main-422-10 (P010_10LE),
+    main-444 (AYUV) and main-444-10 (Y410)
+
+-   JPEG decoder handles dynamic resolution changes.
+
+-   More specification adherence in H264 and H265 encoders.
+
+
+GStreamer OMX
+
+-   Add support of NV16 format to video encoders input.
+
+-   Video decoders now handle the ALLOCATION query to tell upstream
+    about the number of buffers they require. Video encoders will also
+    use this query to adjust their number of allocated buffers
+    preventing starvation when using dynamic buffer mode.
+
+-   The OMX_PERFORMANCE debug category has been renamed to OMX_API_TRACE
+    and can now be used to track a widder variety of interactions
+    between OMX and GStreamer.
+
+-   Video encoders will now detect frame rate only changes and will
+    inform OMX about it rather than doing a full format reset.
+
+-   Various Zynq UltraScale+ specific improvements:
+    -   Video encoders are now able to import dmabuf from upstream.
+    -   Support for HEVC range extension profiles and more AVC profiles.
+    -   We can now request video encoders to generate an IDR using the
+        force key unit event.
+
+
+GStreamer Editing Services and NLE
+
+-   Added a gesdemux element, it is an auto pluggable element that
+    allows decoding edit list like files supported by GES
+
+-   Added gessrc which wraps a GESTimeline as a standard source element
+    (implementing the ges protocol handler)
+
+-   Added basic support for videorate::rate property potentially
+    allowing changing playback speed
+
+-   Layer priority is now fully automatic and they should be moved with
+    the new ges_timeline_move_layer method, ges_layer_set_priority is
+    now deprecated.
+
+-   Added a ges_timeline_element_get_layer_priority so we can simply get
+    all information about GESTimelineElement position in the timeline
+
+-   GESVideoSource now auto orientates the images if it is defined in a
+    meta (overridable).
+
+-   Added some PyGObject overrides to make the API more pythonic
+
+-   The threading model has been made more explicit with safe guard to
+    make sure not thread safe APIs are not used from the wrong threads.
+    It is also now possible to properly handle in what thread the API
+    should be used.
+
+-   Optimized GESClip and GESTrackElement creation
+
+-   Added a way to compile out the old, unused and deprecated
+    GESPitiviFormatter
+
+-   Re implemented the timeline editing API making it faster and making
+    the code much more maintainable
+
+-   Simplified usage of nlecomposition outside GES by removing quirks in
+    it API usage and removing the need to treat it specially from an
+    application perspective.
+
+-   ges-launch-1.0:
+
+    -   Added support to add titles to the timeline
+    -   Enhance the help auto generating it from the code
+
+-   Deprecate ges_timeline_load_from_uri as loading the timeline should
+    be done through a project now
+
+-   MANY leaks have been plugged and the unit testsuite is now “leak
+    free”
+
+
+GStreamer validate
+
+-   Added an action type to verify the checksum of the sink last-sample
+
+-   Added an include keyword to validate scenarios
+
+-   Added the notion of variable in scenarios, with the set-vars keyword
+
+-   Started adding support for “performance” like tests by allowing to
+    define the number of dropped buffers or the minimum buffer frequency
+    on a specific pad
+
+-   Added a validateflow plugin which allows defining the data flow to
+    be seen on a particular pad and verifying that following runs match
+    the expectations
+
+-   Added support for appsrc based test definition so we can instrument
+    the data pushed into the pipeline from scenarios
+
+-   Added a mockdecryptor allowing adding tests with on encrypted files,
+    the element will potentially be instrumented with a validate
+    scenario
+
+-   gst-validate-launcher:
+
+    -   Cleaned up output
+
+    -   Changed the default for “muting” tests as user doesn’t expect
+        hundreds of windows to show up when running the testsuite
+
+    -   Fixed the outputted xunit files to be compatible with GitLab
+
+    -   Added support to run tests on media files in push mode (using
+        pushfile://)
+
+    -   Added support for running inside gst-build
+
+    -   Added support for running ssim tests on rendered files
+
+    -   Added a way to simply define tests on pipelines through a simple
+        .json file
+
+    -   Added a python app to easily run python testsuite reusing all
+        the launcher features
+
+    -   Added flatpak knowledge so we can print backtrace even when
+        running from within flatpak
+
+    -   Added a way to automatically generated “known issues”
+        suppressions lines
+
+    -   Added a way to rerun tests to check if they are flaky and added
+        a way to tolerate tests known to be flaky
+
+    -   Add a way to output html log files
+
+
+GStreamer Python Bindings
+
+-   add binding for gst_pad_set_caps()
+
+-   pygobject dependency requirement was bumped to >= 3.8
+
+-   new audiotestsrc, audioplot, and mixer plugin examples, and a
+    dynamic pipeline example
+
+
+GStreamer C# Bindings
+
+-   bindings for the GstWebRTC library
+
+
+GStreamer Rust Bindings
+
+The GStreamer Rust bindings are now officially part of the GStreamer
+project and are also maintained in the GStreamer GitLab.
 
-## Bugs fixed in 1.10
+The releases will generally not be synchronized with the releases of
+other GStreamer parts due to dependencies on other projects.
 
-More than [750 bugs][bugs-fixed-in-1.10] have been fixed during
-the development of 1.10.
+Also unlike the other GStreamer libraries, the bindings will not commit
+to full API stability but instead will follow the approach that is
+generally taken by Rust projects, e.g.:
+
+1)  0.12.X will be completely API compatible with all other 0.12.Y
+    versions.
+2)  0.12.X+1 will contain bugfixes and compatible new feature additions.
+3)  0.13.0 will _not_ be backwards compatible with 0.12.X but projects
+    will be able to stay at 0.12.X without any problems as long as they
+    don’t need newer features.
+
+The current stable release is 0.12.2 and the next release series will be
+0.13, probably around March 2019.
+
+At this point the bindings cover most of GStreamer core (except for most
+notably GstAllocator and GstMemory), and most parts of the app, audio,
+base, check, editing-services, gl, net. pbutils, player, rtsp,
+rtsp-server, sdp, video and webrtc libraries.
+
+Also included is support for creating subclasses of the following types
+and writing GStreamer plugins:
+
+-   gst::Element
+-   gst::Bin and gst::Pipeline
+-   gst::URIHandler and gst::ChildProxy
+-   gst::Pad, gst::GhostPad
+-   gst_base::Aggregator and gst_base::AggregatorPad
+-   gst_base::BaseSrc and gst_base::BaseSink
+-   gst_base::BaseTransform
+
+Changes to 0.12.X since 0.12.0
+
+Fixed
+
+-   PTP clock constructor actually creates a PTP instead of NTP clock
+
+Added
+
+-   Bindings for GStreamer Editing Services
+-   Bindings for GStreamer Check testing library
+-   Bindings for the encoding profile API (encodebin)
+
+-   VideoFrame, VideoInfo, AudioInfo, StructureRef implements Send and
+    Sync now
+-   VideoFrame has a function to get the raw FFI pointer
+-   From impls from the Error/Success enums to the combined enums like
+    FlowReturn
+-   Bin-to-dot file functions were added to the Bin trait
+-   gst_base::Adapter implements SendUnique now
+-   More complete bindings for the gst_video::VideoOverlay interface,
+    especially
+    gst_video::is_video_overlay_prepare_window_handle_message()
+
+Changed
+
+-   All references were updated from GitHub to freedesktop.org GitLab
+-   Fix various links in the README.md
+-   Link to the correct location for the documentation
+-   Remove GitLab badge as that only works with gitlab.com currently
+
+Changes in git master for 0.13
+
+Fixed
+
+-   gst::tag::Album is the album tag now instead of artist sortname
+
+Added
+
+-   Subclassing infrastructure was moved directly into the bindings,
+    making the gst-plugin crate deprecated. This involves many API
+    changes but generally cleans up code and makes it more flexible.
+    Take a look at the gst-plugins-rs crate for various examples.
+
+-   Bindings for CapsFeatures and Meta
+-   Bindings for
+    ParentBufferMeta,VideoMetaandVideoOverlayCompositionMeta`
+-   Bindings for VideoOverlayComposition and VideoOverlayRectangle
+-   Bindings for VideoTimeCode
+
+-   UniqueFlowCombiner and UniqueAdapter wrappers that make use of the
+    Rust compile-time mutability checks and expose more API in a safe
+    way, and as a side-effect implement Sync and Send now
+
+-   More complete bindings for Allocation Query
+-   pbutils functions for codec descriptions
+-   TagList::iter() for iterating over all tags while getting a single
+    value per tag. The old ::iter_tag_list() function was renamed to
+    ::iter_generic() and still provides access to each value for a tag
+-   Bus::iter() and Bus::iter_timed() iterators around the corresponding
+    ::pop\*() functions
+
+-   serde serialization of Value can also handle Buffer now
+
+-   Extensive comments to all examples with explanations
+-   Transmuxing example showing how to use typefind, multiqueue and
+    dynamic pads
+-   basic-tutorial-12 was ported and added
+
+Changed
+
+-   Rust 1.31 is the minimum supported Rust version now
+-   Update to latest gir code generator and glib bindings
+
+-   Functions returning e.g. gst::FlowReturn or other “combined” enums
+    were changed to return split enums like
+    Result<gst::FlowSuccess, gst::FlowError> to allow usage of the
+    standard Rust error handling.
+
+-   MiniObject subclasses are now newtype wrappers around the underlying
+    GstRc<FooRef> wrapper. This does not change the API in any breaking
+    way for the current usages, but allows MiniObjects to also be
+    implemented in other crates and makes sure rustdoc places the
+    documentation in the right places.
+
+-   BinExt extension trait was renamed to GstBinExt to prevent conflicts
+    with gtk::Bin if both are imported
+
+-   Buffer::from_slice() can’t possible return None
+
+-   Various clippy warnings
+
+
+GStreamer Rust Plugins
+
+Like the GStreamer Rust bindings, the Rust plugins are now officially
+part of the GStreamer project and are also maintained in the GStreamer
+GitLab.
+
+In the 0.3.x versions this contained infrastructure for writing
+GStreamer plugins in Rust, and a set of plugins.
+
+In git master that infrastructure was moved to the GLib and GStreamer
+bindings directly, together with many other improvements that were made
+possible by this, so the gst-plugins-rs repository only contains
+GStreamer elements now.
+
+Elements included are:
+
+-   Tutorials plugin: identity, rgb2gray and sinesrc with extensive
+    comments
+
+-   rsaudioecho, a port of the audiofx element
+
+-   rsfilesrc, rsfilesink
+
+-   rsflvdemux, a FLV demuxer. Not feature-equivalent with flvdemux yet
+
+-   threadshare plugin: ts-appsrc, ts-proxysrc/sink, ts-queue, ts-udpsrc
+    and ts-tcpclientsrc elements that use a fixed number of threads and
+    share them between instances. For more background about these
+    elements see Sebastian’s talk “When adding more threads adds more
+    problems - Thread-sharing between elements in GStreamer” at the
+    GStreamer Conference 2017.
+
+-   rshttpsrc, a HTTP source around the hyper/reqwest Rust libraries.
+    Not feature-equivalent with souphttpsrc yet.
+
+-   togglerecord, an element that allows to start/stop recording at any
+    time and keeps all audio/video streams in sync.
+
+-   mccparse and mccenc, parsers and encoders for the MCC closed caption
+    file format.
+
+Changes to 0.3.X since 0.3.0
+
+-   All references were updated from GitHub to freedesktop.org GitLab
+-   Fix various links in the README.md
+-   Link to the correct location for the documentation
+
+Changes in git master for 0.4
+
+-   togglerecord: Switch to parking_lot crate for mutexes/condition
+    variables for lower overhead
+-   Merge threadshare plugin here
+-   New closedcaption plugin with mccparse and mccenc elements
+-   New identity element for the tutorials plugin
+
+-   Register plugins statically in tests instead of relying on the
+    plugin loader to find the shared library in a specific place
+
+-   Update to the latest API changes in the GLib and GStreamer bindings
+-   Update to the latest versions of all crates
+
+
+Build and Dependencies
+
+-   The MESON BUILD SYSTEM BUILD IS NOW FEATURE-COMPLETE (*) and it is
+    now the recommended build system on all platforms and also used by
+    Cerbero to build GStreamer on all platforms. The Autotools build is
+    scheduled to be removed in the next cycle. Developers who currently
+    use gst-uninstalled should move to gst-build. The build option
+    naming has been cleaned up and made consistent and there are now
+    feature options to enable/disable plugins and various other features
+    on a case-by-case basis. (*) with the exception of plugin docs which
+    will be handled differently in future
+
+-   Symbol export in libraries is now controlled via explicit exports
+    using symbol visibility or export defines where supported, to ensure
+    consistency across all platforms. This also allows libraries to have
+    exports that vary based on detected platform features and configure
+    options as is the case with the GStreamer OpenGL integration library
+    for example. A few symbols that had been exported by accident in
+    earlier versions may no longer be exported. These symbols will not
+    have had declarations in any public header files then though and
+    would not have been usable.
+
+-   The GStreamer FFmpeg wrapper plugin (gst-libav) now depends on
+    FFmpeg 4.x and uses the new FFmpeg 4.x API and stopped relying on
+    ancient API that was removed with the FFmpeg 4.x release. This means
+    that it is no longer possible to build this module against an older
+    system-provided FFmpeg 3.x version. Use the internal FFmpeg 4.x copy
+    instead if you build using autotools, or use gst-libav 1.14.x
+    instead which targets the FFmpeg 3.x API and _should_ work fine in
+    combination with a newer GStreamer. It’s difficult for us to support
+    both old and new FFmpeg APIs at the same time, apologies for any
+    inconvenience caused.
+
+-   Hardware-accelerated Nvidia video encoder/decoder plugins nvdec and
+    nvenc can be built against CUDA Toolkit versions 9 and 10.0 now. The
+    dynlink interface has been dropped since it’s deprecated in 10.0.
+
+-   The (optional) OpenCV requirement has been bumped to >= 3.0.0 and
+    the plugin can also be built against OpenCV 4.x now.
+
+-   New sctp plugin based on usrsctp (for WebRTC data channels)
+
+Cerbero
+
+Cerbero is a meta build system used to build GStreamer plus dependencies
+on platforms where dependencies are not readily available, such as
+Windows, Android, iOS and macOS.
+
+Cerbero has seen a number of improvements:
+
+-   Cerbero has been ported to Python 3 and requires Python 3.5 or newer
+    now
+
+-   Source tarballs are now protected by checksums in the recipes to
+    guard against download errors and malicious takeover of projects or
+    websites. In addition, downloads are only allowed via secure
+    transports now and plain HTTP, FTP and git:// transports are not
+    allowed anymore.
+
+-   There is now a new fetch-bootstrap command which downloads sources
+    required for bootstrapping, with an optional --build-tools-only
+    argument to match the bootstrap --build-tools-only command.
+
+-   The bootstrap, build, package and bundle-source commands gained a
+    new --offline switch that ensures that only sources from the cache
+    are used and never downloaded via the network. This is useful in
+    combination with the fetch and fetch-bootstrap commands that acquire
+    sources ahead of time before any build steps are executed. This
+    allows more control over the sources used and when sources are
+    updated, and is particularly useful for build environments that
+    don’t have network access.
+
+-   bootstrap --assume-yes will automatically say ‘yes’ to any
+    interactive prompts during the bootstrap stage, such as those from
+    apt-get or yum.
+
+-   bootstrap --system-only will only bootstrap the system without build
+    tools.
+
+-   Manifest support: The build manifest can be used in continuous
+    integration (CI) systems to fixate the Git revision of certain
+    projects so that all builds of a pipeline are on the same reference.
+    This is used in GStreamer’s gitlab CI for example. It can also be
+    used in order to re-produce a specific build. To set a manifest, you
+    can set manifest = 'my_manifest.xml' in your configuration file, or
+    use the --manifest command line option. The command line option will
+    take precendence over anything specific in the configuration file.
+
+-   The new build-deps command can be used to build only the
+    dependencies of a recipe, without the recipe itself.
+
+-   new --list-variants command to list available variants
+
+-   variants can now be set on the command line via the -v option as a
+    comma-separated list. This overrides any variants set in any
+    configuration files.
+
+-   new qt5, intelmsdk and nvidia variants for enabling Qt5 and hardware
+    codec support. See the Enabling Optional Features with Variants
+    section in the Cerbero documentation for more details how to enable
+    and use these variants.
+
+-   A new -t / --timestamp command line switch makes commands print
+    timestamps
+
+
+Platform-specific changes and improvements
+
+Android
+
+-   toolchain: update compiler to clang and NDKr18. NDK r18 removed the
+    armv5 target and only has Android platforms that target at least
+    armv7 so the armv5 target is not useful anymore.
+
+-   The way that GIO modules are named has changed due to upstream GLib
+    natively adding support for loading static GIO modules. This means
+    that any GStreamer application using gnutls for SSL/TLS on the
+    Android or iOS platforms (or any other setup using static libraries)
+    will fail to link looking for the g_io_module_gnutls_load_static()
+    function. The new function name is now
+    g_io_gnutls_load(gpointer data). data can be NULL for a static
+    library. Look at this commit for the necessary change in the
+    examples.
+
+-   various build issues on Android have been fixed.
+
+macOS and iOS
+
+-   various build issues on iOS have been fixed.
+
+-   the minimum required iOS version is now 9.0. The difference in
+    adoption between 8.0 and 9.0 is 0.1% and the bump to 9.0 fixes some
+    build issues.
+
+-   The way that GIO modules are named has changed due to upstream GLib
+    natively adding support for loading static GIO modules. This means
+    that any GStreamer application using gnutls for SSL/TLS on the
+    Android or iOS platforms (or any other setup using static libraries)
+    will fail to link looking for the g_io_module_gnutls_load_static()
+    function. The new function name is now
+    g_io_gnutls_load(gpointer data). data can be NULL for a static
+    library. Look at this commit for the necessary change in the
+    examples.
+
+Windows
+
+-   The webrtcdsp element is shipped again as part of the Windows binary
+    packages, the build system issue has been resolved.
+
+-   ‘Inconsistent DLL linkage’ warnings when building with MSVC have
+    been fixed
+
+-   Hardware-accelerated Nvidia video encoder/decoder plugins nvdec and
+    nvenc build on Windows now, also with MSVC and using Meson.
+
+-   The ksvideosrc camera capture plugin supports 16-bit grayscale video
+    now
+
+-   The wasapisrc audio capture element implements loopback recording
+    from another output device or sink
+
+-   wasapisink recover from low buffer levels in shared mode and some
+    exclusive mode fixes
+
+-   dshowsrc now implements the GstDeviceMonitor interface
+
+
+Contributors
+
+Aaron Boxer, Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț,
+Alex Ashley, Alexey Chernov, Alicia Boya García, Amit Pandya, Andoni
+Morales Alastruey, Andreas Frisch, Andre McCurdy, Andy Green, Anthony
+Violo, Antoine Jacoutot, Antonio Ospite, Arun Raghavan, Aurelien Jarno,
+Aurélien Zanelli, ayaka, Bananahemic, Bastian Köcher, Branko Subasic,
+Brendan Shanks, Carlos Rafael Giani, Charlie Turner, Christoph Reiter,
+Corentin Noël, Daeseok Youn, Damian Vicino, Dan Kegel, Daniel Drake,
+Daniel Klamt, Danilo Spinella, Dardo D Kleiner, David Ing, David
+Svensson Fors, Devarsh Thakkar, Dimitrios Katsaros, Edward Hervey,
+Emilio Pozuelo Monfort, Enrique Ocaña González, Erlend Eriksen, Ezequiel
+Garcia, Fabien Dessenne, Fabrizio Gennari, Florent Thiéry, Francisco
+Velazquez, Freyr666, Garima Gaur, Gary Bisson, George Kiagiadakis, Georg
+Lippitsch, Georg Ottinger, Geunsik Lim, Göran Jönsson, Guillaume
+Desmottes, H1Gdev, Haihao Xiang, Haihua Hu, Harshad Khedkar, Havard
+Graff, He Junyan, Hoonhee Lee, Hosang Lee, Hyunjun Ko, Ilya Smelykh,
+Ingo Randolf, Iñigo Huguet, Jakub Adam, James Stevenson, Jan Alexander
+Steffens, Jan Schmidt, Jerome Laheurte, Jimmy Ohn, Joakim Johansson,
+Jochen Henneberg, Johan Bjäreholt, John-Mark Bell, John Bassett, John
+Nikolaides, Jonathan Karlsson, Jonny Lamb, Jordan Petridis, Josep Torra,
+Joshua M. Doe, Jos van Egmond, Juan Navarro, Julian Bouzas, Jun Xie,
+Junyan He, Justin Kim, Kai Kang, Kim Tae Soo, Kirill Marinushkin, Kyrylo
+Polezhaiev, Lars Petter Endresen, Linus Svensson, Louis-Francis
+Ratté-Boulianne, Lucas Stach, Luis de Bethencourt, Luz Paz, Lyon Wang,
+Maciej Wolny, Marc-André Lureau, Marc Leeman, Marco Trevisan (Treviño),
+Marcos Kintschner, Marian Mihailescu, Marinus Schraal, Mark Nauwelaerts,
+Marouen Ghodhbane, Martin Kelly, Matej Knopp, Mathieu Duponchelle,
+Matteo Valdina, Matthew Waters, Matthias Fend, memeka, Michael Drake,
+Michael Gruner, Michael Olbrich, Michael Tretter, Miguel Paris, Mike
+Wey, Mikhail Fludkov, Naveen Cherukuri, Nicola Murino, Nicolas Dufresne,
+Niels De Graef, Nirbheek Chauhan, Norbert Wesp, Ognyan Tonchev, Olivier
+Crête, Omar Akkila, Pat DeSantis, Patricia Muscalu, Patrick Radizi,
+Patrik Nilsson, Paul Kocialkowski, Per Forlin, Peter Körner, Peter
+Seiderer, Petr Kulhavy, Philippe Normand, Philippe Renon, Philipp Zabel,
+Pierre Labastie, Piotr Drąg, Roland Jon, Roman Sivriver, Roman Shpuntov,
+Rosen Penev, Russel Winder, Sam Gigliotti, Santiago Carot-Nemesio,
+Sean-Der, Sebastian Dröge, Seungha Yang, Shi Yan, Sjoerd Simons, Snir
+Sheriber, Song Bing, Soon, Thean Siew, Sreerenj Balachandran, Stefan
+Ringel, Stephane Cerveau, Stian Selnes, Suhas Nayak, Takeshi Sato,
+Thiago Santos, Thibault Saunier, Thomas Bluemel, Tianhao Liu,
+Tim-Philipp Müller, Tobias Ronge, Tomasz Andrzejak, Tomislav Tustonić,
+U. Artie Eoff, Ulf Olsson, Varunkumar Allagadapa, Víctor Guzmán, Víctor
+Manuel Jáquez Leal, Vincenzo Bono, Vineeth T M, Vivia Nikolaidou, Wang
+Fei, wangzq, Whoopie, Wim Taymans, Wind Yuan, Wonchul Lee, Xabier
+Rodriguez Calvar, Xavier Claessens, Haihao Xiang, Yacine Bandou,
+Yeongjin Jeong, Yuji Kuwabara, Zeeshan Ali,
+
+… and many others who have contributed bug reports, translations, sent
+suggestions or helped testing.
 
-This list does not include issues that have been cherry-picked into the
-stable 1.8 branch and fixed there as well, all fixes that ended up in the
-1.8 branch are also included in 1.10.
 
-This list also does not include issues that have been fixed without a bug
-report in bugzilla, so the actual number of fixes is much higher.
+Stable 1.16 branch
 
-[bugs-fixed-in-1.10]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=164074&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.8.1&target_milestone=1.8.2&target_milestone=1.8.3&target_milestone=1.8.4&target_milestone=1.9.1&target_milestone=1.9.2&target_milestone=1.9.90&target_milestone=1.10.0
+After the 1.16.0 release there will be several 1.16.x bug-fix releases
+which will contain bug fixes which have been deemed suitable for a
+stable branch, but no new features or intrusive changes will be added to
+a bug-fix release usually. The 1.16.x bug-fix releases will be made from
+the git 1.16 branch, which is a stable branch.
 
-## Stable 1.10 branch
+1.16.0
 
-After the 1.10.0 release there will be several 1.10.x bug-fix releases which
-will contain bug fixes which have been deemed suitable for a stable branch,
-but no new features or intrusive changes will be added to a bug-fix release
-usually. The 1.10.x bug-fix releases will be made from the git 1.10 branch,
-which is a stable branch.
+1.16.0 was released on 19 April 2019.
 
-### 1.10.0
 
-1.10.0 was released on 1st November 2016.
+Known Issues
 
-## Known Issues
+-   possibly breaking/incompatible changes to properties of wrapped
+    FFmpeg decoders and encoders (see above).
 
-- iOS builds with iOS 6 SDK and old C++ STL. You need to select iOS 6 instead
-  of 7 or 8 in your projects settings to be able to link applications.
-  [Bug #766366](https://bugzilla.gnome.org/show_bug.cgi?id=766366)
-- Code signing for Apple platforms has some problems currently, requiring
-  manual work to get your application signed. [Bug #771860](https://bugzilla.gnome.org/show_bug.cgi?id=771860)
-- Building applications with Android NDK r13 on Windows does not work. Other
-  platforms and earlier/later versions of the NDK are not affected.
-  [Bug #772842](https://bugzilla.gnome.org/show_bug.cgi?id=772842)
-- The new leaks tracer may deadlock the application (or exhibit other undefined
-  behaviour) when `SIGUSR` handling is enabled via the `GST_LEAKS_TRACER_SIG`
-  environment variable. [Bug #770373](https://bugzilla.gnome.org/show_bug.cgi?id=770373)
-- vp8enc crashes on 32 bit Windows, but was working fine in 1.6. 64 bit Windows is unaffected.
-  [Bug #763663](https://bugzilla.gnome.org/show_bug.cgi?id=763663)
+-   The way that GIO modules are named has changed due to upstream GLib
+    natively adding support for loading static GIO modules. This means
+    that any GStreamer application using gnutls for SSL/TLS on the
+    Android or iOS platforms (or any other setup using static libraries)
+    will fail to link looking for the g_io_module_gnutls_load_static()
+    function. The new function name is now
+    g_io_gnutls_load(gpointer data). See Android/iOS sections above for
+    further details.
 
-## Schedule for 1.12
 
-Our next major feature release will be 1.12, and 1.11 will be the unstable
-development version leading up to the stable 1.12 release. The development
-of 1.11/1.12 will happen in the git master branch.
+Schedule for 1.18
 
-The plan for the 1.12 development cycle is yet to be confirmed, but it is
-expected that feature freeze will be around early/mid-January,
-followed by several 1.11 pre-releases and the new 1.12 stable release
-in March.
+Our next major feature release will be 1.18, and 1.17 will be the
+unstable development version leading up to the stable 1.18 release. The
+development of 1.17/1.18 will happen in the git master branch.
 
-1.12 will be backwards-compatible to the stable 1.10, 1.8, 1.6, 1.4, 1.2 and
-1.0 release series.
+The plan for the 1.18 development cycle is yet to be confirmed, but it
+is possible that the next cycle will be a short one in which case
+feature freeze would be perhaps around August 2019 with a new 1.18
+stable release in September.
 
-- - -
+1.18 will be backwards-compatible to the stable 1.16, 1.14, 1.12, 1.10,
+1.8, 1.6, 1.4, 1.2 and 1.0 release series.
 
-*These release notes have been prepared by Olivier Crête, Sebastian Dröge,
-Nicolas Dufresne, Edward Hervey, Víctor Manuel Jáquez Leal, Tim-Philipp
-Müller, Reynaldo H. Verdejo Pinochet, Arun Raghavan, Thibault Saunier,
-Jan Schmidt, Wim Taymans, Matthew Waters*
+------------------------------------------------------------------------
 
-*License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*
+_These release notes have been prepared by Tim-Philipp Müller with_
+_contributions from Sebastian Dröge, Guillaume Desmottes, Matthew
+Waters, _ _Thibault Saunier, and Víctor Manuel Jáquez Leal._
 
+_License: CC BY-SA 4.0_