
Release notes for GStreamer Good Plugins 1.10.0

The GStreamer team is pleased to announce the first release of the new 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 shortly after
the source release by the GStreamer project during the stable 1.10 release
series.


"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
     
      * 762207 : flvmux: Ensure we fallback to DTS when clipping
      * 772496 : tests: Fix memory leak by gst_caps_to_string()
      * 772497 : waveform : Fix Memory leak by gst_caps_to_string
      * 772644 : Fix level test in CK_FORK=no mode
      * 772656 : Fix souphttpsrc tests without CK_FORK=no
      * 773509 : souphttpsrc: connection loss / reconnect issues
      * 773580 : v4l2object: fix extra-controls leak
      * 773582 : matroskamux does not allow resolutions above 4096x4096
      * 773643 : wavparse: crashes on invalid wav file

==== Download ====

You can find source releases of gst-plugins-good in the download
directory: https://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 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
    
      * Branko Subasic
      * Gaurav Gupta
      * Jan Alexander Steffens (heftig)
      * Jan Schmidt
      * Mark Nauwelaerts
      * Michael Olbrich
      * Nicolas Dufresne
      * Nirbheek Chauhan
      * Scott D Phillips
      * Sebastian Dröge
      * Thibault Saunier
      * Tim-Philipp Müller
      * Tobias Schneider
 