
Release notes for GStreamer 1.0.1


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
    
      * Parallel installability with 0.10.x series
      * Capsfilter prefers filter caps over passthrough now
      * Application Development Manual, Plugin Writer's Guide and other documentation updated and extended for 1.0
      * Bug fixes

Bugs fixed in this release
     
      * 680862 :  " identity " with single-segment=true gives buffer.pts of CLOCK_TIME_NONE
      * 684538 : baseparse: no timestamps after seeking in mp3 or aac
      * 684755 : typo - whithin > within
      * 684765 : Plugins without a klass in the metadata crashes autoaudiosink
      * 684809 : proxypad don't hold a ref to their internal pad while streaming through it
      * 684970 : Don't register printf extension for %p when glib is not using system printf
      * 684981 : Pipeline hangs on PREROLLING negotiating caps
      * 685072 : memory: map(READ)/unmap clears the READONLY status

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

==== 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
    
      * Jan Schmidt
      * Josep Torra Valles
      * Mark Nauwelaerts
      * Olivier Blin
      * Olivier Crête
      * Sebastian Dröge
      * Tim-Philipp Müller
      * Wim Taymans
 