
Release notes for GStreamer Base Plugins 1.5.91


The GStreamer team is pleased to announce the second release candidate for the
stable 1.6 release series. The 1.6 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 final 1.6.0 release is planned
in the next few days unless any major bugs are found.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately by
the GStreamer project.



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
     
      * 734617 : videodecoder: Call the child class finish() function on stream changes
      * 740387 : [REGRESSION] videoscale: The port to the new scaling API broke some file playback
      * 744806 : audiodecoder: early call to drain() causes segment event to be sent before caps
      * 753817 : subparse: SIGSEGV with abnormal file
      * 753850 : gl: overlay composition negotation with the sink fails
      * 754199 : audiobasesink: patch for missing/incorrect documentation about the custom slaving method
      * 754235 : playsinkconvertbin: regression after removing accept-caps handler
      * 754429 : basetextoverlay: crash in basetextoverlay for padding greater than video size
      * 754597 : appsrc: fails to push the caps at the start of the data flow when configured in seekable/random-access mode
      * 754630 : libs: " ll " printf modifier isn't available on MinGW
      * 754755 : playbin: Compiler warning with 64bit Windows target MinGW, cast to pointer from integer of different size
      * 754808 : video: missing alpha flag for some formats
      * 754973 : xvimagesink: fix error leak when context creation fails
      * 755098 : uridecodebin: Smooth Streaming's media type does not match
      * 755143 : audiosink, multisocketsink: Fix error leak during failures
      * 755198 : basetextoverlay: trivial fix in debug message
      * 755201 : playback-test: Dont free null array on exit

==== 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
    
      * Carlos Rafael Giani
      * Christophe Fergeau
      * Eunhae Choi
      * George Kiagiadakis
      * Havard Graff
      * Kouhei Sutou
      * Philippe Normand
      * Prashant Gotarne
      * Ravi Kiran K N
      * Sebastian Dröge
      * Thiago Santos
      * Tim-Philipp Müller
      * Vikram Fugro
      * Vineeth T M
      * Vineeth TM
      * Wim Taymans
 