
Release notes for GStreamer Bad Plugins 1.10.0

The GStreamer team is pleased to announce the first release of the new stable
1.10 release series. The 1.10 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.


Binaries for Android, iOS, Mac OS X and Windows will be provided shortly after
the source release by the GStreamer project during the stable 1.10 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
     
      * 758717 : bayer: pixel aspect ratio not forwarded when transforming caps
      * 762717 : mpegtsmux: m2ts-mode crashes (abort)
      * 769382 : qmlglsink: eglmemory memory leak on rpi
      * 770528 : tsdemux: add support ATSC EAC3
      * 770587 : qtkitvideosrc: 'QTKit/QTKit.h' file not found (macOS Sierra)
      * 772330 : adaptivedemux: Improve bitrate estimation
      * 772499 : opencv: Fix memory leak by gst_caps_to_string
      * 772503 : gsttimidity: add support for timidity-0.2.x
      * 772698 : dispmanx: set_render_rectangle functions is buggy
      * 772699 : dispmanx: dispmanx_egl_show() should call window_resize() only when there is no render rect is set
      * 772704 : hlsdemux: fix GstHLSDemuxStream type inheritance
      * 772706 : adaptivedemux: fix buffer size print format
      * 772742 : mpegtsdemux: Implement efficient program updates
      * 773026 : qmlglsink build fails for rpi
      * 773423 : cerbero: Build fixes on macOS Sierra and Xcode 8
      * 773540 : dtls: port to OpenSSL 1.1.0
      * 773635 : hlsdemux: don't try to access non-existant iframe variant
      * 773720 : directsoundsrc: incorrect cast of WinAPI function argument
      * 772608 : rpi/dispmanx: Implement gst_video_overlay_set_window_handle() for dispmanx window

==== 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
    
      * Arnaud Vrac
      * Artem Martynovich
      * Arun Raghavan
      * Daiki Ueno
      * Edward Hervey
      * Jimmy Ohn
      * Joan Pau Beltran
      * Matthew Waters
      * Michael Olbrich
      * Munez
      * Nirbheek Chauhan
      * Reynaldo H. Verdejo Pinochet
      * Scott D Phillips
      * Sebastian Dröge
      * Sergey Borovkov
      * Thiago Santos
      * Thibault Saunier
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Wonchul Lee
      * sezero
 