
Release notes for GStreamer 1.1.2


The GStreamer team is proud to announce a new bug-fix release
in the 1.x stable series of the
core of the GStreamer streaming media framework.


The 1.x series is a stable series targeted at end users.
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 and
will not affect an existing 0.10.x installation.


The 1.x series has been reworked for more flexible memory handling, improved
caps negotiation and re-negotiation, better handling of dynamic pipelines,
and increased performance in general. It also features countless other feature
additions and enhancements.


This module, gstreamer, only contains core functionality.
For actual media playback, you will need other modules.

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-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)



  

Features of this release
    

Bugs fixed in this release
     
      * 652037 : basesrc: less persistent caching of size
      * 701985 : gst-launch: Unreffing GstContext that is still used
      * 702089 : gst_init: Don't intercept --help
      * 702520 : queue: deadlock when reconfigure event
      * 702632 : acceptcaps query can be very very slow
      * 703267 : funnel: Needs to be usable in playbin
      * 703377 : gst_check_setup_events() and multiple src or sink pads
      * 703682 : POTFILES.in is out of date

==== Download ====

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

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

==== 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
    
      * Brendan Long
      * Edward Hervey
      * Hans de Goede
      * Jonas Holmberg
      * Kim Lam
      * Nicolas Dufresne
      * Olivier Crête
      * Paul HENRYS
      * Piotr Drąg
      * Sebastian Dröge
      * Sjoerd Simons
      * Stefan Sauer
      * Thibault Saunier
      * Tim-Philipp Müller
      * Wim Taymans
 