-# GStreamer 1.8 Release Notes
+# GStreamer 1.12 Release Notes
-**GStreamer 1.8.0 was released on 24 March 2016.**
+GStreamer 1.12.0 was originally released on 4th May 2017.
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.
-See [https://gstreamer.freedesktop.org/releases/1.8/][latest] for the latest
+See [https://gstreamer.freedesktop.org/releases/1.12/][latest] for the latest
version of this document.
-*Last updated: Thursday 24 March 2016, 10:00 UTC [(log)][gitlog]*
+*Last updated: Thursday 4 May 2017, 11: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
+[latest]: https://gstreamer.freedesktop.org/releases/1.12/
+[gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.12/release-notes-1.12.md
-## Highlights
-
-- **Hardware-accelerated zero-copy video decoding on Android**
+## Introduction
-- **New video capture source for Android using the android.hardware.Camera API**
-
-- **Windows Media reverse playback** support (ASF/WMV/WMA)
+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!
-- **New tracing system** provides support for more sophisticated debugging tools
+As always, this release is again packed with new features, bug fixes and other
+improvements.
-- **New high-level GstPlayer playback convenience API**
+## Highlights
-- **Initial support for the new [Vulkan][vulkan] API**, see
- [Matthew Waters' blog post][vulkan-in-gstreamer] for more details
+- new `msdk` plugin for Intel's Media SDK for hardware-accelerated video
+ encoding and decoding on Intel graphics hardware on Windows or Linux.
-- **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.
+- `x264enc` can now use multiple x264 library versions compiled for different
+ bit depths at runtime, to transparently provide support for multiple bit
+ depths.
- [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
+- `videoscale` and `videoconvert` now support multi-threaded scaling and
+ conversion, which is particularly useful with higher resolution video.
-- **GStreamer VAAPI module now released and maintained as part of the GStreamer project**
+- `h264parse` will now automatically insert AU delimiters if needed when
+ outputting byte-stream format, which improves standard compliance and
+ is needed in particular for HLS playback on iOS/macOS.
- [vulkan]: https://www.khronos.org/vulkan
- [vulkan-in-gstreamer]: http://ystreet00.blogspot.co.uk/2016/02/vulkan-in-gstreamer.html
+- `rtpbin` has acquired bundle support for incoming streams
## 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.
-
-- 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.
-
-- 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.
-
-- 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
+### Noteworthy new API
-- New NVIDIA NVENC-based H.264 encoder for GPU-accelerated video encoding on
- suitable NVIDIA hardware
+- The video library gained support for a number of new video formats:
-- [rtspclientsink](), a new RTSP RECORD sink element, was added to gst-rtsp-server
+ - `GBR_12LE`, `GBR_12BE`, `GBRA_12LE`, `GBRA_12BE` (planar 4:4:4 RGB/RGBA, 12 bits per channel)
+ - `GBRA_10LE`, `GBRA_10BE` (planar 4:4:4:4 RGBA, 10 bits per channel)
+ - `GBRA` (planar 4:4:4:4 ARGB, 8 bits per channel)
+ - `I420_12BE`, `I420_12LE` (planar 4:2:0 YUV, 12 bits per channel)
+ - `I422_12BE`,`I422_12LE` (planar 4:2:2 YUV, 12 bits per channel)
+ - `Y444_12BE`, `Y444_12LE` (planar 4:4:4 YUV, 12 bits per channel)
+ - `VYUY` (another packed 4:2:2 YUV format)
-- [alsamidisrc](), a new ALSA MIDI sequencer source element
+- The high-level `GstPlayer` API was extended with functions for taking video
+ snapshots and enabling accurate seeking. It can optionally also use the
+ still-experimental `playbin3` element now.
-### Noteworthy element features and additions
+### New Elements
-- *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.
+- msdk: new plugin for Intel's Media SDK for hardware-accelerated video encoding
+ and decoding on Intel graphics hardware on Windows or Linux. This includes
+ an H.264 encoder/decoder (`msdkh264dec`, `msdkh264enc`),
+ an H.265 encoder/decoder (`msdkh265dec`, `msdkh265enc`),
+ an MJPEG encoder/encoder (`msdkmjpegdec`, `msdkmjpegenc`),
+ an MPEG-2 video encoder (`msdkmpeg2enc`) and a VP8 encoder (`msdkvp8enc`).
-- *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.
+- `iqa` is a new Image Quality Assessment plugin based on [DSSIM][dssim],
+ similar to the old (unported) videomeasure element.
-- *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.
+- The `faceoverlay` element, which allows you to overlay SVG graphics over
+ a detected face in a video stream, has been ported from 0.10.
-- *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.
+- our `ffmpeg` wrapper plugin now exposes/maps the ffmpeg Opus audio decoder
+ (`avdec_opus`) as well as the GoPro CineForm HD / CFHD decoder (`avdec_cfhd`),
+ and also a parser/writer for the IVF format (`avdemux_ivf` and `avmux_ivf`).
-- *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
+- `audiobuffersplit` is a new element that splits raw audio buffers into
+ equal-sized buffers
-- audiotestsrc now supports all audio formats and is no longer artificially
- limited with regard to the number of channels or sample rate
+- `audiomixmatrix` is a new element that mixes N:M audio channels according to
+ a configured mix matrix.
-- gst-libav (ffmpeg codec wrapper): map and enable JPEG2000 decoder
+- The `timecodewait` element got renamed to `avwait` and can operate in
+ different modes now.
-- 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.
+- The `opencv` video processing plugin has gained a new `dewarp` element that
+ dewarps fisheye images.
-- matroska muxer and demuxer now support the ProRes video format
+- `ttml` is a new plugin for parsing and rendering subtitles in Timed Text
+ Markup Language (TTML) format. For the time being these elements will not
+ be autoplugged during media playback however, unless the `GST_TTML_AUTOPLUG=1`
+ environment variable is set. Only the EBU-TT-D profile is supported at this
+ point.
+
+[dssim]: https://github.com/pornel/dssim
+
+### New element features and additions
+
+- `x264enc` can now use multiple x264 library versions compiled for different
+ bit depths at runtime, to transparently provide support for multiple bit
+ depths. A new configure parameter `--with-x264-libraries` has been added to
+ specify additional paths to look for additional x264 libraries to load.
+ Background is that the libx264 library is always compile for one specific
+ bit depth and the `x264enc` element would simply support the depth supported
+ by the underlying library. Now we can support multiple depths.
-- Improved VP8/VP9 decoding performance on multi-core systems by enabling
- multi-threaded decoding in the libvpx-based decoders on such systems
+- `x264enc` also picks up the interlacing mode automatically from the input
+ caps now and passed interlacing/TFF information correctly to the library.
-- 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.
+- `videoscale` and `videoconvert` now support multi-threaded scaling and
+ conversion, which is particularly useful with higher resolution video.
+ This has to be enabled explicitly via the `"n-threads"` property.
-- 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
+- `videorate`'s new `"rate"` property lets you set a speed factor
+ on the output stream
-- mpegtsmux can now mux H.265/HEVC video as well
+- `splitmuxsink`'s buffer collection and scheduling was rewritten to make
+ processing and splitting deterministic; before it was possible for a buffer
+ to end up in a different file chunk in different runs. `splitmuxsink` also
+ gained a new `"format-location-full"` signal that works just like the existing
+ `"format-location"` signal only that it is also passed the primary stream's
+ first buffer as argument, so that it is possible to construct the file name
+ based on metadata such as the buffer timestamp or any GstMeta attached to
+ the buffer. The new `"max-size-timecode"` property allows for timecode-based
+ splitting. `splitmuxsink` will now also automatically start a new file if the
+ input caps change in an incompatible way.
+
+- `fakesink` has a new `"drop-out-of-segment"` property to not drop
+ out-of-segment buffers, which is useful for debugging purposes.
+
+- `identity` gained a `"ts-offset"` property.
+
+- both `fakesink` and `identity` now also print what kind of metas are attached
+ to buffers when printing buffer details via the `"last-message"` property
+ used by `gst-launch-1.0 -v`.
+
+- multiqueue: made `"min-interleave-time"` a configurable property.
+
+- video nerds will be thrilled to know that `videotestsrc`'s snow is now
+ deterministic. `videotestsrc` also gained some new properties to make the
+ ball pattern based on system time, and invert colours each second
+ (`"animation-mode"`, `"motion"`, and `"flip"` properties).
+
+- `oggdemux` reverse playback should work again now. You're welcome.
+
+- `playbin3` and `urisourcebin` now have buffering enabled by default, and
+ buffering message aggregation was fixed.
+
+- `tcpclientsrc` now has a `"timeout"` property
+
+- `appsink` has gained support for buffer lists. For backwards compatibility
+ reasons users need to enable this explicitly with `gst_app_sink_set_buffer_list_support()`,
+ however. Once activated, a pulled `GstSample` can contain either a buffer
+ list or a single buffer.
+
+- `splitmuxsrc` reverse playback was fixed and handling of sparse streams, such
+ as subtitle tracks or metadata tracks, was improved.
+
+- `matroskamux` has acquired support for muxing G722 audio; it also marks all
+ buffers as keyframes now when streaming only audio, so that `tcpserversink`
+ will behave properly with audio-only streams.
+
+- `qtmux` gained support for ProRes 4444 XQ, HEVC/H.265 and CineForm (GoPro) formats,
+ and generally writes more video stream-related metadata into the track headers.
+ It is also allows configuration of the maximum interleave size in bytes and
+ time now. For fragmented mp4 we always write the `tfdt` atom now as required
+ by the DASH spec.
+
+- `qtdemux` supports FLAC, xvid, mp2, S16L and CineForm (GoPro) tracks now, and
+ generally tries harder to extract more video-related information from track
+ headers, such as colorimetry or interlacing details. It also received a
+ couple of fixes for the scenario where upstream operates in TIME format and
+ feeds chunks to qtdemux (e.g. DASH or MSE).
+
+- `audioecho` has two new properties to apply a delay only to certain channels
+ to create a surround effect, rather than an echo on all channels. This is
+ useful when upmixing from stereo, for example. The `"surround-delay"` property
+ enables this, and the `"surround-mask"` property controls which channels
+ are considered surround sound channels in this case.
+
+- `webrtcdsp` gained various new properties for gain control and also exposes
+ voice activity detection now, in which case it will post `"voice-activity"`
+ messages on the bus whenever the voice detection status changes.
+
+- The `decklink` capture elements for Blackmagic Decklink cards have seen a
+ number of improvements:
+
+ - `decklinkvideosrc` will post a warning message on "no signal" and an info
+ message when the signal lock has been (re)acquired. There is also a new
+ read-only `"signal"` property that can be used to query the signal lock
+ status. The `GAP` flag will be set on buffers that are captured without
+ a signal lock. The new `drop-no-signal-frames` will make `decklinkvideosrc`
+ drop all buffers that have been captured without an input signal. The
+ `"skip-first-time"` property will make the source drop the first few
+ buffers, which is handy since some devices will at first output buffers
+ with the wrong resolution before they manage to figure out the right input
+ format and decide on the actual output caps.
+
+ - `decklinkaudiosrc` supports more than just 2 audio channels now.
+
+ - The capture sources no longer use the "hardware" timestamps which turn
+ out to be useless and instead just use the pipeline clock directly.
+
+- `srtpdec` now also has a readonly `"stats"` property, just like `srtpenc`.
+
+- `rtpbin` gained RTP bundle support, as used by e.g. WebRTC. The first
+ rtpsession will have a `rtpssrcdemux` element inside splitting the streams
+ based on their SSRC and potentially dispatch to a different rtpsession.
+ Because retransmission SSRCs need to be merged with the corresponding media
+ stream the `::on-bundled-ssrc` signal is emitted on `rtpbin` so that the
+ application can find out to which session the SSRC belongs.
+
+- `rtprtxqueue` gained two new properties exposing retransmission
+ statistics (`"requests"` and `"fulfilled-requests"`)
+
+- `kmssink` will now use the preferred mode for the monitor and render to the
+ base plane if nothing else has set a mode yet. This can also be done forcibly
+ in any case via the new `"force-modesetting"` property. Furthermore, `kmssink`
+ now allows only the supported connector resolutions as input caps in order to
+ avoid scaling or positioning of the input stream, as `kmssink` can't know
+ whether scaling or positioning would be more appropriate for the use case at
+ hand.
+
+- `waylandsink` can now take DMAbuf buffers as input in the presence
+ of a compatible Wayland compositor. This enables zero-copy transfer
+ from a decoder or source that outputs DMAbuf.
-- 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).
+- `udpsrc` can be bound to more than one interface when joining a
+ multicast group, this is done by giving a comma separate list of
+ interfaces such as multicast-iface="eth0,eth1".
### Plugin moves
-- 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.
-
-- The mpg123 plugin containing a libmpg123 based audio decoder element has
- been moved from -bad to -ugly.
-
-- 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.
-
-### New tracing tools for developers
-
-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).
-
-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.
-
-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.
-
-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.
-
-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].
-
-[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/
-
-### Adaptive streaming: DASH, HLS and MSS improvements
-
-- dashdemux now supports loading external xml nodes pointed from its MPD.
-
-- Content protection nodes parsing support for PlayReady WRM in mssdemux.
-
-- Reverse playback was improved to respect seek start and stop positions.
-
-- 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.
-
-### Audio library improvements
-
-- 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.
-
-- [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
-
-- 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.
-
-[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
-
-### GStreamer OpenGL support improvements
-
-#### Better OpenGL Shader support
+- `dataurisrc` moved from gst-plugins-bad to core
+
+- The `rawparse` plugin containing the `rawaudioparse` and `rawvideoparse`
+ elements moved from gst-plugins-bad to gst-plugins-base. These elements
+ supersede the old `videoparse` and `audioparse` elements. They work the
+ same, with just some minor API changes. The old legacy elements still
+ exist in gst-plugins-bad, but may be removed at some point in the future.
+
+- `timecodestamper` is an element that attaches time codes to video buffers
+ in form of `GstVideoTimeCodeMeta`s. It had a `"clock-source"` property
+ which has now been removed because it was fairly useless in practice. It
+ gained some new properties however: the `"first-timecode"` property can
+ be used to set the inital timecode; alternatively `"first-timecode-to-now"`
+ can be set, and then the current system time at the time the first buffer
+ arrives is used as base time for the time codes.
+
+
+### Plugin removals
+
+- The `mad` mp1/mp2/mp3 decoder plugin was removed from gst-plugins-ugly,
+ as libmad is GPL licensed, has been unmaintained for a very long time, and
+ there are better alternatives available. Use the `mpg123audiodec` element
+ from the `mpg123` plugin in gst-plugins-ugly instead, or `avdec_mp3` from
+ the `gst-libav` module which wraps the ffmpeg library. We expect that we
+ will be able to move mp3 decoding to gst-plugins-good in the next cycle
+ seeing that most patents around mp3 have expired recently or are about to
+ expire.
+
+- The `mimic` plugin was removed from gst-plugins-bad. It contained a decoder
+ and encoder for a video codec used by MSN messenger many many years ago (in
+ a galaxy far far away). The underlying library is unmaintained and no one
+ really needs to use this codec any more. Recorded videos can still be played
+ back with the MIMIC decoder in gst-libav.
+
+## Miscellaneous API additions
+
+- Request pad name templates passed to `gst_element_request_pad()` may now
+ contain multiple specifiers, such as e.g. `src_%u_%u`.
+
+- [`gst_buffer_iterate_meta_filtered()`][buffer-iterate-meta-filtered] is a
+ variant of `gst_buffer_iterate_meta()` that only returns metas of the
+ requested type and skips all other metas.
+
+- [`gst_pad_task_get_state()`][pad-task-get-state] gets the current state of
+ a task in a thread-safe way.
+
+- [`gst_uri_get_media_fragment_table()`][uri-get-fragment-table] provides the
+ media fragments of an URI as a table of key=value pairs.
+
+- [`gst_print()`][print], [`gst_println()`][println], [`gst_printerr()`][printerr],
+ and [`gst_printerrln()`][printerrln] can be used to print to stdout or stderr.
+ These functions are similar to `g_print()` and `g_printerr()` but they also
+ support all the additional format specifiers provided by the GStreamer
+ logging system, such as e.g. `GST_PTR_FORMAT`.
+
+- a `GstParamSpecArray` has been added, for elements who want to have array
+ type properties, such as the `audiomixmatrix` element for example. There are
+ also two new functions to set and get properties of this type from bindings:
+ - gst_util_set_object_array()
+ - gst_util_get_object_array()
+
+- various helper functions have been added to make it easier to set or get
+ GstStructure fields containing caps-style array or list fields from language
+ bindings (which usually support GValueArray but don't know about the GStreamer
+ specific fundamental types):
+ - [`gst_structure_get_array()`][get-array]
+ - [`gst_structure_set_array()`][set-array]
+ - [`gst_structure_get_list()`][get-list]
+ - [`gst_structure_set_list()`][set-list]
+
+- a new ['dynamic type' registry factory type][dynamic-type] was added to
+ register dynamically loadable GType types. This is useful for automatically
+ loading enum/flags types that are used in caps, such as for example the
+ `GstVideoMultiviewFlagsSet` type used in multiview video caps.
+
+- there is a new [`GstProxyControlBinding`][proxy-control-binding] for use
+ with GstController. This allows proxying the control interface from one
+ property on one GstObject to another property (of the same type) in another
+ GstObject. So e.g. in parent-child relationship, one may need to call
+ `gst_object_sync_values()` on the child and have a binding (set elsewhere)
+ on the parent update the value. This is used in `glvideomixer` and `glsinkbin`
+ for example, where `sync_values()` on the child pad or element will call
+ `sync_values()` on the exposed bin pad or element.
+
+ Note that this doesn't solve GObject property forwarding, that must
+ be taken care of by the implementation manually or using GBinding.
+
+- `gst_base_parse_drain()` has been made public for subclasses to use.
+
+- `gst_base_sink_set_drop_out_of_segment()' can be used by subclasses to
+ prevent GstBaseSink from dropping buffers that fall outside of the segment.
+
+- [`gst_calculate_linear_regression()`][calc-lin-regression] is a new utility
+ function to calculate a linear regression.
+
+- [`gst_debug_get_stack_trace`][get-stack-trace] is an easy way to retrieve a
+ stack trace, which can be useful in tracer plugins.
+
+- allocators: the dmabuf allocator is now sub-classable, and there is a new
+ `GST_CAPS_FEATURE_MEMORY_DMABUF` define.
+
+- video decoder subclasses can use the newly-added function
+ `gst_video_decoder_allocate_output_frame_with_params()` to
+ pass a `GstBufferPoolAcquireParams` to the buffer pool for
+ each buffer allocation.
+
+- the video time code API has gained a dedicated [`GstVideoTimeCodeInterval`][timecode-interval]
+ type plus related API, including functions to add intervals to timecodes.
+
+- There is a new `libgstbadallocators-1.0` library in gst-plugins-bad, which
+ may go away again in future releases once the `GstPhysMemoryAllocator`
+ interface API has been validated by more users and was moved to
+ `libgstallocators-1.0` from gst-plugins-base.
+
+[timecode-interval]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#gst-video-time-code-interval-new
+[buffer-iterate-meta-filtered]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-iterate-meta-filtered
+[pad-task-get-state]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-task-get-state
+[uri-get-fragment-table]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUri.html#gst-uri-get-media-fragment-table
+[print]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-print
+[println]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-println
+[printerr]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-printerr
+[printerrln]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-printerrln
+[get-array]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-get-array
+[set-array]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-set-array
+[get-list]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-get-list
+[set-list]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-set-list
+[dynamic-type]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstDynamicTypeFactory.html
+[proxy-control-binding]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstProxyControlBinding.html
+[calc-lin-regression]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUtils.html#gst-calculate-linear-regression
+[get-stack-trace]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUtils.html#gst-debug-get-stack-trace
+
+### GstPlayer
-[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.
+New API has been added to:
-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.
+ - get the number of audio/video/subtitle streams:
+ - `gst_player_media_info_get_number_of_streams()`
+ - `gst_player_media_info_get_number_of_video_streams()`
+ - `gst_player_media_info_get_number_of_audio_streams()`
+ - `gst_player_media_info_get_number_of_subtitle_streams()`
-A new [example][liveshader-example] was added utilizing the new shader
-infrastructure showcasing live shader edits.
+ - enable accurate seeking: `gst_player_config_set_seek_accurate()`
+ and `gst_player_config_get_seek_accurate()`
-[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
+ - get a snapshot image of the video in RGBx, BGRx, JPEG, PNG or
+ native format: [`gst_player_get_video_snapshot()`][snapshot]
+
+ - selecting use of a specific video sink element
+ ([`gst_player_video_overlay_video_renderer_new_with_sink()`][renderer-with-vsink])
+
+ - If the environment variable `GST_PLAYER_USE_PLAYBIN3` is set, GstPlayer will
+ use the still-experimental `playbin3` element and the `GstStreams` API for
+ playback.
-#### OpenGL GLMemory rework
+[snapshot]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstplayer.html#gst-player-get-video-snapshot
+[renderer-with-vsink]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-new-with-sink
-[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.
+## Miscellaneous changes
-[GstGLMemory]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstglmemory.html
+- video caps for interlaced video may contain an optional `"field-order"` field
+ now in the case of `interlaced-mode=interleaved` to signal that the field
+ order is always the same throughout the stream. This is useful to signal to
+ muxers such as mp4mux. The new field is parsed from/to `GstVideoInfo` of course.
-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.
+- video decoder and video encoder base classes try harder to proxy
+ interlacing, colorimetry and chroma-site related fields in caps properly.
-A generic GL allocation framework was also implemented to support the generic
-allocation of OpenGL buffers and textures which is used extensively by
-GstGLBufferPool.
+- The buffer stored in the `PROTECTION` events is now left unchanged. This is a
+ change of behaviour since 1.8, especially for the mssdemux element which used to
+ decode the base64 parsed data wrapped in the protection events emitted by the
+ demuxer.
-#### OpenGL DMABuf import uploader
+- `PROTECTION` events can now be injected into the pipeline from the application;
+ source elements deriving from GstBaseSrc will forward those downstream now.
-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.
+- The DASH demuxer is now correctly parsing the MSPR-2.0 ContentProtection nodes
+ and emits Protection events accordingly. Applications relying on those events
+ might need to decode the base64 data stored in the event buffer before using it.
-#### OpenGL queries
+- The registry can now also be disabled by setting the environment variable
+ `GST_REGISTRY_DISABLE=yes`, with similar effect as the `GST_DISABLE_REGISTRY`
+ compile time switch.
-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.
+- Seeking performance with gstreamer-vaapi based decoders was improved. It would
+ recreate the decoder and surfaces on every seek which can be quite slow.
-#### New OpenGL elements
+- more robust handling of input caps changes in videoaggregator-based elements
+ such as `compositor`.
-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.
+- Lots of adaptive streaming-related fixes across the board (DASH, MSS, HLS). Also:
-glvideoflip, which is the OpenGL equiavalant of videoflip, implements the exact
-same interface and functionality as videoflip.
+ - `mssdemux`, the Microsoft Smooth Streaming demuxer, has seen various
+ fixes for live streams, duration reporting and seeking.
-#### EGL implementation now selects OpenGL 3.x
+ - The DASH manifest parser now extracts MS PlayReady ContentProtection objects
+ from manifests and sends them downstream as `PROTECTION` events. It also
+ supports multiple Period elements in external xml now.
-The EGL implementation can now select OpenGL 3.x contexts.
+- gst-libav was updated to ffmpeg 3.3 but should still work with any 3.x
+ version.
-#### OpenGL API removal
+- GstEncodingProfile has been generally enhanced so it can, for
+ example, be used to get possible profiles for a given file
+ extension. It is now possible to define profiles based on element
+ factory names or using a path to a `.gep` file containing a
+ serialized profile.
-The GstGLDownload library object was removed as it was not used by anything.
-Everything is performed by GstGLMemory or in the gldownloadelement.
+- `audioconvert` can now do endianness conversion in-place. All other
+ conversions still require a copy, but e.g. sign conversion and a few others
+ could also be implemented in-place now.
-The GstGLUploadMeta library object was removed as it was not being used and we
-don't want to promote the use of GstVideoGLTextureUploadMeta.
+- The new, experimental `playbin3` and `urisourcebin` elements got many
+ bugfixes and improvements and should generally be closer to a full
+ replacement of the old elements.
-#### OpenGL: Other miscellaneous changes
+- `interleave` now supports > 64 channels.
-- The EGL implementation can now select OpenGL 3.x contexts. This brings
- OpenGL 3.x to e.g. wayland and other EGL systems.
+### OpenGL integration
-- glstereomix/glstereosplit are now built and are usable on OpenGL ES systems
+- As usual the GStreamer OpenGL integration library has seen numerous
+ fixes and performance improvements all over the place, and is hopefully
+ ready now to become API stable and be moved to gst-plugins-base during the
+ 1.14 release cycle.
-- The UYVY/YUY2 to RGBA and RGBA to UYVY/YUY2 shaders were fixed removing the
- sawtooth pattern and luma bleeding.
+- The GStreamer OpenGL integration layer has also gained support for the
+ Vivante EGL FB windowing system, which improves performance on platforms
+ such as Freescale iMX.6 for those who are stuck with the proprietary driver.
+ The `qmlglsink` element also supports this now if Qt is used with eglfs or
+ wayland backend, and it works in conjunction with [gstreamer-imx][gstreamer-imx]
+ of course.
-- We now utilize the GL\_APPLE\_sync extension on iOS devices which improves
- performance of OpenGL applications, especially with multiple OpenGL
- contexts.
+- various `qmlglsrc` improvements
-- glcolorconvert now uses a bufferpool to avoid costly
- glGenTextures/glDeleteTextures for every frame.
+[gstreamer-imx]: https://github.com/Freescale/gstreamer-imx
-- glvideomixer now has full glBlendFunc and glBlendEquation support per input.
+## Tracing framework and debugging improvements
-- gltransformation now support navigation events so your weird transformations
- also work with DVD menus.
+- New tracing hooks have been added to track GstMiniObject and GstObject
+ ref/unref operations.
-- qmlglsink can now run on iOS, OS X and Android in addition to the already
- supported Linux platform.
+- The memory leaks tracer can optionally use this to retrieve stack traces if
+ enabled with e.g. `GST_TRACERS=leaks(filters="GstEvent,GstMessage",stack-traces-flags=full)`
-- glimagesink now posts unhandled keyboard and mouse events (on backends that
- support user input, current only X11) on the bus for the application.
+- The `GST_DEBUG_FILE` environment variable, which can be used to write the
+ debug log output to a file instead of printing it to stderr, can now contain
+ a name pattern, which is useful for automated testing and continuous
+ integration systems. The following format specifiers are supported:
-### Initial GStreamer Vulkan support
+ - `%p`: will be replaced with the PID
+ - `%r`: will be replaced with a random number, which is useful for instance
+ when running two processes with the same PID but in different containers.
-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.
+## Tools
-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.
+- `gst-inspect-1.0` can now list elements by type with the new `--types`
+ command-line option, e.g. `gst-inspect-1.0 --types=Audio/Encoder` will
+ show a list of audio encoders.
-### GStreamer VAAPI support for hardware-accelerated video decoding and encoding on Intel (and other) platforms
+- `gst-launch-1.0` and `gst_parse_launch()` have gained a new operator (`:`)
+ that allows linking all pads between two elements. This is useful in cases
+ where the exact number of pads or type of pads is not known beforehand, such
+ as in the `uridecodebin : encodebin` scenario, for example. In this case,
+ multiple links will be created if the encodebin has multiple profiles
+ compatible with the output of uridecodebin.
-#### GStreamer VAAPI is now part of upstream GStreamer
+- `gst-device-monitor-1.0` now shows a `gst-launch-1.0` snippet for each
+ device that shows how to make use of it in a `gst-launch-1.0` pipeline string.
-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:
+## GStreamer RTSP server
-[http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/][gst-vaapi-git]
+- The RTSP server now also supports Digest authentication in addition to Basic
+ authentication.
-[gst-vaapi-git]: http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/
+- The `GstRTSPClient` class has gained a `pre-*-request` signal and virtual
+ method for each client request type, emitted in the beginning of each rtsp
+ request. These signals or virtual methods let the application validate the
+ requests, configure the media/stream in a certain way and also generate error
+ status codes in case of an error or a bad request.
-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.
+## GStreamer VAAPI
-Thanks to everyone involved in making this move happen!
+- GstVaapiDisplay now inherits from GstObject, thus the VA display logging
+ messages are better and tracing the context sharing is more readable.
-#### GStreamer VAAPI: Bug tracking
+- When uploading raw images into a VA surfaces now VADeriveImages are tried
+ fist, improving the upload performance, if it is possible.
-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 decoders and the post-processor now can push dmabuf-based buffers to
+ downstream under certain conditions. For example:
-#### GStreamer VAAPI: Pending patches
+ `GST_GL_PLATFORM=egl gst-play-1.0 video-sample.mkv --videosink=glimagesink`
-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.
+- Refactored the wrapping of VA surface into gstreamer memory, adding lock
+ when mapping and unmapping, and many other fixes.
-#### GStreamer VAAPI: New versioning scheme and supported GStreamer versions
+- Now `vaapidecodebin` loads `vaapipostproc` dynamically. It is possible to
+ avoid it usage with the environment variable `GST_VAAPI_DISABLE_VPP=1`.
-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.
+- Regarding encoders: they have primary rank again, since they can discover,
+ in run-time, the color formats they can use for upstream raw buffers and
+ caps renegotiation is now possible. Also the encoders push encoding info
+ downstream via tags.
-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.
+- About specific encoders: added constant bit-rate encoding mode for VP8 and
+ H265 encoder handles P010_10LE color format.
-[iostc]: http://01.org
-[bgo]: http://bugzilla.gnome.og
+- Regarding decoders, flush operation has been improved, now the internal VA
+ encoder is not recreated at each flush. Also there are several improvements
+ in the handling of H264 and H265 streams.
-#### GStreamer VAAPI: Miscellaneous changes
+- VAAPI plugins try to create their on GstGL context (when available) if they
+ cannot find it in the pipeline, to figure out what type of VA Display they
+ should create.
-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.
+- Regarding `vaapisink` for X11, if the backend reports that it is unable to
+ render correctly the current color format, an internal VA post-processor, is
+ instantiated (if available) and converts the color format.
-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.
+## GStreamer Editing Services and NLE
-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.
+- Enhanced auto transition behaviour
-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.
+- Fix some races in `nlecomposition`
-#### GStreamer VAAPI: New features in 1.8: 10-bit H.265/HEVC decoding support
+- Allow building with msvc
-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.
+- Added a UNIX manpage for `ges-launch`
-Several fixes for memory leaks, build errors, and in the internal
-video parsing.
+- API changes:
+ - Added ges_deinit (allowing the leak tracer to work properly)
+ - Added ges_layer_get_clips_in_interval
+ - Finally hide internal symbols that should never have been exposed
-Finally, vaapisink now posts the unhandled keyboard and mouse events to the
-application.
+## GStreamer validate
-### GStreamer Video 4 Linux Support
+- Port `gst-validate-launcher` to python 3
-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-validate-launcher` now checks if blacklisted bugs have been fixed on
+ bugzilla and errors out if it is the case
-The device provider now exposes a variety of properties as found in the udev
-database.
+- Allow building with msvc
-The video decoder is now able to negotiate the downstream format.
+- Add ability for the launcher to run GStreamer unit tests
-Elements that are dynamically created from /dev/video\* now track changes on
-these devices to ensure the registry stay up to date.
+- Added a way to activate the leaks tracer on our tests and fix leaks
-All this and various bug fixes that improve both stability and correctness.
+- Make the http server multithreaded
-### GStreamer Editing Services
+- New testsuite for running various test scenarios on the DASH-IF test vectors
-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.
-
-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.
-
-Construction of NLE objects has been reworked making copy/pasting fully
-functional and allowing users to set properties on effects right after
-creating them.
-
-Rework of the title source to add more flexibility in text positioning,
-and letting the user get feedback about rendered text positioning.
-
-Report nlecomposition structural issues (coming from user programing mistakes)
-into ERROR messages on the bus.
-
-Add GI/pythyon testsuite in GES itself, making sure the API is working as expected
-in python, and allowing writing tests faster.
-
-### GstValidate
-
-Added support to run tests inside gdb.
-
-Added a 'smart' reporting mode where we give as much information as possible about
-critical errors.
-
-Uses GstTracer now instead of a LD\_PRELOAD library.
-
-## Miscellaneous
+## Build and Dependencies
-- encodebin now works with "encoder-muxers" such as wavenc
+- Meson build files are now disted in tarballs, for jhbuild and so distro
+ packagers can start using it. Note that the Meson-based build system is not
+ 100% feature-equivalent with the autotools-based one yet.
-- gst-play-1.0 acquired a new keyboard shortcut: '0' seeks back to the start
+- Some plugin filenames have been changed to match the plugin names: for example
+ the file name of the `encoding` plugin in gst-plugins-base containing the
+ `encodebin` element was `libgstencodebin.so` and has been changed to
+ `libgstencodebin.so`. This affects only a handful of plugins across modules.
-- gst-play-1.0 supports two new command line switches: -v for verbose output
- and --flags to configure the playbin flags to use.
+ **Developers who install GStreamer from source and just do `make install`**
+ **after updating the source code, without doing `make uninstall` first, will**
+ **have to manually remove the old installed plugin files from the installation**
+ **prefix, or they will get 'Cannot register existing type' critical warnings.**
-## Build and Dependencies
+- Most of the docbook-based documentation (FAQ, Application Development Manual,
+ Plugin Writer's Guide, design documents) has been converted to markdown and
+ moved into a new gst-docs module. The gtk-doc library API references and
+ the plugins documentation are still built as part of the source modules though.
-- The GLib dependency requirement was bumped to 2.40
+- GStreamer core now optionally uses libunwind and libdw to generate backtraces.
+ This is useful for tracer plugins used during debugging and development.
-- The -Bsymbolic configure check now works with clang as well
+- There is a new `libgstbadallocators-1.0` library in gst-plugins-bad (which
+ may go away again in future releases once the `GstPhysMemoryAllocator`
+ interface API has been validated by more users).
-- 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.
+- `gst-omx` and `gstreamer-vaapi` modules can now also be built using the
+ Meson build system.
-- 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.
+- The `qtkitvideosrc` element for macOS was removed. The API is deprecated
+ since 10.9 and it wasn't shipped in the binaries since a few releases.
## Platform-specific improvements
### Android
-- Zero-copy video decoding on Android using the hardware-accelerated decoders
- has been implemented, and is fully integrated with the GStreamer OpenGL stack
-
-- 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.
-
-- The OpenGL-based QML video sink can now also be used on Android
-
-- New tinyalsasink element, which is mainly useful for Android but can also
- be used on other platforms.
+- androidmedia: add support for VP9 video decoding/encoding and Opus audio
+ decoding (where supported)
### OS/X and iOS
-- 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
-
-- The OpenGL-based QML video sink can now also be used on OS X and iOS (with
- some Qt build system massaging)
-
-- 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.
-
-- New GstAppleCoreVideoMemory wrapping CVPixelBuffer's
-
-- avfvideosrc now supports renegotiation.
+- `avfvideosrc`, which represents an iPhone camera or, on a Mac, a screencapture
+ session, so far allowed you to select an input device by device index only.
+ New API adds the ability to select the position (front or back facing) and
+ device-type (wide angle, telephoto, etc.). Furthermore, you can now also
+ specify the orientation (portrait, landscape, etc.) of the videostream.
### Windows
-- Various bugs with UDP and multicast were fixed on Windows, mostly related to
- gst-rtsp-server.
-
-- 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.
-
-## 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)
-
-- 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)
+- `dx9screencapsrc` can now optionally also capture the cursor.
## Contributors
-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,
+Aleix Conchillo Flaque, Alejandro G. Castro, Aleksandr Slobodeniuk, Alexandru
+Băluț, Alex Ashley, Andre McCurdy, Andrew, Anton Eliasson, Antonio Ospite,
+Arnaud Vrac, Arun Raghavan, Aurélien Zanelli, Axel Menzel, Benjamin Otte,
+Branko Subasic, Brendan Shanks, Carl Karsten, Carlos Rafael Giani, ChangBok
+Chae, Chris Bass, Christian Schaller, christophecvr, Claudio Saavedra,
+Corentin Noël, Dag Gullberg, Daniel Garbanzo, Daniel Shahaf, David Evans,
+David Schleef, David Warman, Dominique Leuenberger, Dongil Park, Douglas
+Bagnall, Edgard Lima, Edward Hervey, Emeric Grange, Enrico Jorns, Enrique
+Ocaña González, Evan Nemerson, Fabian Orccon, Fabien Dessenne, Fabrice Bellet,
+Florent Thiéry, Florian Zwoch, Francisco Velazquez, Frédéric Dalleau, Garima
+Gaur, Gaurav Gupta, George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Graham
+Leggett, Guillaume Desmottes, Gurkirpal Singh, Haihua Hu, Hanno Boeck, Havard
+Graff, Heekyoung Seo, hoonhee.lee, Hyunjun Ko, Imre Eörs, Iñaki García
+Etxebarria, Jagadish, Jagyum Koo, Jan Alexander Steffens (heftig), Jan
+Schmidt, Jean-Christophe Trotin, Jochen Henneberg, Jonas Holmberg, Joris
+Valette, Josep Torra, Juan Pablo Ugarte, Julien Isorce, Jürgen Sachs, Koop
+Mast, Kseniia Vasilchuk, Lars Wendler, leigh123linux@googlemail.com, Luis de
+Bethencourt, Lyon Wang, Marcin Kolny, Marinus Schraal, Mark Nauwelaerts,
+Mathieu Duponchelle, Matthew Waters, Matt Staples, Michael Dutka, Michael
+Olbrich, Michael Smith, Michael Tretter, Miguel París Díaz, namanyadav12, Neha
+Arora, Nick Kallen, Nicola Murino, Nicolas Dechesne, Nicolas Dufresne, Nicolas
+Huet, Nirbheek Chauhan, Ole André Vadla Ravnås, Olivier Crête, Patricia
+Muscalu, Peter Korsgaard, Peter Seiderer, Petr Kulhavy, Philippe Normand,
+Philippe Renon, Philipp Zabel, Rahul Bedarkar, Reynaldo H. Verdejo Pinochet,
+Ricardo Ribalda Delgado, Rico Tzschichholz, Руслан Ижбулатов, Samuel Maroy,
+Santiago Carot-Nemesio, Scott D Phillips, Sean DuBois, Sebastian Dröge, Sergey
+Borovkov, Seungha Yang, shakin chou, Song Bing, Søren Juul, Sreerenj
+Balachandran, Stefan Kost, Stefan Sauer, Stepan Salenikovich, Stian Selnes,
+Stuart Weaver, suhas2go, Thiago Santos, Thibault Saunier, Thomas Bluemel,
+Thomas Petazzoni, Tim-Philipp Müller, Ting-Wei Lan, Tobias Mueller, Todor
+Tomov, Tomasz Zajac, Ulf Olsson, Ursula Maplehurst, Víctor Manuel Jáquez Leal,
+Victor Toso, Vincent Penquerc'h, Vineeth TM, Vinod Kesti, Vitor Massaru Iha,
+Vivia Nikolaidou, WeiChungChang, William Manley, Wim Taymans, Wojciech
+Przybyl, Wonchul Lee, Xavier Claessens, Yasushi SHOJI
... and many others who have contributed bug reports, translations, sent
suggestions or helped testing.
-## Bugs fixed in 1.8
+## Bugs fixed in 1.12
-More than [~700 bugs][bugs-fixed-in-1.8] have been fixed during
-the development of 1.8.
+More than [635 bugs][bugs-fixed-in-1.12] have been fixed during
+the development of 1.12.
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.10 branch and fixed there as well, all fixes that ended up in the
+1.10 branch are also included in 1.12.
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.
-[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
+[bugs-fixed-in-1.12]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=213265&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.1&target_milestone=1.10.2&target_milestone=1.10.3&target_milestone=1.10.4&target_milestone=1.11.1&target_milestone=1.11.2&target_milestone=1.11.3&target_milestone=1.11.4&target_milestone=1.11.90&target_milestone=1.11.91&target_milestone=1.12.0
-## Stable 1.8 branch
+## Stable 1.12 branch
-After the 1.8.0 release there will be several 1.8.x bug-fix releases which
+After the 1.12.0 release there will be several 1.12.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
+usually. The 1.12.x bug-fix releases will be made from the git 1.12 branch, which
is a stable branch.
-### 1.8.0
+### 1.12.0
+
+1.12.0 was released on 4th May 2017.
-1.8.0 was released on 24 March 2016.
+## Known Issues
-### 1.8.1
+- The `webrtcdsp` element is currently not shipped as part of the Windows
+ binary packages due to a [build system issue][bug-770264].
-The first 1.8 bug-fix release (1.8.1) is planned for April 2016.
+[bug-770264]: https://bugzilla.gnome.org/show_bug.cgi?id=770264
-## Schedule for 1.10
+## Schedule for 1.14
-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.14, and 1.11 will be the unstable
+development version leading up to the stable 1.12 release. The development
+of 1.13/1.14 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.14 development cycle is yet to be confirmed, but it is
+expected that feature freeze will be around September 2017
+followed by several 1.13 pre-releases and the new 1.14 stable release
+in October.
-1.10 will be backwards-compatible to the stable 1.8, 1.6, 1.4, 1.2 and 1.0
-release series.
+1.14 will be backwards-compatible to the stable 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 Sebastian Dröge, Tim-Philipp Müller
+and Víctor Manuel Jáquez Leal.*
*License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*