
Release notes for GStreamer Bad Plugins 1.4.5

The GStreamer team is pleased to announce a bugfix release of the stable
1.4 release series. The 1.4 release series is adding new features on top
of the 1.2 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework that contains new features.
The 1.4.x bugfix releases only contain important bugfixes compared to 1.4.0.


Binaries for Android, iOS, Mac OS X and Windows are provided by the
GStreamer project for this release.


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


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



"That an accusation?"


No perfectly groomed moustache or any amount of fine clothing is going to
cover up the truth - these plugins are Bad with a capital B.
They look fine on the outside, and might even appear to get the job done, but
at the end of the day they're a black sheep. Without a golden-haired angel
to watch over them, they'll probably land in an unmarked grave at the final
showdown.


Don't bug us about their quality - exercise your Free Software rights,
patch up the offender and send us the patch on the fastest steed you can
steal from the Confederates. Because you see, in this world, there's two
kinds of people, my friend: those with loaded guns and those who dig.
You dig.


This module contains a set of plugins that aren't up to par compared to the
rest.  They might be close to being good quality, but they're missing something
- be it a good code review, some documentation, a set of tests, a real live
maintainer, or some actual wide use.  If the blanks are filled in they might be
upgraded to become part of either gst-plugins-good or gst-plugins-ugly,
depending on the other factors.
If the plugins break, you can't complain - instead, you can fix the
problem and send us a patch, or bribe someone into fixing them for you.
New contributors can start here for things to work on.


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-ugly
contains a set of well-supported plugins, but might pose problems for
    distributors
gst-libav
contains a set of codecs plugins based on libav (formerly gst-ffmpeg)



  

Bugs fixed in this release
     
      * 722764 : rawparse: fix SEEKING query handling
      * 729768 : mpegtsbase: Raise limit to read more bytes initially to find PCR
      * 739152 : gl/cocoa: build with GNUStep fails
      * 740191 : dvbbasesink: segfaults on 32-bit (rpi)
      * 740201 : gl/cocoa: Does not compile on OSX < 10.7 anymore
      * 740451 : srtpdec: leaks rtp/rtcp sink events
      * 740953 : configure.ac: unportable test(1) comparison operator
      * 741321 : opusparse: fix header parsing esp. of encoded output of libopus

==== Download ====

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

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

==== 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 Flaqué
      * Alessandro Decina
      * Gwenole Beauchesne
      * Mathieu Duponchelle
      * Matthew Waters
      * Sebastian Dröge
      * Sudip Jain
      * Thibault Saunier
      * Thomas Klausner
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Wim Taymans
      * Wonchul Lee
 