
Release notes for GStreamer Bad Plugins 1.9.90

The GStreamer team is pleased to announce the first release candidate of the
stable 1.10 release series. The 1.10 release series is adding new features on
top of the 1.0, 1.2, 1.4, 1.6 and 1.8 series and is part of the API and
ABI-stable 1.x release series of the GStreamer multimedia framework.


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
     
      * 738079 : wayland: Destory the scaler interface while finalizing display object
      * 761987 : waylandsink relies on wl_scaler
      * 766018 : gl/dispmanx: Implements set_render_rectangle to adjust the position of window
      * 767422 : kmssink: Uses scaled size to specify input buffer region
      * 767671 : waylandsink: update from scaler protocol to viewporter protocol
      * 768158 : waylandsink : memory leak of gst_wayland_sink_get_caps() and scaler of wldisplay
      * 770146 : kmssink won't compile
      * 770221 : rtponviftimestamp: Implement property " Immediate " 
      * 770455 : fdkaacdec: asserts on HE-AAC v2 sample
      * 770925 : qmlglsink: check qt_context_ first in GstQSGTexture::bind()
      * 770933 : srtpenc: deadlock in create_session
      * 771021 : Duplicate GL_CFLAGS in gst-libs/gst/gl/Makefile.am
      * 771023 : tests/examples/gl/clutter/Makefile.am references deprecated variable $(GST_PLUGINS_GL_LIBS)
      * 771198 : mpegtsdemux: Trying to set NULL string on field 'title' on taglist
      * 771382 : dvbsuboverlay: map with READWRITE for overlay blend
      * 771780 : build: add missing $(GST_PLUGINS_BASE_LIBS)
      * 771794 : wayland/Makefile.am: add missing libs
      * 771817 : dx9screencapsrc: throw error for invalid screen index
      * 771871 : lv2 plugin doesn't do processing in case of mono sound
      * 771970 : h265parse: Fix parsing of multiple NALs in the hvcC box
      * 772067 : fdkaacenc: fix enc ! dec case
      * 772108 : fdkaacenc: set framed=true on src caps
      * 772186 : fdkaac: misc memory related fixes

==== 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
    
      * Alessandro Decina
      * Alistair Buxton
      * Arun Raghavan
      * Florian Zwoch
      * Graham Leggett
      * Gwang Yoon Hwang
      * Haihua Hu
      * Hyunjun Ko
      * Jan Schmidt
      * Joakim Johansson
      * Julien Isorce
      * Kyungyong Kim
      * Martin Kelly
      * Matthew Waters
      * Nicolas Dufresne
      * Olivier Crête
      * Philippe Normand
      * Scott D Phillips
      * Sebastian Dröge
      * Sergey Mamonov
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Víctor Manuel Jáquez Leal
      * Wonchul Lee
 