
Release notes for GStreamer 1.0.5


The GStreamer team is pleased 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

      * add GST_BIN_FLAG_NO_RESYNC flag that disables a resync when
        an element is added, removed or linked in the bin; this is
        interesting for complex bins that dynamically add elements
        to themselves and want to manage the state of those elements
        without interference from state resync threads (which may
        cause deadlocks)
      * add OTHER clock type

Bugs fixed in this release

      * 690915 : Replace AM_CONFIG_HEADER with AC_CONFIG_HEADERS in configure.ac

API changes in this release

 - API additions:

      * GST_BIN_FLAG_NO_RESYNC
      * GST_CLOCK_TYPE_OTHER

==== 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
    
      * Thijs Vermeir
      * Tim-Philipp Müller
      * Wim Taymans
 
