
Release notes for GStreamer 1.9.2

The GStreamer team is pleased to announce the second release of the unstable
1.9 release series, which marks the feature freeze for 1.10. The 1.9 release
series is adding new features on top of the 1.0, 1.2, 1.4, 1.6 and 1.8 series
and is part of the API and ABI-stable 1.x release series of the GStreamer
multimedia framework. The unstable 1.9 release series will lead to the stable
1.10 release series in the next weeks. Any newly added API can still change
until that point.


Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.


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
     
      * 631673 : add " redirect " message to core
      * 756806 : message: Add extra information fields to error/warning/info messages
      * 767857 : leaks tracer: list alive objects on demand and add 'checkpointing' support
      * 767862 : leaks tracer: display creation stack trace of leaked objects
      * 768301 : buffer: add explicit setters and getters for GstBufferFlags
      * 768577 : element: clean up thread pool from gst_task_cleanup_all()
      * 768578 : leaks: warn if object is destroyed while the tracer is disposing
      * 768579 : improve some debug/log output
      * 768776 : message: fix annotation of message parse API returning objects
      * 768810 : core: add a couple of transfer annotations
      * 768948 : collectpads: add g-i transfer annotations to peek/pop/read_buffer/take_buffer functions
      * 768989 : leaks: update type filter later for unknown types
      * 768995 : New API: StreamGroupDone event
      * 769449 : queue2: Add higher-resolution low/high-watermark properties
      * 770158 : element: Add API to more easily post messages about flowing issues
      * 770161 : streams: notify tag update only when tags actually changed
      * 770225 : multiqueue: High CPU usage  with multiple audio tracks in playbin3
      * 770428 : docs: fix typo on stream selection
      * 770628 : multiqueue: Add higher-resolution low/high-watermark properties

==== Download ====

You can find source releases of gstreamer in the download
directory: https://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 https://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
    
      * Arjen Veenhuizen
      * Aurélien Zanelli
      * Carlos Rafael Giani
      * Edward Hervey
      * Guillaume Desmottes
      * Hoonhee Lee
      * Jan Schmidt
      * Josep Torra
      * Miguel París Díaz
      * Nirbheek Chauhan
      * Sebastian Dröge
      * Stefan Sauer
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Wonchul Lee
 