
Release notes for GStreamer Base Plugins 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 contains a set of reference plugins, base classes for other
plugins, and helper libraries. It also includes essential elements such
as audio and video format converters, and higher-level components like playbin,
decodebin, encodebin, and discoverer.

This module is kept up-to-date together with the core developments.  Element
writers should look at the elements in this module as a reference for
their development.

This module contains elements for, among others:

  device plugins: x(v)imagesink, alsa, v4lsrc, cdparanoia
  containers: ogg
  codecs: vorbis, theora
  text: textoverlay, subparse
  sources: audiotestsrc, videotestsrc, giosrc
  network: tcp
  typefind functions
  audio processing: audioconvert, adder, audiorate, audioresample, volume
  visualisation: libvisual
  video processing: videoconvert, videoscale
  high-level components: playbin, uridecodebin, decodebin, encodebin, discoverer
  libraries: app, audio, fft, pbutils, riff, rtp, rtsp, sdp, tag, video


Other modules containing plugins are:


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
     
      * 758389 : rtsp-url: unescape special chars in user/pass part of URL
      * 771723 : opusdec: too short buffers trigger error instead of PLC
      * 774908 : multifdsink removing slow client corrupts matroska stream
      * 775351 : multihandlesink: buffers-queued is off by one
      * 775459 : oggdemux: Hangs on divx-bandits-sample file
      * 775480 : ssaparse: memory leak in gst_ssa_parse_setcaps
      * 775687 : tagdemux: Crash if getrange/shutdown happen at the same time
      * 775887 : qtdemux/xmptag: memory leak in gst_tag_list_from_xmp_buffer
      * 776403 : gst-play should set GST_GL_XINITHREADS so that XinitThread() is called appropriately
      * 776623 : playbin/playsink fail to use timeoverlay as video-filter
      * 777262 : riff-media: floating point exception in gst_riff_create_audio_caps
      * 777265 : riff: stack overflow in gst_riff_create_audio_caps
      * 777502 : samiparse: heap oob in html_context_handle_element
      * 777525 : floating point exception in gst_riff_create_audio_caps (different than #777262)
      * 777921 : audio-resampler: integer overflow in clamping code

==== Download ====

You can find source releases of gst-plugins-base in the download
directory: https://gstreamer.freedesktop.org/src/gst-plugins-base/

The git repository and details how to clone it can be found at
http://cgit.freedesktop.org/gstreamer/gst-plugins-base/

==== 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
    
      * Carlos Rafael Giani
      * Jan Alexander Steffens (heftig)
      * Jan Schmidt
      * Mark Nauwelaerts
      * Nicolas Dechesne
      * Sebastian Dröge
      * Stuart Weaver
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vincent Penquerc'h
 