
Release notes for GStreamer 1.9.90

The GStreamer team is pleased to announce the first release candidate of the
stable 1.10 release series. The 1.10 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.


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
     
      * 753922 : GValue types are registered after types that might use them (e.g. tags)
      * 770731 : gstconfig.h: Need to add support for more platforms / PPC broken
      * 770740 : No way to disable build of tests/misc
      * 771104 : element: seek_simple() does not reset stop position
      * 771210 : tests: new queue2: Add higher-resolution low/high-watermark properties unit test is flaky
      * 771306 : basesink: Remove unused fields and always use the buffer timestamp difference for calculating the QoS proportion
      * 771649 : gst_bin_sort_iterator_copy doesn't copy GstBinSortIterator::queue
      * 771029 : MSVC can't link against autotools-build generated DLLs

==== 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
    
      * Arun Raghavan
      * Carlos Rafael Giani
      * Graham Leggett
      * Jan Schmidt
      * Kouhei Sutou
      * Nirbheek Chauhan
      * Sebastian Dröge
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Wim Taymans
      * Wonchul Lee
 