
Release notes for GStreamer Bad Plugins 1.5.90


The GStreamer team is pleased to announce the first release candidate for the
stable 1.6 release series. The 1.6 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 final 1.6.0 release is planned
in the next few days unless any major bugs are found.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately by
the GStreamer project.



"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
     
      * 752745 : glfiltercube: the cube does not look like a cube
      * 745768 : aggregator: Add internal queue
      * 706292 : mpegtsmux: Can't re-use safely after coming back from GST_STATE_NULL again
      * 719553 : rtpasfpay: crash and segment format warnings with asfmux ! rtpasfpay
      * 725167 : opusdec PLC doesn't seem to work as well as Chrome
      * 734060 : videoaggregator: Race when scrub forward seeking in PAUSED leading to no ASYNC_DONE on the bus
      * 743220 : bluetooth modules need to track transport state
      * 744763 : gltransformation: Make all property into universal [0-1] coordinate
      * 745107 : glimagesink: implement GstVideoOverlayCompositionMeta
      * 745206 : glimagesink: crash when using meta:GLTextureUpload method
      * 746387 : srtp: Add support for buffer list in srtpenc
      * 746631 : avsamplebufferlayersink: Uses API that is only OSX > =10.10
      * 747613 : Fixes to HEVC: codecparser, videoparser, codec-utils
      * 748377 : OpenCV face detection does not work with OpenCV newer than 2.4.10
      * 749574 : audioaggregator: Deadlock in gst_object_sync_values()
      * 749734 : gltransformation: black screen (or crash) on Windows
      * 749966 : aggregator: Allow selecting the aggregation output start time and not always start outputting at 0
      * 750310 : GL: allow an application to provide an external backend
      * 751071 : applemedia: CMBlockBuffer can be non-contiguous
      * 751072 : applemedia: enable sharing of CMBlockBuffer data
      * 751101 : glimagesink: Broken on iOS
      * 751104 : make Gtk sinks usable from gst-launch
      * 751165 : gles2: glBufferSubData is called with GL_PIXEL_UNPACK_BUFFER
      * 751170 : dashdemux: the bitstreamSwitching attribute from AdaptationSet is not parsed
      * 751449 : dashdemux: wrong duration computed by gst_mpd_client_setup_representation
      * 751465 : dashdemux: incorrect use of period start
      * 751500 : dashdemux: incorrect use of timeShiftBufferDepth
      * 751528 : mpegdemux: Fix a prevent defect which dereference null return value
      * 751539 : dashdemux: wrong duration validation in gst_mpd_client_get_next_fragment_duration
      * 751641 : vtdec: fix refcount error in error handling
      * 751664 : gstjniutils.c - JNI method IDs not set for android platform causing app to crash during runtime.
      * 751682 : dashdemux: template parsing does not recognize $$$
      * 751716 : dashdemux: %u is not correctly parsed for segment templates
      * 751729 : srtpdec: Add config for the replay window size
      * 751778 : metainfo: some meta has no transform_func in plugins
      * 751821 : amc: fix check whether we managed to acquire a buffer
      * 751823 : glimagesink: possible null pointer dereference
      * 751841 : dashdemux: segment timestamp not correctly computed for SegmentTimeline
      * 751850 : dashdemux: gst_mpd_client_advance_segment should return GST_FLOW_EOS when index is out of range
      * 751879 : pcapparse: Fix parsing of packets with eth padding
      * 751911 : dashdemux: mimeType local variable must be reinitialized at the beginning of loop iteration
      * 751914 : dashdemux: wrong segment duration computed by gst_mpd_client_setup_representation
      * 752027 : dashdemux: tests: improve unit test code coverage
      * 752127 : pngparse: fix caps leak
      * 752185 : new qt5 qml video sink
      * 752413 : dashdemux: add support for parsing UTCTiming elements
      * 752414 : dashdemux: default timescale value should be 1, not 0
      * 752419 : dashdemux: string is used to print a warning message after it was freed
      * 752426 : dashdemux: gst_mpdparser_get_xml_prop_duration does not set default value in case of parsing errors
      * 752431 : mpg123audiodec: fix handling of sample rate change during playback
      * 752441 : gtk: Create a base class to remove code duplication
      * 752442 : gtksink: Display once black frame when caps changes
      * 752620 : dashdemux: segment start time and duration could overflow
      * 752652 : glimagesink: overlay composition resize does not place text correctly
      * 752661 : gl : passing immutable gst structure to gst_structure_id_take_value
      * 752703 : configure: DASH plugin requires libxml2 > = 2.8 now
      * 752743 : gl: add support for egl+x11+swrast on osx
      * 752774 : srtpenc: remove unnecessary rtp/rtcp checks to improve performance
      * 752776 : dashdemux: tests: extend unit tests
      * 752807 : h265parse: Fix sticky event mishandling when stream does not have VPS
      * 752912 : Regression: vaapidecode ! glimagesink broken since GL overlay composition
      * 752937 : glupload: Raw upload is doing an extra copy
      * 752991 : h263parse: fix caps memory leak
      * 753037 : rtpopusdepay: timestamp handling regression
      * 753081 : applemedia/avsample: Cleanup of CA layer is racy and crashes occasionally
      * 753086 : dtsdec: fix taglist leak
      * 753188 : dashdemux: memory leak in gst_dash_demux_stream_update_fragment_info
      * 753241 : camerabin2: Typo (cound't) in translatable string
      * 753243 : rawparse: Fix duplicated format in handle_seek_pull
      * 753262 : rsvgdec: Leaks output state
      * 753306 : h264parse: fix MVC specific data memory leak
      * 753326 : element-template wrong pad in videoencoder
      * 753497 : HEVC videoparser fixes: improve frame start detection
      * 753552 : codecparsers: h265: Fix the parsing of slice header when there is a modification in reference picture lists
      * 753639 : gl: ClearDepth call missing
      * 753651 : opencv: Fedora doesn't find haar cascade files
      * 753661 : dashdemux: Reverse playback doesn't work well
      * 753759 : liveadder: assertion on buffer copy region
      * 751241 : vtdec: handle non-consecutive GstBuffer input without copying
      * 752842 : gloverlaycompositor: Wrong color format
      * 753228 : rtph265: Sync with rtph264 changes

==== 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
    
      * Alex Ashley
      * Anders Jonsson
      * Arun Raghavan
      * Carlos Garnacho
      * Carlos Rafael Giani
      * Edward Hervey
      * Florin Apostol
      * Guillaume Marquebielle
      * Heinrich Fink
      * Hyunjun Ko
      * Ilya Averyanov
      * Ilya Konstantinov
      * Jan Schmidt
      * Jason Litzinger
      * Jimmy Ohn
      * Julien Isorce
      * Lubosz Sarnecki
      * Luis de Bethencourt
      * Martin Kelly
      * Matthew Waters
      * Miguel París Díaz
      * Nick Stoughton
      * Nicolas Dufresne
      * Nirbheek Chauhan
      * Olivier Crête
      * Rico Tzschichholz
      * Roman Donchenko
      * Sangkyu Park
      * Sebastian Dröge
      * Sreerenj Balachandran
      * Stefan Sauer
      * Stian Selnes
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vanessa Chipi
      * Vanessa Chipirrás
      * Vanessa Chipirrás Navalón
      * Vineeth TM
      * Xavier Claessens
      * Young Han Lee
      * vanechipi
 