
Release notes for GStreamer Good Plugins 1.6.1


The GStreamer team is proud to announce the first bugfix release in the stable
1.6 release series of your favourite cross-platform multimedia framework!



This release only contains bugfixes and it is safe to update from 1.6.0. For a
full list of bugfixes see Bugzilla.



See http://gstreamer.freedesktop.org/releases/1.6/
for the full release notes.



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


A collection of plugins you'd want to have right next to you on the
battlefield.  Shooting sharp and making no mistakes, these plugins 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 plugin 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 plugins that we consider to have good quality
  code, correct functionality, our preferred license (LGPL for the plugin
  code, LGPL or LGPL-compatible for the supporting library).
We believe distributors can safely ship these plugins.
People writing elements should base their code on these elements.


Other modules containing plugins are:


gst-plugins-base
contains a basic set of well-supported plugins
gst-plugins-ugly
contains a set of well-supported plugins, but might pose problems for
    distributors
gst-plugins-bad
contains a set of less supported plugins that haven't passed the
    rigorous quality testing we expect, or are still missing documentation
    and/or unit tests
gst-libav
contains a set of codecs plugins based on libav (formerly gst-ffmpeg)



  

Bugs fixed in this release
     
      * 750108 : splitmuxsink: post messages when fragments are being opened and closed
      * 753617 : splitmuxsink: allow non-video streams to serve as reference
      * 753622 : splitmuxsink: do not destroy the multiqueue & muxer when going to NULL
      * 753624 : splitmuxsink: initialize mux_start_time properly
      * 754212 : cutter: Fix buffer leak
      * 755611 : aacparse: wrong LOAS config reading
      * 755708 : matroskademux: assertion failed: (stream- > alignment < = G_MEM_ALIGN)
      * 755773 : gdkpixbufoverlay memleak
      * 756068 : qtmux: fix sample memory leak
      * 756154 : qtmux: doesn't compile on OS X 10.6: strnlen not available
      * 756171 : qtmux: fix date memory leak
      * 756387 : qtmux: Allow negotiating to S8 as a raw format but stop making it best choice
      * 756388 : qtmux: Add ProRes support
      * 756544 : qtdemux: Fix taglist leak
      * 756561 : qtdemux: fix caps leak
      * 756799 : auparse: fix event leak
      * 756967 : matroskamux: drops JPEG input buffers with just PTS and no DTS set on them
      * 757033 : scaletempo: Does not work properly with negative rates playback
      * 757087 : splitmux: unit test fails due to missing files

==== Download ====

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

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

==== 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
    
      * George Kiagiadakis
      * Guillaume Desmottes
      * Guillaume Marquebielle
      * Jan Schmidt
      * Nicola Murino
      * Nirbheek Chauhan
      * Ramiro Polla
      * Ryan Hendrickson
      * Sebastian Dröge
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vineeth TM
 