deinterleave: Allow switching between 1 channel configs
[platform/upstream/gst-plugins-good.git] / NEWS
diff --git a/NEWS b/NEWS
index ee7f213..1e860c4 100644 (file)
--- a/NEWS
+++ b/NEWS
-# GStreamer 1.8 Release Notes
 
-**GStreamer 1.8.0 was released on 24 March 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.8/][latest] for the latest
-version of this document.
-
-*Last updated: Thursday 24 March 2016, 10:00 UTC [(log)][gitlog]*
-
-[latest]: https://gstreamer.freedesktop.org/releases/1.8/
-[gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.8/release-notes-1.8.md
-
-## Highlights
-
-- **Hardware-accelerated zero-copy video decoding on Android**
-
-- **New video capture source for Android using the android.hardware.Camera API**
-
-- **Windows Media reverse playback** support (ASF/WMV/WMA)
-
-- **New tracing system** provides support for more sophisticated debugging tools
-
-- **New high-level GstPlayer playback convenience API**
-
-- **Initial support for the new [Vulkan][vulkan] API**, see
-  [Matthew Waters' blog post][vulkan-in-gstreamer] for more details
-
-- **Improved Opus audio codec support**: Support for more than two channels; MPEG-TS demuxer/muxer can now handle Opus;
-  [sample-accurate][opus-sample-accurate] encoding/decoding/transmuxing with
-  Ogg, Matroska, ISOBMFF (Quicktime/MP4), and MPEG-TS as container;
-  [new codec utility functions for Opus header and caps handling][opus-codec-utils]
-  in pbutils library. The Opus encoder/decoder elements were also moved to
-  gst-plugins-base (from -bad), and the opus RTP depayloader/payloader to -good.
-
-  [opus-sample-accurate]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta
-  [opus-codec-utils]:     https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
-
-- **GStreamer VAAPI module now released and maintained as part of the GStreamer project**
-
-  [vulkan]:              https://www.khronos.org/vulkan
-  [vulkan-in-gstreamer]: http://ystreet00.blogspot.co.uk/2016/02/vulkan-in-gstreamer.html
-
-## Major new features and changes
-
-### Noteworthy new API, features and other changes
-
-- New GstVideoAffineTransformationMeta meta for adding a simple 4x4 affine
-  transformation matrix to video buffers
-
-- [g\_autoptr()](https://developer.gnome.org/glib/stable/glib-Miscellaneous-Macros.html#g-autoptr)
-  support for all types is exposed in GStreamer headers now, in combination
-  with a sufficiently-new GLib version (i.e. 2.44 or later). This is primarily
-  for the benefit of application developers who would like to make use of
-  this, the GStreamer codebase itself will not be using g_autoptr() for
-  the time being due to portability issues.
-
-- GstContexts are now automatically propagated to elements added to a bin
-  or pipeline, and elements now maintain a list of contexts set on them.
-  The list of contexts set on an element can now be queried using the new functions
-  [gst\_element\_get\_context()](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-context)
-  and [gst\_element\_get\_contexts()](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-contexts). GstContexts are used to share context-specific configuration objects
-  between elements and can also be used by applications to set context-specific
-  configuration objects on elements, e.g. for OpenGL or Hardware-accelerated
-  video decoding.
-
-- New [GST\_BUFFER\_DTS\_OR\_PTS()](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#GST-BUFFER-DTS-OR-PTS:CAPS)
-  convenience macro that returns the decode timestamp if one is set and
-  otherwise returns the presentation timestamp
-
-- New GstPadEventFullFunc that returns a GstFlowReturn instead of a gboolean.
-  This new API is mostly for internal use and was added to fix a race condition
-  where occasionally internal flow error messages were posted on the bus when
-  sticky events were propagated at just the wrong moment whilst the pipeline
-  was shutting down. This happened primarily when the pipeline was shut down
-  immediately after starting it up. GStreamer would not know that the reason
-  the events could not be propagated was because the pipeline was shutting down
-  and not some other problem, and now the flow error allows GStreamer to know
-  the reason for the failure (and that there's no reason to post an error
-  message). This is particularly useful for queue-like elements which may need
-  to asynchronously propagate a previous flow return from downstream.
-
-- Pipeline dumps in form of "dot files" now also show pad properties that
-  differ from their default value, the same as it does for elements. This is
-  useful for elements with pad subclasses that provide additional properties,
-  e.g. videomixer or compositor.
-
-- Pad probes are now guaranteed to be called in the order they were added
-  (before they were called in reverse order, but no particular order was
-  documented or guaranteed)
-
-- Plugins can now have dependencies on device nodes (not just regular files)
-  and also have a prefix filter. This is useful for plugins that expose
-  features (elements) based on available devices, such as the video4linux
-  plugin does with video decoders on certain embedded systems.
+GStreamer 1.16 has not been released yet. It is scheduled for release in
+January/February 2019.
 
-- gst\_segment\_to\_position() has been deprecated and been replaced by the
-  better-named gst\_segment\_position\_from\_running\_time(). At the same time
-  gst\_segment\_position\_from\_stream\_time() was added, as well as \_full()
-  variants of both to deal with negative stream time.
+1.15.x is the unstable development version that is being developed in
+the git master branch and which will eventually result in 1.16.
 
-- GstController: the interpolation control source gained a new monotonic cubic
-  interpolation mode that, unlike the existing cubic mode, will never overshoot
-  the min/max y values set.
+1.16 will be backwards-compatible to the stable 1.14, 1.12, 1.10, 1.8,
+1.6, 1.4, 1.2 and 1.0 release series.
 
-- GstNetAddressMeta: can now be read from buffers in language bindings as well,
-  via the new gst\_buffer\_get\_net\_address\_meta() function
-
-- ID3 tag PRIV frames are now extraced into a new GST\_TAG\_PRIVATE\_DATA tag
-
-- gst-launch-1.0 and gst\_parse\_launch() now warn in the most common case if
-  a dynamic pad link could not be resolved, instead of just silently
-  waiting to see if a suitable pad appears later, which is often perceived
-  by users as hanging -- they are now notified when this happens and can check
-  their pipeline.
-
-- GstRTSPConnection now also parses custom RTSP message headers and retains
-  them for the application instead of just ignoring them
-
-- rtspsrc handling of  authentication over tunneled connections (e.g. RTSP over HTTP)
-  was fixed
-
-- gst\_video\_convert\_sample() now crops if there is a crop meta on the input buffer
-
-- The debugging system printf functions are now exposed for general use, which
-  supports special printf format specifiers such as GST\_PTR\_FORMAT and
-  GST\_SEGMENT\_FORMAT to print GStreamer-related objects. This is handy for
-  systems that want to prepare some debug log information to be output at a
-  later point in time. The GStreamer-OpenGL subsystem is making use of these
-  new functions, which are [gst\_info\_vasprintf()][gst_info_vasprintf],
-    [gst\_info\_strdup\_vprintf()][gst_info_strdup_vprintf] and
-    [gst\_info\_strdup\_printf()][gst_info_strdup_printf].
-
-- videoparse: "strides", "offsets" and "framesize" properties have been added to
-  allow parsing raw data with strides and padding that do not match GStreamer
-  defaults.
-
-- GstPreset reads presets from the directories given in GST\_PRESET\_PATH now.
-  Presets are read from there after presets in the system path, but before
-  application and user paths.
-
-[gst_info_vasprintf]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-info-vasprintf
-[gst_info_strdup_vprintf]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-info-strdup-vprintf
-[gst_info_strdup_printf]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-info-strdup-printf
-
-### New Elements
-
-- [netsim](): a new (resurrected) element to simulate network jitter and
-  packet dropping / duplication.
-
-- New VP9 RTP payloader/depayloader elements: rtpvp9pay/rtpvp9depay
-
-- New [videoframe_audiolevel]() element, a video frame synchronized audio level element
-
-- New spandsp-based tone generator source
-
-- New NVIDIA NVENC-based H.264 encoder for GPU-accelerated video encoding on
-  suitable NVIDIA hardware
-
-- [rtspclientsink](), a new RTSP RECORD sink element, was added to gst-rtsp-server
-
-- [alsamidisrc](), a new ALSA MIDI sequencer source element
-
-### Noteworthy element features and additions
-
-- *identity*: new ["drop-buffer-flags"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-identity.html#GstIdentity--drop-buffer-flags)
-  property to drop buffers based on buffer flags. This can be used to drop all
-  non-keyframe buffers, for example.
-
-- *multiqueue*: various fixes and improvements, in particular special handling
-  for sparse streams such as substitle streams, to make sure we don't overread
-  them any more. For sparse streams it can be normal that there's no buffer for
-  a long period of time, so having no buffer queued is perfectly normal. Before
-  we would often unnecessarily try to fill the subtitle stream queue, which
-  could lead to much more data being queued in multiqueue than necessary.
-
-- *multiqueue*/*queue*: When dealing with time limits, these elements now use the
-  new ["GST_BUFFER_DTS_OR_PTS"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#GST-BUFFER-DTS-OR-PTS:CAPS)
-  and ["gst_segment_to_running_time_full()"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSegment.html#gst-segment-to-running-time-full)
-  API, resulting in more accurate levels, especially when dealing with non-raw
-  streams (where reordering happens, and we want to use the increasing DTS as
-  opposed to the non-continuously increasing PTS) and out-of-segment input/output.
-  Previously all encoded buffers before the segment start, which can happen when
-  doing ACCURATE seeks, were not taken into account in the queue level calculation.
-
-- *multiqueue*: New ["use-interleave"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-multiqueue.html#GstMultiQueue--use-interleave)
-  property which allows the size of the queues to be optimized based on the input
-  streams interleave. This should only be used with input streams which are properly
-  timestamped. It will be used in the future decodebin3 element.
-
-- *queue2*: new ["avg-in-rate"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-queue2.html#GstQueue2--avg-in-rate)
-  property that returns the average input rate in bytes per second
-
-- audiotestsrc now supports all audio formats and is no longer artificially
-  limited with regard to the number of channels or sample rate
-
-- gst-libav (ffmpeg codec wrapper): map and enable JPEG2000 decoder
-
-- multisocketsink can, on request, send a custom GstNetworkMessage event
-  upstream whenever data is received from a client on a socket. Similarly,
-  socketsrc will, on request, pick up GstNetworkMessage events from downstream
-  and send any data contained within them via the socket. This allows for
-  simple bidirectional communication.
-
-- matroska muxer and demuxer now support the ProRes video format
+See https://gstreamer.freedesktop.org/releases/1.16/ for the latest
+version of this document.
 
-- Improved VP8/VP9 decoding performance on multi-core systems by enabling
-  multi-threaded decoding in the libvpx-based decoders on such systems
+_Last updated: Monday 14 January 2019, 13:00 UTC (log)_
 
-- appsink has a new ["wait-on-eos"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-appsink.html#GstAppSink--wait-on-eos)
-  property, so in cases where it is uncertain if an appsink will have a consumer for
-  its buffers when it receives an EOS this can be set to FALSE to ensure that the
-  appsink will not hang.
 
-- rtph264pay and rtph265pay have a new "config-interval" mode -1 that will
-  re-send the setup data (SPS/PPS/VPS) before every keyframe to ensure
-  optimal coverage and the shortest possibly start-up time for a new client
+Introduction
 
-- mpegtsmux can now mux H.265/HEVC video as well
+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!
 
-- The MXF muxer was ported to 1.x and produces more standard conformant files now
-  that can be handled by more other software; The MXF demuxer got improved
-  support for seek tables (IndexTableSegments).
+As always, this release is again packed with new features, bug fixes and
+other improvements.
 
-### Plugin moves
 
-- The rtph265pay/depay RTP payloader/depayloader elements for H.265/HEVC video
-  from the rtph265 plugin in -bad have been moved into the existing rtp plugin
-  in gst-plugins-good.
+Highlights
 
-- The mpg123 plugin containing a libmpg123 based audio decoder element has
-  been moved from -bad to -ugly.
+-   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.
 
-- The Opus encoder/decoder elements have been moved to gst-plugins-base and
-  the RTP payloader to gst-plugins-good, both coming from gst-plugins-bad.
+-   AV1 video codec support for Matroska and QuickTime/MP4 containers
+    and more configuration options and supported input formats for the
+    AOMedia AV1 encoder
 
-### New tracing tools for developers
+-   Support for Closed Captions and other Ancillary Data in video
 
-A new tracing subsystem API has been added to GStreamer, which provides
-external tracers with the possibility to strategically hook into GStreamer
-internals and collect data that can be evaluated later. These tracers are a
-new type of plugin features, and GStreamer core ships with a few example
-tracers (latency, stats, rusage, log) to start with. Tracers can be loaded
-and configured at start-up via an environment variable (GST\_TRACER\_PLUGINS).
+-   Spport for planar (non-interleaved) raw audio
 
-Background: While GStreamer provides plenty of data on what's going on in a
-pipeline via its debug log, that data is not necessarily structured enough to
-be generally useful, and the overhead to enable logging output for all data
-required might be too high in many cases. The new tracing system allows tracers
-to just obtain the data needed at the right spot with as little overhead as
-possible, which will be particularly useful on embedded systems.
+-   GstVideoAggregator, compositor and OpenGL mixer elements are now in
+    -base
 
-Of course it has always been possible to do performance benchmarks and debug
-memory leaks, memory consumption and invalid memory access using standard
-operating system tools, but there are some things that are difficult to track
-with the standard tools, and the new tracing system helps with that. Examples
-are things such as latency handling, buffer flow, ownership transfer of
-events and buffers from element to element, caps negotiation, etc.
+-   New alternate fields interlace mode where each buffer carries a
+    single field
 
-For some background on the new tracing system, watch Stefan Sauer's
-GStreamer Conference talk ["A new tracing subsystem for GStreamer"][tracer-0]
-and for a more specific example how it can be useful have a look at
-Thiago Santos's lightning talk ["Analyzing caps negotiation using GstTracer"][tracer-1]
-and his ["GstTracer experiments"][tracer-2] blog post. There was also a Google
-Summer of Code project in 2015 that used tracing system for a graphical
-GStreamer debugging tool ["gst-debugger"][tracer-3].
-
-This is all still very much work in progress, but we hope this will provide the
-foundation for a whole suite of new debugging tools for GStreamer pipelines.
-
-[tracer-0]: https://gstconf.ubicast.tv/videos/a-new-tracing-subsystem-for-gstreamer/
-[tracer-1]: https://gstconf.ubicast.tv/videos/analyzing-caps-negotiation-using-gsttracer/
-[tracer-2]: http://blog.thiagoss.com/2015/07/23/gsttracer-experiments/
-[tracer-3]: https://git.gnome.org/browse/gst-debugger
-
-### GstPlayer: a new high-level API for cross-platform multimedia playback
-
-GStreamer has had reasonably high-level API for multimedia playback
-in the form of the playbin element for a long time. This allowed application
-developers to just configure a URI to play, and playbin would take care of
-everything else. This works well, but there is still way too much to do on
-the application-side to implement a fully-featured playback application, and
-too much general GStreamer pipeline API exposed, making it less accessible
-to application developers.
+-   WebM and Matroska ContentEncryption support in the Matroska demuxer
 
-Enter GstPlayer. GstPlayer's aim is to provide an even higher-level abstraction
-of a fully-featured playback API but specialised for its specific use case. It
-also provides easy integration with and examples for Gtk+, Qt, Android, OS/X,
-iOS and Windows. Watch Sebastian's [GstPlayer talk at the GStreamer Conference][gstplayer-talk]
-for more information, or check out the [GstPlayer API reference][gstplayer-api]
-and [GstPlayer examples][gstplayer-examples].
+-   new WebKit WPE-based web browser source element
 
-[gstplayer-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/player.html
-[gstplayer-talk]: https://gstconf.ubicast.tv/videos/gstplayer-a-simple-cross-platform-api-for-all-your-media-playback-needs-part-1/
-[gstplayer-examples]: https://github.com/sdroege/gst-player/
+-   Video4Linux: HEVC encoding and decoding, JPEG encoding, and improved
+    dmabuf import/export
 
-### Adaptive streaming: DASH, HLS and MSS improvements
+-   Hardware-accelerated Nvidia video decoder gained support for VP8/VP9
+    decoding, whilst the encoder gained support for H.265/HEVC encoding.
 
-- dashdemux now supports loading external xml nodes pointed from its MPD.
-
-- Content protection nodes parsing support for PlayReady WRM in mssdemux.
+-   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.
 
-- Reverse playback was improved to respect seek start and stop positions.
+-   The ASS/SSA subtitle overlay renderer can now handle multiple
+    subtitles that overlap in time and will show them on screen
+    simultaneously
 
-- Adaptive demuxers (hlsdemux, dashdemux, mssdemux) now support the SNAP_AFTER
-  and SNAP_BEFORE seek flags which will jump to the nearest fragment boundary
-  when executing a seek, which means playback resumes more quickly after a seek.
+-   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.
 
-### Audio library improvements
+-   The GStreamer Rust bindings and Rust plugins module are now
+    officially part of upstream GStreamer.
 
-- audio conversion, quantization and channel up/downmixing functionality
-  has been moved from the audioconvert element into the audio library and
-  is now available as public API in form of [GstAudioConverter][audio-0],
-  [GstAudioQuantize][audio-1] and [GstAudioChannelMixer][audio-2].
-  Audio resampling will follow in future releases.
+-   Many performance improvements
 
-- [gst\_audio\_channel\_get\_fallback\_mask()][audio-3] can be used
-  to retrieve a default channel mask for a given number of channels as last
-  resort if the layout is unknown
 
-- A new [GstAudioClippingMeta][audio-4] meta was added for specifying clipping
-  on encoded audio buffers
+Major new features and changes
 
-- A new GstAudioVisualizer base class for audio visualisation elements;
-  most of the existing visualisers have been ported over to the new base class.
-  This new base class lives in the pbutils library rather than the audio library,
-  since we'd have had to make libgstaudio depend on libgstvideo otherwise,
-  which was deemed undesirable.
+Noteworthy new API
 
-[audio-0]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstAudioConverter.html
-[audio-1]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstAudioQuantize.html
-[audio-2]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiochannels.html#gst-audio-channel-mix-new
-[audio-3]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiochannels.html#gst-audio-channel-get-fallback-mask
-[audio-4]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta
+-   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.
 
-### GStreamer OpenGL support improvements
+-   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 “v4lsrc ! xvimagesink” not claim that all frames are late in
+    the QoS events. Ideally, this should replace max_lateness for most
+    applications.
 
-#### Better OpenGL Shader support
+-   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.
 
-[GstGLShader][shader] has been revamped to allow more OpenGL shader types
-by utilizing a new GstGLSLStage object.  Each stage holds an OpenGL pipeline
-stage such as a vertex, fragment or a geometry shader that are all compiled
-separately into a program that is executed.
+-   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 glshader element has also received a revamp as a result of the changes in
-the library.  It does not take file locations for the vertex and fragment
-shaders anymore.  Instead it takes the strings directly leaving the file
-management to the application.
+-   The video library has gained support for three new raw pixel
+    formats:
 
-A new [example][liveshader-example] was added utilizing the new shader
-infrastructure showcasing live shader edits.
+    -   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
 
-[shader]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstglshader.html
-[liveshader-example]: https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/tests/examples/gtk/glliveshader.c
+-   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.
 
-#### OpenGL GLMemory rework
+-   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
 
-[GstGLMemory] was extensively reworked to support the addition of multiple
-texture targets required for zero-copy integration with the Android
-MediaCodec elements.  This work was also used to provide IOSurface based
-GLMemory on OS X for zero-copy with OS X's VideoToolbox decoder (vtdec) and
-AV Foundation video source (avfvideosrc).  There are also patches in bugzilla
-for GstGLMemoryEGL specifically aimed at improving the decoding performance on
-the Raspberry Pi.
+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, but it
+was never actually properly implemented in any elements. audioconvert
+would advertise support for it, but wasn’t actually able to handle it.
+
+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 (Video 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 (Video 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
+
+-   line21decoder: extract line21 closed captions 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 extracts Closed Captions from MPEG-2 video streams
+
+-   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 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.
+
+-   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,
+    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
+    who 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
+
+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 also 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 unset
+    where it’s a problem. Some servers only allow a limited number of
+    concurren clients, so if no proper TEARDOWN is sent 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()
+
+-   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
+
+-   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"1 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.
+
+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 gststereo plugin
+    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][aggregator]. 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.
+
+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 gstopenglmixers 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 them
+    around for a licensed mp3 decoder now that 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
+
+-   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), andGstVideoOverlayComposition`
+    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.
 
-[GstGLMemory]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstglmemory.html
+-   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.
 
-A texture-target field was added to video/x-raw(memory:GLMemory) caps to signal
-the texture target contained in the GLMemory.  Its values can be 2D, rectangle
-or external-oes.  glcolorconvert can convert between the different formats as
-required and different elements will accept or produce different targets.  e.g.
-glimagesink can take and render external-oes textures directly as required for
-effecient zero-copy on android.
+-   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.
 
-A generic GL allocation framework was also implemented to support the generic
-allocation of OpenGL buffers and textures which is used extensively by
-GstGLBufferPool.
+-   gst_audio_buffer_truncate() convenience function to truncate a raw
+    audio buffer
+
+
+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 different 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!
+
+OpenGL integration
+
+-   The OpenGL mixer elements have been moved from -bad to
+    gst-plugins-base (see above)
+
+-   The Mesa GBM backend now supports headless mode
+
+-   gloverlaycompositor: New OpenGL-based compositor element that
+    flattens any overlays from GstVideoOverlayCompositionMetas into the
+    video stream.
+
+-   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.
+
+-   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.
+
+
+Tracing framework and debugging improvements
+
+-   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].
+
+-   GDB EXTENSION WITH TWO CUSTOM GDB COMMANDS gst-dot AND gst-print:
+
+    -   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.
 
-#### OpenGL DMABuf import uploader
+    -   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:
 
-There is now a DMABuf uploader available for automatic selection that will
-attempt to import the upstream provided DMABuf.  The uploader will import into
-2D textures with the necesarry format.  YUV to RGB conversion is still provided
-by glcolorconvert to avoid the laxer restrictions with external-oes textures.
+                (gdb) gst-print pad.object.parent
+                GstMatroskaDemux (matroskademux0) {
+                    SinkPad (sink, pull) {
+                    }
+                    SrcPad (video_0, push) {
+                      events:
+                        stream-start:
+                          stream-id: 0463ccb080d00b8689bf569a435c4ff84f9ff753545318ae2328ea0763fd0bec/001:1274058367
+                        caps: video/x-theora
+                          width: 1920
+                          height: 800
+                          pixel-aspect-ratio: 1/1
+                          framerate: 24/1
+                          streamheader: < 0x5555557c7d30 [GstBuffer], 0x5555557c7e40 [GstBuffer], 0x7fffe00141d0 [GstBuffer] >
+                        segment: time
+                          rate: 1
+                        tag: global
+                          container-format: Matroska
+                    }
+                    SrcPad (audio_0, push) {
+                      events:
+                        stream-start:
+                          stream-id: 0463ccb080d00b8689bf569a435c4ff84f9ff753545318ae2328ea0763fd0bec/002:1551204875
+                        caps: audio/mpeg
+                          mpegversion: 4
+                          framed: true
+                          stream-format: raw
+                          codec_data: 0x7fffe0014500 [GstBuffer]
+                          level: 2
+                          base-profile: lc
+                          profile: lc
+                          channels: 2
+                          rate: 44100
+                        segment: time
+                          rate: 1
+                        tag: global
+                          container-format: Matroska
+                        tag: stream
+                          audio-codec: MPEG-4 AAC audio
+                          language-code: en
+                    }
+                }
 
-#### OpenGL queries
+-   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.
 
-Queries of various aspects of the OpenGL runtime such as timers, number of
-samples or the current timestamp are not possible.  The GstGLQuery object uses a
-delayed debug system to delay the debug output to later to avoid expensive calls
-to the glGet\* family of functions directly after finishing a query.  It is
-currently used to output the time taken to perform various operations of texture
-uploads and downloads in GstGLMemory.
 
-#### New OpenGL elements
+Tools
 
-glcolorbalance has been created mirroring the videobalance elements.
-glcolorbalance provides the exact same interface as videobalance so can be used
-as a GPU accelerated replacement.  glcolorbalance has been added to glsinkbin so
-usage with playsink/playbin will use it automatically instead of videobalance
-where possible.
+-   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. 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-colors command line option.
 
-glvideoflip, which is the OpenGL equiavalant of videoflip, implements the exact
-same interface and functionality as videoflip.
 
-#### EGL implementation now selects OpenGL 3.x
+GStreamer RTSP server
 
-The EGL implementation can now select OpenGL 3.x contexts.
+-   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.
 
-#### OpenGL API removal
+-   Initial ULP Forward Error Correction support in rtspclientsink and
+    for RECORD mode in the server.
 
-The GstGLDownload library object was removed as it was not used by anything.
-Everything is performed by GstGLMemory or in the gldownloadelement.
+-   API to explicitly enable retransmission requests (RTX)
 
-The GstGLUploadMeta library object was removed as it was not being used and we
-don't want to promote the use of GstVideoGLTextureUploadMeta.
+-   Lots of multicast-related fixes
 
-#### OpenGL: Other miscellaneous changes
+-   rtsp-auth: Add support for parsing .htdigest files
 
-- The EGL implementation can now select OpenGL 3.x contexts.  This brings
-  OpenGL 3.x to e.g. wayland and other EGL systems.
 
-- glstereomix/glstereosplit are now built and are usable on OpenGL ES systems
+GStreamer VAAPI
 
-- The UYVY/YUY2 to RGBA and RGBA to UYVY/YUY2 shaders were fixed removing the
-  sawtooth pattern and luma bleeding.
+-   this section will be filled in in due course
 
-- We now utilize the GL\_APPLE\_sync extension on iOS devices which improves
-  performance of OpenGL applications, especially with multiple OpenGL
-  contexts.
 
-- glcolorconvert now uses a bufferpool to avoid costly
-  glGenTextures/glDeleteTextures for every frame.
+GStreamer Editing Services and NLE
 
-- glvideomixer now has full glBlendFunc and glBlendEquation support per input.
+-   this section will be filled in in due course
 
-- gltransformation now support navigation events so your weird transformations
-  also work with DVD menus.
 
-- qmlglsink can now run on iOS, OS X and Android in addition to the already
-  supported Linux platform.
+GStreamer validate
 
-- glimagesink now posts unhandled keyboard and mouse events (on backends that
-  support user input, current only X11) on the bus for the application.
+-   this section will be filled in in due course
 
-### Initial GStreamer Vulkan support
 
-Some new elements, vulkansink and vulkanupload have been implemented utilizing
-the new Vulkan API.  The implementation is currently limited to X11 platforms
-(via xcb) and does not perform any scaling of the stream's contents to the size
-of the available output.
+GStreamer Python Bindings
 
-A lot of infrasctructure work has been undertaken to support using Vulkan in
-GStreamer in the future.  A number of GstMemory subclasses have been created for
-integrating Vulkan's GPU memory handling along with VkBuffer's and VkImage's
-that can be passed between elements.  Some GStreamer refcounted wrappers for
-global objects such as VkInstance, VkDevice, VkQueue, etc have also been
-implemented along with GstContext integration for sharing these objects with the
-application.
+-   add binding for gst_pad_set_caps()
 
-### GStreamer VAAPI support for hardware-accelerated video decoding and encoding on Intel (and other) platforms
+-   pygobject dependency requirement was bumped to >= 3.8
 
-#### GStreamer VAAPI is now part of upstream GStreamer
+-   new audiotestsrc, audioplot, and mixer plugin examples, and a
+    dynamic pipeline example
 
-The GStreamer-VAAPI module which provides support for hardware-accelerated
-video decoding, encoding and post-processing on Intel graphics hardware
-on Linux has moved from its previous home at the [Intel Open Source Technology Center][iostc]
-to the upstream GStreamer repositories, where it will in future be maintained
-as part of the upstream GStreamer project and released in lockstep with the
-other GStreamer modules. The current maintainers will continue to spearhead
-the development at the new location:
 
-[http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/][gst-vaapi-git]
+GStreamer C# Bindings
 
-[gst-vaapi-git]: http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/
+-   bindings for the GstWebRTC library
 
-GStreamer-VAAPI relies heavily on certain GStreamer infrastructure API that
-is still in flux such as the OpenGL integration API or the codec parser
-libraries, and one of the goals of the move was to be able to leverage
-new developments early and provide tighter integration with the latest
-developments of those APIs and other graphics-related APIs provided by
-GStreamer, which should hopefully improve performance even further and in
-some cases might also provide better stability.
 
-Thanks to everyone involved in making this move happen!
+GStreamer Rust Bindings
 
-#### GStreamer VAAPI: Bug tracking
+The GStreamer Rust bindings are now officially part of the GStreamer
+project and are also maintained in the GStreamer GitLab.
 
-Bugs had already been tracked on [GNOME bugzilla](bgo) but will be moved
-from the gstreamer-vaapi product into a new gstreamer-vaapi component of
-the GStreamer product in bugzilla. Please file new bugs against the new
-component in the GStreamer product from now on.
+The releases will generally not be synchronized with the releases of
+other GStreamer parts due to dependencies on other projects.
 
-#### GStreamer VAAPI: Pending patches
+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.:
 
-The code base has been re-indented to the GStreamer code style, which
-affected some files more than others. This means that some of the patches
-in bugzilla might not apply any longer, so if you have any unmerged patches
-sitting in bugzilla please consider checking if they still apply cleany and
-refresh them if not. Sorry for any inconvenience this may cause.
+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.
 
-#### GStreamer VAAPI: New versioning scheme and supported GStreamer versions
+The current stable release is 0.12.2 and the next release series will be
+0.13, probably around March 2019.
 
-The version numbering has been changed to match the GStreamer version
-numbering to avoid confusion: there is a new gstreamer-vaapi 1.6.0 release
-and a 1.6 branch that is roughly equivalent to the previous 0.7.0 version.
-Future releases 1.7.x and 1.8.x will be made alongside GStreamer releases.
+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.
 
-While it was possible and supported by previous releases to build against
-a whole range of different GStreamer versions (such as 1.2, 1.4, 1.6 or 1.7/1.8),
-in the future there will only be one target branch, so that git master will
-track GStreamer git master, 1.8.x will target GStreamer 1.8, and
-1.6.x will target the 1.6 series.
+Also included is support for creating subclasses of the following types
+and writing GStreamer plugins:
 
-[iostc]: http://01.org
-[bgo]:   http://bugzilla.gnome.og
+-   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
 
-#### GStreamer VAAPI: Miscellaneous changes
+Changes to 0.12.X since 0.12.0
 
-All GStreamer-VAAPI functionality is now provided solely by its GStreamer
-elements. There is no more public library exposing GstVaapi API, this API
-was only ever meant for private use by the elements. Parts of it may be
-resurrected again in future if needed, but for now it has all been made
-private.
+Fixed
 
-GStreamer-VAAPI now unconditionally uses the codecparser library in
-gst-plugins-bad instead of shipping its own internal copy. Similarly,
-it no longer ships its own codec parsers but relies on the upstream
-codec parser elements.
+-   PTP clock constructor actually creates a PTP instead of NTP clock
 
-The GStreamer-VAAPI encoder elements have been renamed from vaapiencode_foo
-to vaapifooenc, so encoders are now called vaapih264enc, vaapih265enc,
-vaapimpeg2enc, vaapijpegenc, and vaapivp8enc. With this change we now follow
-the standard names in GStreamer, and the plugin documentation is generated
-correctly.
+Added
 
-In the case of the decoders, only the jpeg decoder has been split from the
-general decoding element vaapidecode: vaapijpegdec. This is the first step to
-split per codec each decoding element. The vaapijpegdec has also been given
-marginal rank for the time being.
+-   Bindings for GStreamer Editing Services
+-   Bindings for GStreamer Check testing library
+-   Bindings for the encoding profile API (encodebin)
 
-#### GStreamer VAAPI: New features in 1.8: 10-bit H.265/HEVC decoding support
+-   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()
 
-Support for decoding 10-bit H.265/HEVC has been added. For the time being
-this only works in combination with vaapisink though, until support for the
-P010 video format used internally is added to GStreamer and to the
-vaGetImage()/vaPutimage() API in the vaapi-intel-driver.
+Changed
 
-Several fixes for memory leaks, build errors, and in the internal
-video parsing.
+-   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
 
-Finally, vaapisink now posts the unhandled keyboard and mouse events to the
-application.
+Changes in git master for 0.13
 
-### GStreamer Video 4 Linux Support
+Fixed
 
-Colorimetry support has been enhanced even more. It will now properly select
-default values when not specified by the driver. The range of color formats
-supported by GStreamer has been greatly improved. Notably, support for
-multi-planar I420 has been added along with all the new and non-ambiguous RGB
-formats that got added in recent kernels.
+-   gst::tag::Album is the album tag now instead of artist sortname
 
-The device provider now exposes a variety of properties as found in the udev
-database.
+Added
 
-The video decoder is now able to negotiate the downstream format.
+-   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.
 
-Elements that are dynamically created from /dev/video\* now track changes on
-these devices to ensure the registry stay up to date.
+-   Bindings for CapsFeatures and Meta
+-   Bindings for
+    ParentBufferMeta,VideoMetaandVideoOverlayCompositionMeta`
+-   Bindings for VideoOverlayComposition and VideoOverlayRectangle
+-   Bindings for VideoTimeCode
 
-All this and various bug fixes that improve both stability and correctness.
+-   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
 
-### GStreamer Editing Services
+-   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
 
-Added APIs to handle asset proxying support. Proxy creation is not the
-responsibility of GES itself, but GES provides all the needed features
-for it to be cleanly handled at a higher level.
+-   serde serialization of Value can also handle Buffer now
 
-Added support for changing playback rate.  This means that now, whenever a
-user adds a 'pitch' element (as it is the only known element to change playback
-rate through properties), GES will handle everything internally. This change
-introduced a new media-duration-factor property in NleObject which will
-lead to tweaking of seek events so they have the proper playback range to be
-requested upstream.
+-   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
 
-Construction of NLE objects has been reworked making copy/pasting fully
-functional and allowing users to set properties on effects right after
-creating them.
+Changed
 
-Rework of the title source to add more flexibility in text positioning,
-and letting the user get feedback about rendered text positioning.
+-   Rust 1.31 is the minimum supported Rust version now
+-   Update to latest gir code generator and glib bindings
 
-Report nlecomposition structural issues (coming from user programing mistakes)
-into ERROR messages on the bus.
+-   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.
 
-Add GI/pythyon testsuite in GES itself, making sure the API is working as expected
-in python, and allowing writing tests faster.
+-   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.
 
-### GstValidate
+-   BinExt extension trait was renamed to GstBinExt to prevent conflicts
+    with gtk::Bin if both are imported
 
-Added support to run tests inside gdb.
+-   Buffer::from_slice() can’t possible return None
 
-Added a 'smart' reporting mode where we give as much information as possible about
-critical errors.
+-   Various clippy warnings
 
-Uses GstTracer now instead of a LD\_PRELOAD library.
 
-## Miscellaneous
+GStreamer Rust Plugins
 
-- encodebin now works with "encoder-muxers" such as wavenc
+Like the GStreamer Rust bindings, the Rust plugins are now officially
+part of the GStreamer project and are also maintained in the GStreamer
+GitLab.
 
-- gst-play-1.0 acquired a new keyboard shortcut: '0' seeks back to the start
+In the 0.3.x versions this contained infrastructure for writing
+GStreamer plugins in Rust, and a set of plugins.
 
-- gst-play-1.0 supports two new command line switches: -v for verbose output
-  and --flags to configure the playbin flags to use.
+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.
 
-## Build and Dependencies
+Elements included are:
 
-- The GLib dependency requirement was bumped to 2.40
+-   Tutorials plugin: identity, rgb2gray and sinesrc with extensive
+    comments
 
-- The -Bsymbolic configure check now works with clang as well
+-   rsaudioecho, a port of the audiofx element
 
-- ffmpeg is now required as libav provider, incompatible changes were
-  introduced that make it no longer viable to support both FFmpeg and Libav
-  as libav providers. Most major distros have switched to FFmpeg or are in
-  the process of switching to it anyway, so we don't expect this to be a
-  problem, and there is still an internal copy of ffmpeg that can be used
-  as fallback if needed.
+-   rsfilesrc, rsfilesink
 
-- The internal ffmpeg snapshot is now FFMpeg 3.0, but it should be possible
-  to build against 2.8 as well for the time being.
+-   rsflvdemux, a FLV demuxer. Not feature-equivalent with flvdemux yet
 
-## Platform-specific improvements
+-   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.
 
-### Android
+-   rshttpsrc, a HTTP source around the hyper/reqwest Rust libraries.
+    Not feature-equivalent with souphttpsrc yet.
 
-- Zero-copy video decoding on Android using the hardware-accelerated decoders
-  has been implemented, and is fully integrated with the GStreamer OpenGL stack
+-   togglerecord, an element that allows to start/stop recording at any
+    time and keeps all audio/video streams in sync.
 
-- ahcsrc, a new camera source element, has been merged and can be used to
-  capture video on android devices. It uses the android.hardware.Camera Java
-  API to capture from the system's cameras.
+-   mccparse and mccenc, parsers and encoders for the MCC closed caption
+    file format.
 
-- The OpenGL-based QML video sink can now also be used on Android
+Changes to 0.3.X since 0.3.0
 
-- New tinyalsasink element, which is mainly useful for Android but can also
-  be used on other platforms.
+-   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
 
-### OS/X and iOS
+Changes in git master for 0.4
 
-- The system clock now uses mach\_absolute\_time() on OSX/iOS, which is
-  the preferred high-resolution monotonic clock to be used on Apple platforms
+-   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
 
-- The OpenGL-based QML video sink can now also be used on OS X and iOS (with
-  some Qt build system massaging)
+-   Register plugins statically in tests instead of relying on the
+    plugin loader to find the shared library in a specific place
 
-- New IOSurface based memory implementation in avfvideosrc and vtdec on OS X
-  for zerocopy with OpenGL.  The previously used OpenGL extension
-  GL_APPLE_ycbcr_422 is not compatible with GL 3.x core contexts.
+-   Update to the latest API changes in the GLib and GStreamer bindings
+-   Update to the latest versions of all crates
 
-- New GstAppleCoreVideoMemory wrapping CVPixelBuffer's
 
-- avfvideosrc now supports renegotiation.
+Build and Dependencies
 
-### Windows
+-   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
 
-- Various bugs with UDP and multicast were fixed on Windows, mostly related to
-  gst-rtsp-server.
+-   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.
 
-- A few bugs in directsoundsrc and directsoundsink were fixed that could cause
-  the element to lock up. Also the "mute" property on the sink was fixed, and
-  a new "device" property for device selection was added to the source.
+-   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)
+
+
+Platform-specific changes and improvements
+
+Android
+
+-   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.
+
+macOS and iOS
+
+-   macOS binaries should be fully relocatable now
+
+-   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
+
+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, Christoph Reiter, Corentin Noël,
+Daeseok Youn, Daniel Drake, Daniel Klamt, Dardo D Kleiner, David Ing,
+David Svensson Fors, Devarsh Thakkar, Dimitrios Katsaros, Edward Hervey,
+Emilio Pozuelo Monfort, Enrique Ocaña González, 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, Ingo Randolf, Iñigo Huguet, James
+Stevenson, Jan Alexander Steffens, Jan Schmidt, Jerome Laheurte, Jimmy
+Ohn, Joakim Johansson, Jochen Henneberg, Johan Bjäreholt, John-Mark
+Bell, John Nikolaides, Jonathan Karlsson, Jonny Lamb, Jordan Petridis,
+Josep Torra, Joshua M. Doe, Jos van Egmond, Juan Navarro, Jun Xie,
+Junyan He, Justin Kim, Kai Kang, Kim Tae Soo, Kirill Marinushkin, Kyrylo
+Polezhaiev, Lars Petter Endresen, Linus Svensson, Louis-Francis
+Ratté-Boulianne, Luis de Bethencourt, Luz Paz, Lyon Wang, Maciej Wolny,
+Marc-André Lureau, Marc Leeman, 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,
+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, Roland Jon, Roman
+Sivriver, Rosen Penev, Russel Winder, Sam Gigliotti, Sean-Der, Sebastian
+Dröge, Seungha Yang, 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, 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.
 
-## Known Issues
 
-- Building GStreamer applications with the Android NDK r11 is currently not
-  supported due to incompatible changes in the NDK. This is expected to be
-  fixed for 1.8.1.
-  [Bugzilla #763999](https://bugzilla.gnome.org/show_bug.cgi?id=763999)
+Bugs fixed in 1.16
 
-- vp8enc crashes on 32 bit Windows, but was working fine in 1.6. 64 bit
-  Windows is unaffected.
-  [Bugzilla #763663](https://bugzilla.gnome.org/show_bug.cgi?id=763663)
+-   this section will be filled in in due course
 
-## Contributors
+More than XXX bugs have been fixed during the development of 1.16.
 
-Adam Miartus, Alban Bedel, Aleix Conchillo Flaqué, Aleksander Wabik,
-Alessandro Decina, Alex Ashley, Alex Dizengof, Alex Henrie, Alistair Buxton,
-Andreas Cadhalpun, Andreas Frisch, André Draszik, Anthony G. Basile,
-Antoine Jacoutot, Anton Bondarenko, Antonio Ospite, Arjen Veenhuizen,
-Arnaud Vrac, Arun Raghavan, Athanasios Oikonomou, Aurélien Zanelli, Ben Iofel,
-Bob Holcomb, Branko Subasic, Carlos Rafael Giani, Chris Bass, Csaba Toth,
-Daniel Kamil Kozar, Danilo Cesar Lemes de Paula, Dave Craig, David Fernandez,
-David Schleef, David Svensson Fors, David Waring, David Wu, Duncan Palmer,
-Edward Hervey, Egor Zaharov, Etienne Peron, Eunhae Choi, Evan Callaway,
-Evan Nemerson, Fabian Orccon, Florent Thiéry, Florin Apostol, Frédéric Wang,
-George Kiagiadakis, George Yunaev, Göran Jönsson, Graham Leggett,
-Guillaume Desmottes, Guillaume Marquebielle, Haihua Hu, Havard Graff,
-Heinrich Fink, Holger Kaelberer, HoonHee Lee, Hugues Fruchet, Hyunil Park,
-Hyunjun Ko, Ilya Konstantinov, James Stevenson, Jan Alexander Steffens (heftig),
-Jan Schmidt, Jason Litzinger, Jens Georg, Jimmy Ohn, Joan Pau Beltran,
-Joe Gorse, John Chang, John Slade, Jose Antonio Santos Cadenas, Josep Torra,
-Julian Bouzas, Julien Isorce, Julien Moutte, Justin Kim, Kazunori Kobayashi,
-Koop Mast, Lim Siew Hoon, Linus Svensson, Lubosz Sarnecki, Luis de Bethencourt,
-Lukasz Forynski, Manasa Athreya, Marcel Holtmann, Marcin Kolny, Marcus Prebble,
-Mark Nauwelaerts, Maroš Ondrášek, Martin Kelly, Matej Knopp, Mathias Hasselmann,
-Mathieu Duponchelle, Matt Crane, Matthew Marsh, Matthew Waters, Matthieu Bouron,
-Mersad Jelacic, Michael Olbrich, Miguel París Díaz, Mikhail Fludkov,
-Mischa Spiegelmock, Nicola Murino, Nicolas Dufresne, Nicolas Huet,
-Nirbheek Chauhan, Ognyan Tonchev, Olivier Crête, Pablo Anton, Pankaj Darak,
-Paolo Pettinato, Patricia Muscalu, Paul Arzelier, Pavel Bludov, Perry Hung,
-Peter Korsgaard, Peter Seiderer, Petr Viktorin, Philippe Normand,
-Philippe Renon, Philipp Zabel, Philip Van Hoof, Philip Withnall, Piotr Drąg,
-plamot, Polochon\_street, Prashant Gotarne, Rajat Verma, Ramiro Polla,
-Ravi Kiran K N, Reynaldo H. Verdejo Pinochet, Robert Swain, Romain Picard,
-Roman Nowicki, Ross Burton, Ryan Hendrickson, Santiago Carot-Nemesio,
-Scott D Phillips, Sebastian Dröge, Sebastian Rasmussen, Sergey Borovkov,
-Seungha Yang, Sjors Gielen, Song Bing, Sreerenj Balachandran, Srimanta Panda,
-Stavros Vagionitis, Stefan Sauer, Steven Hoving, Stian Selnes, Suhwang Kim,
-Thiago Santos, Thibault Saunier, Thijs Vermeir, Thomas Bluemel, Thomas Roos,
-Thomas Vander Stichele, Tim-Philipp Müller, Tim Sheridan, Ting-Wei Lan,
-Tom Deseyn, Vanessa Chipirrás Navalón, Víctor Manuel Jáquez Leal,
-Vincent Dehors, Vincent Penquerc'h, Vineeth T M, Vivia Nikolaidou,
-Wang Xin-yu (王昕宇), William Manley, Wim Taymans, Wonchul Lee, Xavi Artigas,
-Xavier Claessens, Youness Alaoui,
-
-... 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.16 branch and fixed there as well, all fixes that ended up in
+the 1.16 branch are also included in 1.16.
 
-## Bugs fixed in 1.8
+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.
 
-More than [~700 bugs][bugs-fixed-in-1.8] have been fixed during
-the development of 1.8.
 
-This list does not include issues that have been cherry-picked into the
-stable 1.6 branch and fixed there as well, all fixes that ended up in the
-1.6 branch are also included in 1.8.
+Stable 1.16 branch
 
-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.
+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.
 
-[bugs-fixed-in-1.8]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=107311&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.6.1&target_milestone=1.6.2&target_milestone=1.6.3&target_milestone=1.7.0&target_milestone=1.7.1&target_milestone=1.7.2&target_milestone=1.7.3&target_milestone=1.7.4&target_milestone=1.7.90&target_milestone=1.7.91&target_milestone=1.7.92&target_milestone=1.7.x&target_milestone=1.8.0
+1.16.0
 
-## Stable 1.8 branch
+1.16.0 is scheduled to be released around January/February 2019.
 
-After the 1.8.0 release there will be several 1.8.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.8.x bug-fix releases will be made from the git 1.8 branch, which
-is a stable branch.
 
-### 1.8.0
+Known Issues
 
-1.8.0 was released on 24 March 2016.
+-   possibly breaking/incompatible changes to properties of wrapped
+    FFmpeg decoders and encoders (see above).
 
-### 1.8.1
+-   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.
 
-The first 1.8 bug-fix release (1.8.1) is planned for April 2016.
 
-## Schedule for 1.10
+Schedule for 1.18
 
-Our next major feature release will be 1.10, and 1.9 will be the unstable
-development version leading up to the stable 1.10 release. The development
-of 1.9/1.10 will happen in the git master branch.
+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.
 
-The plan for the 1.10 development cycle is yet to be confirmed, but it is
-expected that feature freeze will be around late July or early August,
-followed by several 1.9 pre-releases and the new 1.10 stable release
-in September.
+The plan for the 1.18 development cycle is yet to be confirmed, but it
+is expected that feature freeze will be around July 2019 followed by
+several 1.17 pre-releases and the new 1.18 stable release in
+August/September.
 
-1.10 will be backwards-compatible to the stable 1.8, 1.6, 1.4, 1.2 and 1.0
-release series.
+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 Tim-Philipp Müller with
-contributions from Sebastian Dröge, Nicolas Dufresne, Edward Hervey, Víctor
-Manuel Jáquez Leal, Arun Raghavan, Thiago Santos, Thibault Saunier, Jan
-Schmidt and Matthew Waters.*
+_These release notes have been prepared by Tim-Philipp Müller with_
+_contributions from Sebastian Dröge._
 
-*License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*
+_License: CC BY-SA 4.0_