
Release notes for GStreamer Bad Plugins 1.5.2


The GStreamer team is pleased to announce the second release of the unstable
1.5 release series. The 1.5 release series is adding new features on top of
the 1.0, 1.2 and 1.4 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The unstable 1.5 release series
will lead to the stable 1.6 release series in the next weeks, and newly added
API can still change until that point.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.5 release series.



"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
     
      * 751101 : glimagesink: Broken on iOS
      * 673925 : [API] codecparsers: add JPEG baseline parser
      * 735653 : mpegts: return early if packetizing short section
      * 739345 : codecparsers: mpeg4: fix ignored increment of return value
      * 744459 : opensles: Allow setting stream type
      * 745748 : liveadder: Fix memory leak
      * 746765 : mpegtsmux: Remove arbitrary constraint on prog-map program ids
      * 748922 : vtdec: duplicating input frame's metas (inc. source H264 sample buffer)
      * 748946 : videoaggregator: add " ignore-eos " property to input pads to ignore EOS
      * 748947 : playout: New example for seamless audio/video playback
      * 749856 : d3dvideosink: avoid frame rendering while window handle is hidden
      * 750098 : New element to convert GST_FLOW_ERROR into GST_FLOW_OK
      * 750185 : gl: Not showing any video on Android (skip glDrawElements, PowerVR SGX 544MP)
      * 750390 : tests: dashdemux: add unit tests for checking the parsing of MPD element
      * 750601 : uvch264: FTBFS because of uninitialized variables
      * 750619 : cannot build dash against an uninstalled GStreamer
      * 750635 : vtenc: add alignment=au to sink caps
      * 750638 : avfassetsrc: fix huge memory leak
      * 750668 : vtenc: gst_vtenc_frame_free on error
      * 750669 : vtenc: always enqueue frames, even on error
      * 750671 : vtenc: free input buffer ASAP
      * 750685 : h263parse: Wrong mask use in the find_psc function.
      * 750797 : dashdemux: period duration is not validated
      * 750804 : dashdemux: incorrectly calculates presentationTimeOffset if the value is larger than 2^32
      * 750863 : tests: dashdemux: added unit tests for parsing period element
      * 750866 : dashdemux: xml parser will segfault if there is no default namespace
      * 750881 : glmixerbin: correctly free input chain on pad release
      * 750961 : mpegtsmux: fix build error
      * 750992 : opusenc: Add bitrate to the tags
      * 751003 : glimagesink: Windows are sharing their events
      * 751048 : avfvideosrc: caps should indicate frame rate range
      * 751087 : nalutils: trivial cleanup
      * 751149 : dashdemux: add warning messages
      * 751153 : dashdemux: wrong representation index returned when max_bandwidth is 0
      * 751221 : motioncells: Fix the build on FreeBSD
      * 751228 : texParameterf missing?
      * 751255 : videoaggregator: simplifies and improves sink_get_caps.
      * 751305 : bad: fix some issues found using static analysis tools

==== 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
    
      * Alessandro Decina
      * Alex Ashley
      * Arun Raghavan
      * Chris Clayton
      * Edward Hervey
      * Fabio Cetrini
      * Florin Apostol
      * Gwenole Beauchesne
      * Ilya Konstantinov
      * Jan Schmidt
      * Jesper Larsen
      * John Ludwig
      * Julien Isorce
      * Luis de Bethencourt
      * Mathieu Duponchelle
      * Matthew Waters
      * Mersad Jelacic
      * Nicolas Dufresne
      * Nirbheek Chauhan
      * Santiago Carot-Nemesio
      * Sebastian Dröge
      * Stefan Sauer
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vineeth TM
      * Vivia Nikolaidou
      * Wim Taymans
      * Wind Yuan
      * Yanko Kaneti
 