
Release notes for GStreamer Good Plug-ins 0.11.92 "Money"
        


The GStreamer team is proud to announce a new release
in the 0.11.x unstable series of the
GStreamer Good Plug-ins.



The 0.11.x series is an unstable series targeted at developers and will
eventually lead up to the stable 1.0 series.
It is not API or ABI compatible with the stable 0.10.x series.
It is, however, parallel installable with the 0.10.x series.



"Such ingratitude.  After all the times I've saved your life."


A collection of plug-ins you'd want to have right next to you on the
battlefield.  Shooting sharp and making no mistakes, these plug-ins have it
all: good looks, good code, and good licensing.  Documented and dressed up
in tests.  If you're looking for a role model to base your own plug-in on,
here it is.


If you find a plot hole or a badly lip-synced line of code in them,
let us know - it is a matter of honour for us to ensure Blondie doesn't look
like he's been walking 100 miles through the desert without water.


This module contains a set of plug-ins that we consider to have good quality
  code, correct functionality, our preferred license (LGPL for the plug-in
  code, LGPL or LGPL-compatible for the supporting library).
We believe distributors can safely ship these plug-ins.
People writing elements should base their code on these elements.


Other modules containing plug-ins are:


gst-plugins-base
contains a basic set of well-supported plug-ins
gst-plugins-ugly
contains a set of well-supported plug-ins, but might pose problems for
    distributors
gst-plugins-bad
contains a set of less supported plug-ins that haven't passed the
    rigorous quality testing we expect



  

Features of this release
    
      * Parallel installability with 0.10.x series
      * API cleanup and minor API improvements
      * Lots of bugfixes, cleanup and other improvements
There were no bugs fixed in this release
    

Download

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

GStreamer Homepage

More details can be found on the project's website:
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

Developers

GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned from there.
Interested developers of the core library, plug-ins, and applications should
subscribe to the gstreamer-devel list. If there is sufficient interest we
will create more lists as necessary.

        
Applications
  
Contributors to this release
    
      * Alessandro Decina
      * Andoni Morales Alastruey
      * Anton Novikov
      * Edward Hervey
      * Jens Georg
      * Jonas Holmberg
      * Josep Torra
      * Luis de Bethencourt
      * Maria Giovanna Chiossa
      * Mark Nauwelaerts
      * Matej Knopp
      * Mathias Hasselmann
      * Michael Jones
      * Mohammed Sameer
      * Sebastian Dröge
      * Sebastian Rasmussen
      * Sjoerd Simons
      * Sreerenj Balachandran
      * Thiago Santos
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Wim Taymans
      * Youness Alaoui
 