
Release notes for GStreamer 1.1.90


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)



  

Bugs fixed in this release
     
      * 701996 : context: Still inconvenient to use and racy
      * 707088 : capsfilter: Don't forget to update pending_events.
      * 707130 : output-selector: Changes the start of the segment it sends to a pad when making it active
      * 707156 : multiqueue: Lowering single queue limits below automatically detected limits can cause the pipeline to starve
      * 707648 : queue2: Update the buffering state before stalling for more data
      * 707657 : tests/capsfilter: Improving check test code coverage...

==== 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
    
      * Christian Fredrik Kalager Schaller
      * Gustavo Noronha Silva
      * Jonas Holmberg
      * Matej Knopp
      * Mathieu Duponchelle
      * Rico Tzschichholz
      * Sebastian Dröge
      * Sebastian Rasmussen
      * Thiago Santos
      * Tim-Philipp Müller
      * Zaheer Abbas Merali
 