
Release notes for GStreamer Base Plugins 1.5.2


The GStreamer team is pleased to announce the second release of the unstable
1.5 release series. The 1.5 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 unstable 1.5 release series
will lead to the stable 1.6 release series in the next weeks, and newly added
API can still change until that point.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.5 release series.



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
     
      * 708362 : audiobasesink: new slave-method for custom clock slaving algorithms
      * 748908 : playsink: cannot enable text flag while playing
      * 749039 : x11: X and XV imagesink don't need to cache the pools
      * 749243 : textoverlay: gltestsrc ! textoverlay ! fakesink does not work
      * 749764 : videoscaler: invalid memory access when downscaling in some cases
      * 749823 : basetextoverlay: add properties for toggling drawing text shadow and outline
      * 750013 : playbin: seeking halts playback with gst-play-1.0 gapless
      * 750455 : xvimagesink, ximagesink: set WM_CLASS for the window
      * 750585 : gst-play: sort directory entries
      * 750691 : playsink: fix the channel of color balance element
      * 750785 : playbin: assrender is not used anymore when available
      * 750802 : typefind: UTF-8 MSS manifest parsing support
      * 750823 : discoverer test racy
      * 751000 : oggdemux: crash with validate.http.media_check.vorbis_theora_1_ogg
      * 751118 : playbin: current-suburi does not return correct status when an invalid SUBURI is passed
      * 751144 : audioringbuffer: Fix alaw/mulaw channel positions
      * 751213 : tools: gst-play: fix seeking issue

==== 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
    
      * Arun Raghavan
      * Brijesh Singh
      * Carlos Rafael Giani
      * Edward Hervey
      * Guillaume Desmottes
      * Jan Schmidt
      * Lazar Claudiu
      * Luis de Bethencourt
      * Lyon Wang
      * Matej Knopp
      * Nicolas Dufresne
      * Philippe Normand
      * Sebastian Dröge
      * Song Bing
      * Sreerenj Balachandran
      * Stefan Sauer
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vineeth T M
      * Vineeth TM
      * Vivia Nikolaidou
      * Víctor Manuel Jáquez Leal
      * Wim Taymans
      * Xavier Claessens
 