
Release notes for GStreamer Good Plugins 1.2.1


The GStreamer team is proud to announce a new bug-fix release
in the 1.x stable series of the
core of the GStreamer streaming media framework.


The 1.x series is a stable series targeted at end users.
It is not API or ABI compatible with the stable 0.10.x series.
It is, however, parallel installable with the 0.10.x series and
will not affect an existing 0.10.x installation.



"Such ingratitude.  After all the times I've saved your life."


A collection of plugins you'd want to have right next to you on the
battlefield.  Shooting sharp and making no mistakes, these plugins have it
all: good looks, good code, and good licensing.  Documented and dressed up
in tests.  If you're looking for a role model to base your own plugin on,
here it is.


If you find a plot hole or a badly lip-synced line of code in them,
let us know - it is a matter of honour for us to ensure Blondie doesn't look
like he's been walking 100 miles through the desert without water.


This module contains a set of plugins that we consider to have good quality
  code, correct functionality, our preferred license (LGPL for the plugin
  code, LGPL or LGPL-compatible for the supporting library).
We believe distributors can safely ship these plugins.
People writing elements should base their code on these elements.


Other modules containing plugins are:


gst-plugins-base
contains a basic set of well-supported plugins
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
     
      * 683536 : souphttpsrc: Handles long pause (long enough to timeout TCP socket connection) as EOS
      * 707933 : matroskademux: Wrong UTF8 detection causes wrong detection of subtitle encoding
      * 707975 : qtdemux: Can't handle datetimes before 1970 yet
      * 708505 : matroskademux: sends unnecessary gap events
      * 708864 : mp4mux: Does not negotiate due to framerate caps not set on peer pad
      * 709270 : qtdemux: Does not support mp2v fourcc for MPEG-2 video
      * 709352 : jpegdec: Does not require width/height on caps or parsed input
      * 709384 : videomixer: Check if the source pad needs reconfiguration and update the source caps in that case
      * 709390 : videomixer: Update videoconversion code
      * 709423 : v4l2bufferpool: O_CLOEXEC needs _GNU_SOURCE
      * 709457 : Do not write out SegmentUID when muxing to WebM
      * 709507 : deinterlace: Segfault in handling of planar YUV video formats
      * 709614 : wavenc: Uses invalid caps for alaw and mulaw
      * 709728 : dvdemux/dvdec: Sends stream-start, caps and segment events in wrong order
      * 710110 : multiudpsink: Leaks GstMemories when flushing
      * 710215 : audioiirfilter: Crashes when no coefficients are provided
      * 710623 : qtdemux: Video captured by iPad couldn't play in push mode
      * 711230 : rtspsrc: allow setting certificate validation flags
      * 711497 : rtpvp8pay: Compatibility issue with linphone due to always sending a picture id
      * 711699 : wavenc: bogus header generated

==== Download ====

You can find source releases of gst-plugins-good in the download
directory: http://gstreamer.freedesktop.org/src/gst-plugins-good/

The git repository and details how to clone it can be found at
http://cgit.freedesktop.org/gstreamer/gst-plugins-good/

==== 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
    
      * Aleix Conchillo Flaque
      * Andoni Morales Alastruey
      * Hans Månsson
      * Matej Knopp
      * Mathieu Duponchelle
      * Matthieu Bouron
      * Ognyan Tonchev
      * Olivier Crête
      * Peter Korsgaard
      * Philippe Normand
      * Reynaldo H. Verdejo Pinochet
      * Rico Tzschichholz
      * Sebastian Dröge
      * Thiago Santos
      * Tim-Philipp Müller
      * Wim Taymans
 