
Release notes for GStreamer Ugly 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.



"When you have to shoot, shoot.  Don't talk."


There are times when the world needs a color between black and white.
Quality code to match the good's, but two-timing, backstabbing and ready to
sell your freedom down the river.  These plugins might have a patent noose
around their neck, or a lock-up license, or any other problem that makes you
think twice about shipping them.


We don't call them ugly because we like them less.  Does a mother love her
son less because he's not as pretty as the other ones ? No  - she commends
him on his great personality.  These plugins are the life of the party.
And we'll still step in and set them straight if you report any unacceptable
behaviour - because there are two kinds of people in the world, my friend:
those with a rope around their neck and the people who do the cutting.


This module contains a set of plugins that have good quality and correct
functionality, but distributing them might pose problems.  The license
on either the plugins or the supporting libraries might not be how we'd
like. The code might be widely known to present patent problems.
Distributors should check if they want/can ship these plugins.


Other modules containing plugins are:


gst-plugins-base
contains a basic set of well-supported plugins
gst-plugins-good
contains a set of well-supported plugins under our preferred license
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
     
      * 684942 : asfdemux: First buffers are 0-sized on some files
      * 708940 : x264enc: Never disables VFR when framerate is known
      * 710609 : ASF demux : bug fix - check mo_size

==== Download ====

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

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

==== 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
    
      * HyeJin Choi
      * Michael Esemplare
      * Sebastian Dröge
      * Thiago Santos
      * Tim-Philipp Müller
 