
Release notes for GStreamer 1.0.10


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
    
      * parse: make gst-launch syntax parser work with Bison 3
      * memory: only copy the requested part instead of the complete source memory for default system memory
      * queue2: update buffering when changing capacity
      * g-i: add bindings-friendly buffer.extract() function
      * g-i: miscellaneous gobject-introspection annotation fixes (queries, pipeline)

Bugs fixed in this release
     
      * 705630 : directcontrolbinding: Wrong behaviour of control bindings with properties that span +-INT_MAX
      * 705678 : sysmem allocator copies too much
      * 705751 : gst_pipeline_use_clock: clock should allow-none
      * 706462 : parse: fix build with Bison 3

API changes in this release
     
 - API additions:
    
      * gst_buffer_extract_dup()

==== 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
    
      * Adrian Pardini
      * Andoni Morales Alastruey
      * Kerrick Staley
      * Olivier Crête
      * Sebastian Dröge
      * Thiago Santos
      * Tim-Philipp Müller
      * Wim Taymans
 