
Release notes for GStreamer Bad Plugins 1.3.2


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



Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.3 release series.



The versioning scheme that is used in general is that 1.x.y is API and
ABI backwards compatible with previous 1.x.y releases. If x is an even
number it is a stable release series and all releases in this series
will only contain important bugfixes, e.g. the 1.0 series with 1.0.7. If
x is odd it is a development release series that will lead to the next
stable release series 1.x+1 and contains new features and bigger
changes. During the development release series, new API can still
change.



"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
     
      * 721685 : mpegtsmux: Remove unused data in TsMuxSection
      * 723167 : curlsftpsink: allow remote host authentication by public key fingerprint
      * 726666 : gl: error: redundant redeclaration of numerous GL functions
      * 728234 : gl: Don't unconditonally use EGL extensions
      * 729542 : glimagesink: pool may never be activated, which leads to crash
      * 729588 : glimagesink: cannot play 1080p on RPI
      * 729614 : PNM Encoder is Encoding 0 x 0 images
      * 729658 : gl: wrong negotiated caps when using eglimage
      * 729742 : glcolorconvert: Should set alpha to 1 if source is opaque
      * 729743 : glcolorconvert: Should preserve alpha channel when doing AYUV - > ARGB
      * 729861 : glfilter: lose some caps informations like the framerate
      * 729896 : glupload: Ignores stride when uploading raw data
      * 730069 : gl: Crash when setting invalid GST_GL_PLATFORM
      * 730133 : motioncells:fix memleak
      * 730459 : curlsshsink: post error on bus in element, not transfer  thread
      * 729551 : GstGLDisplay: mix platform and window

==== Download ====

You can find source releases of gst-plugins-bad in the download
directory: http://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 http://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
    
      * Aurélien Zanelli
      * Edward Hervey
      * Jesper Larsen
      * Julien Isorce
      * L. Sorin
      * Luis de Bethencourt
      * Matthew Waters
      * Nicola Murino
      * Nicolas Dufresne
      * Olivier Crête
      * Reynaldo H. Verdejo Pinochet
      * Sanjay NM
      * Sebastian Dröge
      * Thiago Santos
      * Tim-Philipp Müller
      * Wim Taymans
 