
Release notes for GStreamer Bad Plugins 1.11.2

The GStreamer team is pleased to announce the second release of the unstable
1.11 release series. The 1.11 release series is adding new features on top of
the 1.0, 1.2, 1.4, 1.6, 1.8 and 1.10 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The unstable 1.11 release series
will lead to the stable 1.12 release series in the next weeks. Any newly added
API can still change until that point.


Full release notes will be provided at some point during the 1.11 release
cycle, highlighting all the new features, bugfixes, performance optimizations
and other important changes.


Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.


"That an accusation?"


No perfectly groomed moustache or any amount of fine clothing is going to
cover up the truth - these plugins are Bad with a capital B.
They look fine on the outside, and might even appear to get the job done, but
at the end of the day they're a black sheep. Without a golden-haired angel
to watch over them, they'll probably land in an unmarked grave at the final
showdown.


Don't bug us about their quality - exercise your Free Software rights,
patch up the offender and send us the patch on the fastest steed you can
steal from the Confederates. Because you see, in this world, there's two
kinds of people, my friend: those with loaded guns and those who dig.
You dig.


This module contains a set of plugins that aren't up to par compared to the
rest.  They might be close to being good quality, but they're missing something
- be it a good code review, some documentation, a set of tests, a real live
maintainer, or some actual wide use.  If the blanks are filled in they might be
upgraded to become part of either gst-plugins-good or gst-plugins-ugly,
depending on the other factors.
If the plugins break, you can't complain - instead, you can fix the
problem and send us a patch, or bribe someone into fixing them for you.
New contributors can start here for things to work on.


Other modules containing plugins are:


gst-plugins-base
contains a basic set of well-supported plugins
gst-plugins-good
contains a set of well-supported plugins under our preferred license
gst-plugins-ugly
contains a set of well-supported plugins, but might pose problems for
    distributors
gst-libav
contains a set of codecs plugins based on libav (formerly gst-ffmpeg)



  

Bugs fixed in this release
     
      * 764947 : autodetect: bring element down to NULL on a successful choice
      * 758257 : adaptivedemux: don't expose pads until caps are known
      * 773709 : player: Add get video snapshot API
      * 775665 : hlsdemux: problems with broken iHeartRadio streams
      * 776360 : msdk: seeking doesn't work
      * 776490 : player: Add support for selecting a specific video sink
      * 777181 : qtmux: simplify video/x-h264 caps handling
      * 777206 : dashdemux: mosaic issue for MPEG DASH live streaming due to not updating headers
      * 777376 : matrixmix: New element that mixes audio channels
      * 777377 : qtmux: add 4444 and 4444xq variants to video/x-prores pad template caps
      * 777394 : dashdemux: Do pending seek when SIDX is found
      * 777652 : iqa configure.ac: Fix AM_CONDITIONAL for HAVE_DSSIM
      * 777682 : hls: m3u8: Set sequence position for live
      * 777741 : avwait: Rename timecodewait to avwait, add modes
      * 777760 : vulkan: Usage of wrong enum in gst_vulkan_format_from_video_format()
      * 778028 : decklinkaudiosrc: Fix get_caps returning EMPTY
      * 778076 : avwait: Fix potential deadlock when flushing / shutting down audio
      * 778142 : opencv: allow compilation against 3.2.0
      * 778703 : timecodestamper: Timecode from current system time
      * 779064 : audiobuffersplit: Add drop-last property
      * 779070 : glmemory: Use glBlitFramebuffer() instead of glCopyTexImage2D() if available
      * 779103 : webrtcdsp: expose new properties.
      * 779154 : meson: Added meson.build for audiomixmatrix and timecode

==== Download ====

You can find source releases of gst-plugins-bad in the download
directory: https://gstreamer.freedesktop.org/src/gst-plugins-bad/

The git repository and details how to clone it can be found at
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/

==== Homepage ====

The project's website is https://gstreamer.freedesktop.org/

==== Support and Bugs ====

We use GNOME's bugzilla for bug reports and feature requests:
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer

Please submit patches via bugzilla as well.

For help and support, please subscribe to and send questions to the
gstreamer-devel mailing list (see below for details).

There is also a #gstreamer IRC channel on the Freenode IRC network.

==== Developers ====

GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned
from there (see link above).

Interested developers of the core library, plugins, and applications should
subscribe to the gstreamer-devel list.

        
Contributors to this release
    
      * Arun Raghavan
      * Axel Menzel
      * Edward Hervey
      * Fabien Dessenne
      * Georg Lippitsch
      * Jan Schmidt
      * Juan Pablo Ugarte
      * Lars Wendler
      * Lyon Wang
      * Mathieu Duponchelle
      * Matthew Waters
      * Nick Kallen
      * Nicola Murino
      * Scott D Phillips
      * Sebastian Dröge
      * Seungha Yang
      * Stefan Sauer
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vivia Nikolaidou
      * WeiChungChang
 