
Release notes for GStreamer Base Plugins 1.10.2

The GStreamer team is proud to announce the second 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
     
      * 774911 : mikey:  gst_mikey_message_new_from_caps does not generate a correct message
      * 774585 : videotimecode: Fix incorrect nsec_since_daily_jam calculation
      * 774902 : typefind: out of bounds memory read in windows_icon_typefind
      * 775224 : subtitleoverlay: Caps memory leak when failing to get sinkpad from subtitle renderer

==== 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
    
      * Edward Hervey
      * Garima Gaur
      * Matthew Waters
      * Sebastian Dröge
      * Tim-Philipp Müller
      * Ulf Olsson
      * Vivia Nikolaidou
 