
Release notes for GStreamer Base Plugins 1.3.91


The GStreamer team is pleased to announce the second release candidate of
the stable 1.4 release series. The 1.4 release series is adding new features
on top of the 1.0 and 1.2 series and is part of the API and ABI-stable 1.x
release series of the GStreamer multimedia framework.


This release candidate will hopefully shortly be followed by the stable 1.4.0
release if no bigger regressions or bigger issues are detected, and enough
testing of the release candidate happened. The new API that was added during
the 1.3 release series is not expected to change anymore at this point.


Binaries for Android, iOS, Mac OS X and Windows are provided together with this
release.


The stable 1.4 release series is API and ABI compatible with 1.0.x, 1.2.x and
any other 1.x release series in the future. Compared to 1.2.x it contains some
new features and more intrusive changes that were considered too risky as a
bugfix.



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
     
      * 730441 : dmabuf: shared the mapping with shared copies of the memory
      * 731974 : videodecoder: parse source data until a frame is obtained
      * 732459 : rtspconnection: tunneled connections do not work if POST channel is established first
      * 732589 : gst_mikey_* not introspection-friendly
      * 732593 : tests: codec-select: Plug element name memory leak
      * 732595 : Introspection and documentation issues for new 1.4 symbols
      * 732697 : riff: Hexprint invalid fourcc in error message
      * 732709 : sdp: gstmikey.h not included by single include header (sdp.h)
      * 732945 : giosink: Won't work with mp4mux
      * 733046 : visual: Remove support for < 0.4

==== 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
    
      * Edward Hervey
      * Evan Nemerson
      * Gwenole Beauchesne
      * Nicolas Dufresne
      * Sebastian Dröge
      * Sebastian Rasmussen
      * Wim Taymans
 