
Release notes for GStreamer 1.5.90


The GStreamer team is pleased to announce the first release candidate for the
stable 1.6 release series. The 1.6 release series is adding new features on top of
the 1.0, 1.2 and 1.4 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The final 1.6.0 release is planned
in the next few days unless any major bugs are found.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately by
the GStreamer project.



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
     
      * 746385 : task: add function guards for gst_task_set_lock()
      * 746431 : gsttask: function gst_task_join should do the argument verification before accessing GstTaskPrivate
      * 746439 : task: guard against NULL task function in  gst_task_new()
      * 748643 : gstpad: Add a new GST_PROBE_HANDLED return value for probes
      * 749590 : protection_meta: implement transform function
      * 750149 : queuearray: allow storing of structs in addition to pointers (for GQueue optimisation)
      * 750783 : baseparse: reverse playback in pull mode
      * 751622 : test_ABI: failed ABI check
      * 751628 : tests: caps: test_intersect_flagset failure
      * 751712 : buffer: gst_buffer_copy_into() should probably not copy GST_META_FLAG_POOLED metadata
      * 751819 : basesink: Shouldn't drop buffer when sync=false
      * 751840 : inputselector: unnecessary check is always true
      * 751881 : memory: Add missing field initializers to GstMapInfo
      * 751916 : Add GstHarness test framework
      * 752055 : identity: invalid read when unscheduling a gst_clock_id_wait
      * 752092 : baseparse: Passes bogus buffer durations to subclass
      * 752116 : adapter: failure of gst_adapter_get_(buffer_)list
      * 752123 : harness: don't run code inside g_assert()
      * 752493 : harness: Improve detection of element type
      * 752494 : harness: Forward sticky events to sink harness
      * 752498 : GstHarness improvements
      * 752623 : concat: Test pipeline with uridecodebin and concat freezes sometimes when setting pipeline to state NULL
      * 752662 : registry: Add plugins to the registry we are loading and not default one
      * 752746 : harness: allow full control over event forwarding
      * 752800 : basetransform: may return not-negotiation on shutdown
      * 753011 : queue2: can not update upstream_size with valid data
      * 753151 : gstpad: fix invalid object unref
      * 753338 : value: free caps during failure
      * 753455 : datetime: allow passing just a time to gst_date_time_new_from_iso8601_string() and default to " today " as date then
      * 753538 : basetransform: remove unreachable return statement
      * 753623 : pad: implement default handling of accept-caps using the template caps

==== 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
    
      * Arnaud Vrac
      * Arun Raghavan
      * Edward Hervey
      * Eunhae Choi
      * George Kiagiadakis
      * Havard Graff
      * Hyunjun Ko
      * Jan Schmidt
      * Justin Joy
      * Luis de Bethencourt
      * Mathieu Duponchelle
      * Miguel París Díaz
      * Nicolas Dufresne
      * Nirbheek Chauhan
      * Olivier Crête
      * Philippe Normand
      * Prashant Gotarne
      * Sebastian Dröge
      * Song Bing
      * Stefan Sauer
      * Stian Selnes
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vineeth T M
      * Vineeth TM
      * Vivia Nikolaidou
      * Wim Taymans
 