
Release notes for GStreamer 0.10.14 "Breathing Vacuum"
        


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


The 0.10.x series is a stable series targeted at end users.
It is not API or ABI compatible with the stable 0.8.x series.
It is, however, parallel installable with the 0.8.x series.


The 0.10.x series has been reworked for threadsafety.  It also features
various 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 plug-ins
gst-plugins-good
contains a set of well-supported plug-ins under our preferred license
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
    
      * State change handling improvements
      * New improved GstController API
      * Multi-queue fixes and enhancements
      * Fewer dynamic library relocations
      * Various other fixes and improvements
      * Parallel installability with 0.8.x series
      * Threadsafe design and API

Bugs fixed in this release
     
      * 457322 : registry is read twice on startup
      * 406632 : pkgconfigify the check for Check in configure.ac
      * 423700 : [multiqueue] leaks memory when flushing
      * 437457 : saving relocations for GstElementDetails
      * 444648 : [API] add GstParamSpecFraction
      * 444820 : build error with grammar.tab.c
      * 448794 : state changes are racy with decodebin after rewrite for 0...
      * 449197 : [capsfilter] Should set src pad caps on buffer
      * 449226 : Incomplete ghostpads in xml session save
      * 449493 : minor quoting fix in gst-feature.m4 macro
      * 450711 : [GstController] Improve extensibility by providing a GstC...
      * 451939 : [API] add GST_TAG_LICENSE_URI and GST_TAG_COPYRIGHT_URI
      * 459501 : gst_registry_lookup_feature_locked is slow
      * 462558 : Regression in async state change handling
      * 462752 : make gst_element_class_set_details_simple args const
      * 430682 : multiqueue doesn't output data on unlinked pads properly
      * 462085 : registry feature hash can access invalid memory
      * 357959 : buffer_alloc is not proxied through tee
      * 374639 : GstTee doesn't handle pad list resyncs properly
      * 449414 : [capsfilter] Copy of passed GstCaps taken instead of refe...
      * 453732 : [PATCH] multiqueue returns wrong internally linked pads

API changed in this release
     
- API additions:
    
* Add GstParamSpecFraction, so elements can have fraction
    properties without lots of painful string parsing (#444648).
* Add fail_unless_equals_float() and assert_equals_float()
* Add gst_type_register_static_full
* Add gst_element_class_set_details_simple
* Refactor GstController into the core controller which can take
    a GstControlSource for providing actual values for timestamps.
* add GST_TAG_LICENSE_URI and GST_TAG_COPYRIGHT_URI (#451939)
* gst_element_factory_has_interface()

Download

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

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

CVS is hosted on cvs.freedesktop.org.
All code is in CVS and can be checked out 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

Applications ported to GStreamer 0.10 include Totem, RhythmBox, Sound-Juicer,
Gnome Media, Flumotion, Amarok, Jamboree, Pitivi, Istanbul, AnnoAmp, Elisa, and others.
Let us know if you want to be added to this list.

  
Contributors to this release
    
      * Andy Wingo
      * Edward Hervey
      * Jan Schmidt
      * Mark Nauwelaerts
      * Sebastian Dröge
      * Sebastien Moutte
      * Stefan Kost
      * Steve Fink
      * Thomas Vander Stichele
      * Tim Angus
      * Tim-Philipp Müller
      * Tommi Vainikainen
      * Wim Taymans
      * Étienne Noreau-Hébert
 