
Release notes for GStreamer Bad Plugins 1.9.2

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


Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.


"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
     
      * 737173 : h264parse wrongly insert DISCONT flags when converting into AVC
      * 741104 : dashdemux: add support for I frame based trick play
      * 753751 : Dashdemux: returned seekable range for live streams is not usable
      * 765314 : player: Add way to override HTTP (+RTSP, etc) user agent
      * 767011 : rawparse: new rawaudioparse and rawvideoparse element which deprecate audioparse, unalignedaudioparse, and videoparse
      * 767169 : adaptivedemux: avoid possible deadlock while destroying old  sources
      * 767879 : Deadlock in WebKit when deleting the media player while HLS media was loaded
      * 768160 : qtplugins: How to implement qmlglsrc.
      * 768553 : Configure check for OpenGL is wrong on OS X.
      * 768595 : lv2: Does not build with lilv 0.20
      * 768602 : EGL_DMA_Buf: Wrong attribute list type for EGL 1.5
      * 768696 : Mac OS X build warnings: -Werror gstjpeg2000parse.c
      * 768771 : openh264: Fail to build with openh264 1.6.0
      * 768838 : camerabinpreview: fix bus leak
      * 768843 : bad: fix leaks in tests
      * 769144 : player: move 'position-update-interval' setting to the config struct
      * 769197 : fix simple-launch-lines test with no jpeg lib
      * 769210 : GLMemory created by avfvideosrc and vtdec on iOS (EAGL/gles3) can't be mapped
      * 769295 : Broken compilation on RPi  with latest rawaudioparse changes
      * 769371 : glimagesink: Horizontal/vertical flip matrizes are swapped
      * 769389 : aiffparse: Add bitrate and container format tags
      * 769462 : glcolorconvert: _get_n_textures: code should not be reached
      * 769553 : dashdemux: Fix sidx snap/keyframe seeks
      * 769587 : hls, timecode: can't build debian package from git master, need to fix linking
      * 769637 : rawparse: Unit test fixes and additions
      * 769716 : x265enc enable aspect ratio
      * 769797 : videoparse: format i420, invalid buffer size (regression)
      * 769939 : gl: hang on joining thread
      * 770030 : avfvideosrc: account for retina displays when capturing screens
      * 770049 : vtdec: missing systemstream=false in mpeg decoder caps
      * 770075 : adaptivedemux: fix stream exposure condition
      * 770102 : daala: typo related compilation error
      * 770282 : decklinkvideosink: " Failed to schedule frame " and Decklink Duo 2
      * 770326 : gst-plugins-bad tarball lacks opensles.h
      * 770408 : dashdemux: Add properties to select maximum allowed width/height and framerate
      * 770523 : Build failure: fatal error: gst/gl/gstglconfig.h: No such file or directory
      * 770587 : qtkitvideosrc: 'QTKit/QTKit.h' file not found (macOS Sierra)
      * 769116 : Build failure with -O3 in Ubuntu 16.04
      * 769580 : Fail to decode media on OSX because it's not supported by vtdec_hw but vtdec can play it

==== Download ====

You can find source releases of gst-plugins-bad in the download
directory: https://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 https://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
      * Arnaud Vrac
      * Bernhard Miller
      * Carlos Rafael Giani
      * Edward Hervey
      * Florian Zwoch
      * Fredrik Fornwall
      * Guillaume Desmottes
      * Haihua Hu
      * Hyunjun Ko
      * Jan Schmidt
      * Josep Torra
      * Luis de Bethencourt
      * Martin Kelly
      * Matej Knopp
      * Matthew Waters
      * Michael Olbrich
      * Nicolas Dufresne
      * Nirbheek Chauhan
      * Philippe Renon
      * Reynaldo H. Verdejo Pinochet
      * Sebastian Dröge
      * Sergei Saveliev
      * Song Bing
      * Sreerenj Balachandran
      * Stefan Sauer
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Vivia Nikolaidou
      * Xabier Rodriguez Calvar
      * xlazom00
 