
Release notes for GStreamer Bad Plugins 1.4.1


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
     
      * 678485 : templatematch: element improvements
      * 725871 : decklinksink: no output, only black
      * 730509 : facedetect: fix update on change
      * 731824 : hlsdemux pause after first filesegment (apple test files)
      * 733245 : gl: Document GST_GL_PLATFORM, GST_GL_API and GST_GL_WINDOW somewhere
      * 733426 : gl/sdl example fails to build (missing include directory?)
      * 733487 : openjpeg: Win32-compatible OpenJPEG-2.0 detection
      * 733490 : tsdemux: H264 seeking broken in push mode
      * 733545 : GL element leaks FBO when caps changed dynamically
      * 733726 : glimagesink: Flashes white sometimes (unpausing, seeking, window scaling)
      * 733837 : hlsdemux: doesn't stop buffering more segments after overrun
      * 734014 : dashdemux: stream downloader try to download next segments after pipeline interupt
      * 734015 : tsdemux: bad timestamping
      * 734269 : GLUpload didn't update texture properly
      * 734394 : tsdemux: Can not change program except destroy pipeline
      * 734517 : opusenc: Unref pad template caps after usage
      * 734519 : ladspa: Unref pad template caps after usage
      * 734520 : openal: Unref pad template caps after usage
      * 734521 : sbcenc: Unref output caps in error cases
      * 734522 : videoaggregator: Unref allowed caps after usage
      * 734524 : wrappercamerabinsrc: Unref elements after usage
      * 734528 : dvbsuboverlay: Avoid leaking copy of caps object
      * 734531 : interlace: Unref pad template caps after usage
      * 734533 : amcvideoenc: Avoid leaking copy of caps object
      * 734534 : vtenc: Avoid leaking caps object and its copy
      * 734536 : directsoundsrc: Avoid leaking copy of caps object
      * 734537 : pvrvideosink: Avoid leaking bufferpool configuration
      * 734539 : element-maker: Avoid leaking copy of caps object
      * 734544 : gstgsmenc: Unref caps object after usage
      * 734763 : scenechange: fix crash on startup
      * 734830 : GstGLMixer gl resource race condition
      * 735078 : gst_gl_handle_set_context may unref a NULL GstGLDisplay

==== 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
    
      * Aurélien Zanelli
      * David Rothlisberger
      * George Kiagiadakis
      * Mathieu Duponchelle
      * Matthew Waters
      * Nicola Murino
      * Sebastian Dröge
      * Sebastian Rasmussen
      * Thiago Santos
      * Vineeth T M
      * Wang Xin-yu (王昕宇)
      * Руслан Ижбулатов
 