
Release notes for GStreamer 1.10.3

The GStreamer team is proud to announce the third bugfix release in the stable
1.10 release series of your favourite cross-platform multimedia framework!


This release only contains bugfixes and it is safe to update from 1.10.x. For a
full list of bugfixes see Bugzilla.


See /releases/1.10/ for the full release notes.


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
     
      * 776125 : fix an use after free in gst_base_sink_send_event()
      * 775538 : Property " name " is not set for the net client clock
      * 775661 : gstconfig: Compile failure for xtensa and microblaze architectures (unaligned access support)
      * 775714 : bash autocomplete uses ges-launch for parameter autocompletion
      * 775728 : gstconfig: Compile failure for arc and nios2 architectures (unaligned access support)
      * 775921 : multiqueue: Fix overflow on get_buffering_level()
      * 776039 : queue: deadlock between sink query and state change
      * 776401 : gst-launch should set GST_GL_XINITHREADS so that XinitThread() is called appropriately
      * 777263 : datetime: out of bounds read in gst_date_time_new_from_iso8601_string()

==== 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
    
      * Edward Hervey
      * Fabrice Bellet
      * Jan Schmidt
      * Marcin Kolny
      * Nicolas Dechesne
      * Peter Seiderer
      * Ricardo Ribalda Delgado
      * Sebastian Dröge
      * Seungha Yang
      * Stefan Sauer
      * Tim-Philipp Müller
 