
Release notes for GStreamer Bad Plugins 1.9.1

The GStreamer team is pleased to announce the first release of the unstable
1.9 release series. 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
     
      * 765266 : gl: More GLES/GL 3 compatibility fixes
      * 767087 : ahcsrc: improve error message when camera open fails
      * 623860 : mpegpsdemux: sends segment and gap events with invalid time after seek
      * 678207 : lv2: port to GStreamer 1.0 and SLV2 to Lilv
      * 704222 : gldownload: Support for multi-planar format for GLES
      * 733233 : chromaprint: notify fingerprint also via property notify
      * 733872 : codecparsers: mpegvideo: Add more fields to the headers.
      * 739598 : rfbsrc: incorrectly calculates caps
      * 746933 : gldisplay: EAGL " Could not create display " 
      * 748651 : DTLS: Use unique names for internal elements to ease debugging
      * 751540 : gltestsrc: implement missing patterns, port to GL3 / ES3, load shaders with GIO
      * 751792 : dashdemux: incorrect segment duration for a segment list
      * 753265 : osxaudio: Add device provider support
      * 754495 : videoaggregator: No protection from receiving interlaced and non-interlaced content
      * 756931 : gstglbasemixer: negotiated logic is partly broken
      * 757022 : pnm: Implementation of GRAY16 handling
      * 758064 : dashdemux: leading whitespaces in content protection element are not ignored
      * 759801 : gltestsrc outputs only black frames for pattern 0 and 11
      * 760916 : gl: implement GstGLMemoryEGL
      * 761260 : qml: add Windows support
      * 762142 : dashdemux: tests: use g_object_unref for test data
      * 762144 : dashdemux: tests: add new dashdemux tests
      * 762147 : adaptivedemux: use GstSystemClock to all real-time calculations
      * 763026 : dc1394: port to 1.X
      * 763044 : Enable  qmlglsink on Rasperry PI
      * 763065 : androidmedia: assorted refactoring
      * 763081 : bad plugins: use new gst_element_class_add_static_pad_template()
      * 763099 : ahcsrc: replace with new surfacetexture
      * 763100 : ahcsrc: remove unused variable
      * 763126 : player: Add is_live flag to the GstPlayerMediaInfo
      * 763309 : ahcsrc: add finalize function
      * 763441 : rfbsrc: leads to - > invalid video buffer received
      * 763647 : mpegtsmux doesn't keep language code from the incoming audio stream
      * 763998 : ahc: use g_slice_new instead of g_slice_new0
      * 764018 : glcontext: try wglCreateContextAttribsARB first even not using GL3 core profile
      * 764036 : interlace: Allow interlaced sink caps, do passthrough
      * 764251 : rtmpsrc: Add timeout property
      * 764361 : gdpdepay: query for buffer allocator
      * 764370 : codecparser: vp9: Wrong default values in non-intraonly/non-keyframe header fields
      * 764549 : aggregator: remove duplicated test of flow_return in pad_chain_internal
      * 764684 : adaptivedemux: Forward upstream buffer offsets
      * 764873 : gldeinterlace: enable this plugin on OpenGL ES using a simple deinterlace fragment shader
      * 764957 : dvbsrc: support dvbv5 channels format
      * 764972 : dvbsrc: needlessly perform delivery system autodetection twice
      * 765250 : d3dvideosink includes deprecated and unused d3dx9tex.h header
      * 765292 : gl:cocoa:Fix incompatible type warning
      * 765315 : player: Add A/V offset property
      * 765425 : dshowsrcwrapper: Fix include path in CMakeLists.txt
      * 765426 : dshowsrcwrapper: Fix link error (SAFESEH)
      * 765427 : dshowsrcwrapper: add support for RGB32, RGB555, RGB565 and RGB8 formats
      * 765428 : dshowsrcwrapper: Work around bugs in IDS Imaging camera drivers
      * 765431 : aggregator: Check all pads for data when live
      * 765581 : pvrbufferpool: gst_meta_register() parameter wrong
      * 765728 : adaptivedemux: Segfault since " use realtime_clock for waiting for a condition " commit
      * 765795 : glimagesink: support video frame rotation
      * 765804 : GstPlayer build error due to not finding GstVideo-1.0.gir
      * 765989 : videodiff element has useless " FIXME " description
      * 766053 : uridownloader: should take ownership of its source element
      * 766062 : player: Provide signalling for when a new URI is started
      * 766163 : Some header files missing in sys/applemedia/ in gst-plugins-bad-1.8.1.tar.xz
      * 766343 : mpegtsbase: remove unused variables 'upstream_live' and 'queried_latency'
      * 766597 : kmssink: doesn't chain up finalize
      * 766607 : player: problems with unit tests
      * 766639 : examples: opencv: typo fix
      * 766650 : adaptivedemux: Set DISCONT on startup and after seeks
      * 766661 : gltestsrc,glmosaic: fix shader leaks
      * 766662 : adaptivedemux: fix tag list leak
      * 766663 : bad: fix leaks in tests
      * 766679 : ahc: fix typo
      * 766703 : glvideomixer: Using an invalid, already destroyed context
      * 766794 : eglimage: Fails to compile because of compiler warning caused by unused function
      * 766803 : h264parse: add support for config-interval=-1 to re-send SPS/PPS on I/IDR frames
      * 766818 : [gl] gltransformation's pivot-z property not writable
      * 766867 : gl: win32: no debug category set in gstglcontext_wgl.c
      * 766891 : h265parse: codec_data cap field could be mis-populated when vps/sps/pps id's are not used contiguously from zero.
      * 766973 : Various warningfixes for OSX (10.9.5) compiling with Apple LLVM version 6.0
      * 766993 : Android decodebin: zero copy between hardware decoder and glimagesink doesn't work (regression in 1.9)
      * 767104 : applemedia: vtenc: Register a hardware-only vtenc_h264_hw element on OSX
      * 767159 : templatematch: fix leak in test
      * 767161 : a2dpsink: unref avdtpsink if state transition failed
      * 767162 : bad: use MAY_BE_LEAKED flag
      * 767365 : adaptivedemux: Add custom flow return for allowing subclasses to specify when a fragment is finished
      * 767402 : OpenJPEG decoder: use new sampling field to determine channel order for j2c and jpc streams
      * 767501 : curlsmtpsink: Lock and don't send final boundary upon error
      * 767512 : jpeg2000parse: support j2c and jp2 file formats
      * 767553 : qmlglsink: Add Wayland support
      * 767800 : Introduce a WebRTC Audio Processing based echo canceller for GStreamer
      * 767908 : jpeg2000parse: use enums for colorspace and sampling, rather than strings
      * 768217 : gl: Raw uploader is broken
      * 768365 : shmsrc: gst_poll_remove_fd: assertion 'fd- > fd > = 0' failed
      * 733265 : srtpenc: remove get-rollover-counter signal and add stats property

==== 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
    
      * Aaron Boxer
      * Aleix Conchillo Flaqué
      * Alessandro Decina
      * Alex Ashley
      * Alex-P. Natsios
      * Arjen Veenhuizen
      * Arun Raghavan
      * Aurélien Zanelli
      * Barun Kumar Singh
      * Carlos Garcia Campos
      * Carlos Rafael Giani
      * Christoffer Stengren
      * Damian Ziobro
      * Dimitrios Katsaros
      * Edward Hervey
      * Florin Apostol
      * Guillaume Desmottes
      * Gwang Yoon Hwang
      * Haihua Hu
      * Havard Graff
      * Heinrich Fink
      * Hyunjun Ko
      * Jan Alexander Steffens (heftig)
      * Jan Schmidt
      * Javier Martinez Canillas
      * Jerome Laheurte
      * Joan Pau Beltran
      * Jonathan Roy
      * Julien Isorce
      * Justin Kim
      * Kouhei Sutou
      * Luis de Bethencourt
      * Marcin Kolny
      * Marcin Lewandowski
      * Martin Kelly
      * Mats Lindestam
      * Matthew Waters
      * Michael Olbrich
      * Nicolas Dufresne
      * Nirbheek Chauhan
      * Olivier Crête
      * Patricia Muscalu
      * Philipp Zabel
      * Philippe Normand
      * Raffaele Rossi
      * Reynaldo H. Verdejo Pinochet
      * Santiago Carot-Nemesio
      * Scott D Phillips
      * Sebastian Dröge
      * Sebastian Rasmussen
      * Sergey Borovkov
      * Song Bing
      * Sreerenj Balachandran
      * Stefan Sauer
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vanessa Chipirras Navalon
      * Vincent Penquerc'h
      * Vineeth TM
      * Vivia Nikolaidou
      * Víctor Manuel Jáquez Leal
      * Wang Xin-yu (王昕宇)
      * Wim Taymans
      * Xavier Claessens
      * Yann Jouanin
 