
Release notes for GStreamer Base Plugins 1.1.90


The GStreamer team is proud to announce a new bug-fix release
in the 1.x stable series of the
core of the GStreamer streaming media framework.


The 1.x series is a stable series targeted at end users.
It is not API or ABI compatible with the stable 0.10.x series.
It is, however, parallel installable with the 0.10.x series and
will not affect an existing 0.10.x installation.



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
     
      * 588535 : Elements need special handling of interlaced planar YUV formats with vertical subsampling
      * 688043 : videodecoder: no timestamps for multifilesrc ! jpegdec ! ...
      * 706340 : videofilter: it might make sense to implement the " transform_meta " virtual method
      * 706823 : videoconvert: generic conversion produces artifacts
      * 707158 : POTFILES.in is out of date
      * 707304 : testsuite FAIL: elements/audioconvert
      * 707332 : videoencoder: doesn't check for invalid duration
      * 707611 : rtspsrc state change always blocks when source is offline (waiting for connect timeout)
      * 707660 : playbin, playsink: typo in convert-sample signal docs
      * 707765 : id3v2 blob frames are not encapsuled in a GstSample
      * 707789 : Strings missed in POT
      * 707793 : dmabuf allocator shouldn't a singleton
      * 707878 : riff: Add support for TSCC2

==== Download ====

You can find source releases of gst-plugins-base in the download
directory: http://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 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
    
      * Alex Ashley
      * Christian Fredrik Kalager Schaller
      * Josep Torra
      * Loïc Minier
      * Matej Knopp
      * Mathieu Duponchelle
      * Matthieu Bouron
      * Olivier Crête
      * Piotr Drąg
      * Sebastian Dröge
      * Thiago Santos
      * Tim-Philipp Müller
      * Wim Taymans
 