
Release notes for GStreamer Base Plugins 1.5.90


The GStreamer team is pleased to announce the first 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
     
      * 728636 : textoverlay: cuts off right edge italicised text
      * 737427 : appsink: Can't influence allocation query to satisfy user needs
      * 742385 : video/audio encoders/decoders: need API to determine when to copy over GstMetas and when to drop them
      * 746010 : oggdemux: doesn't go into pull mode even when queue2 ring-buffer is enabled
      * 748635 : videorate: caps negotiation regression
      * 750235 : [API] rtpbasedepayload: add process_rtp_packet() vfunc
      * 751147 : appsink: pull_preroll returns wrong segment in the sample
      * 751690 : playbin : remove unnecessary break
      * 751883 : rtcpbuffer: Fix validation of packets with padding
      * 751932 : GstVideoDecoder: Fix setting default pixel-aspect-ratio
      * 752011 : video: Add boxed type for GstVideoInfo structure
      * 752040 : gst-play: fix memory leak
      * 752041 : ximagesink: fix navigation event leak
      * 752042 : xvimagesink: fix pad memory leak
      * 752043 : ximagesink: Post navigation events as message on the bus
      * 752051 : GstVideoScaler:  Initialised scaling functions to get rid of compiler messages
      * 752059 : xvimagesink: refactor to use gst_pad_push_event
      * 752111 : rtpbasedepayload: Fix minor leak of segment event
      * 752156 : playsink: Require streamvolume interface for sink volumes for standardized behaviour
      * 752228 : payloader/depayload: Wrong segment handling
      * 752359 : playback-test: fix memory leak
      * 752397 : playback-test: fix tag list leak
      * 752400 : jsseek: fix tag list leak
      * 752436 : typefind: Treat *.umx (Unreal Music Package) as audio/x-mod
      * 752454 : jsseek: fix memory leaks
      * 753001 : rtp buffer: NULL GstBuffer pointer being passed within gst_rtp_buffer_set_extension_data
      * 753078 : oggdemux: Segfault on state-change intensive test
      * 753088 : decodebin: fix deadend_details string leak
      * 753360 : videodecoder: pushes gap before segment
      * 753483 : videorate: add support for bayer formats
      * 753701 : discoverer: Few trivial fixes in handling error cases
      * 611157 : video: API to signal stereoscopic and multiview video

==== 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
    
      * Brian Peters
      * Edward Hervey
      * George Kiagiadakis
      * Hyunjun Ko
      * Jan Schmidt
      * Joan Pau Beltran
      * Lubosz Sarnecki
      * Luis de Bethencourt
      * Marcin Kolny
      * Myoungsun Lee
      * Nicolas Dufresne
      * Olivier Crête
      * Rico Tzschichholz
      * Sebastian Dröge
      * Stefan Sauer
      * Stian Selnes
      * Thiago Santos
      * Tim-Philipp Müller
      * Tobias Mueller
      * Ville Skyttä
      * Vineeth T M
      * Vineeth TM
      * Vivia Nikolaidou
      * Wim Taymans
      * danny song
 