
Release notes for GStreamer Base Plugins 1.9.90

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


Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.


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
     
      * 729276 : audioresample: Misdetected and/or misused intrinsics headers
      * 769771 : rtpbuffer: Add buffer flag RETRANSMISSION
      * 770314 : oggdemux: Does not go back to beginning point on EOS when determining stream length
      * 770446 : pulsesrc, audiosrc: No audio captured with new GStreamer 1.8.2
      * 770692 : playbackutils: Move compare_factories_func
      * 770698 : video-orc.orc doesn't compile with orc 0.4.23

==== Download ====

You can find source releases of gst-plugins-base in the download
directory: https://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 https://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
      * Edward Hervey
      * Havard Graff
      * Jan Schmidt
      * Jonathan Matthew
      * Nicolas Dufresne
      * Sebastian Dröge
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Víctor Manuel Jáquez Leal
      * Wim Taymans
      * Wonchul Lee
 