
Release notes for GStreamer Good Plugins 1.8.3

The GStreamer team is proud to announce the third bugfix release in the stable
1.8 release series of your favourite cross-platform multimedia framework!


This release only contains bugfixes and it is safe to update from 1.8.x. For a
full list of bugfixes see Bugzilla.


See /releases/1.8/ for the full release notes.


"Such ingratitude.  After all the times I've saved your life."


A collection of plugins you'd want to have right next to you on the
battlefield.  Shooting sharp and making no mistakes, these plugins have it
all: good looks, good code, and good licensing.  Documented and dressed up
in tests.  If you're looking for a role model to base your own plugin on,
here it is.


If you find a plot hole or a badly lip-synced line of code in them,
let us know - it is a matter of honour for us to ensure Blondie doesn't look
like he's been walking 100 miles through the desert without water.


This module contains a set of plugins that we consider to have good quality
  code, correct functionality, our preferred license (LGPL for the plugin
  code, LGPL or LGPL-compatible for the supporting library).
We believe distributors can safely ship these plugins.
People writing elements should base their code on these elements.


Other modules containing plugins are:


gst-plugins-base
contains a basic set of well-supported plugins
gst-plugins-ugly
contains a set of well-supported plugins, but might pose problems for
    distributors
gst-plugins-bad
contains a set of less supported plugins that haven't passed the
    rigorous quality testing we expect, or are still missing documentation
    and/or unit tests
gst-libav
contains a set of codecs plugins based on libav (formerly gst-ffmpeg)



  

Bugs fixed in this release
     
      * 767666 : splitmuxsink: infinite change_state loop
      * 747275 : jackaudiosink: hangs when jackd exits
      * 766025 : rtpsession: race condition accessing ssrcs hash table
      * 766970 : aacparse: sticky event criticals with RTL HD mpeg-ts stream
      * 767496 : flvdemux: won't parse a date string with trailing whitespace
      * 767680 : rtph265pay: fix nal type parsing an sps/pps/vps insertion via config-interval property
      * 767980 : udpsrc: Receiving multicast packets from all addresses, not just the configured
      * 768232 : rtspsrc: protocols aren't reset after rtsp redirect
      * 768268 : qtdemux: Push caps only when it was updated
      * 768509 : matroskamux: Segmentation fault in string comparison
      * 768623 : udpsrc: There is no struct in_pktinfo on FreeBSD
      * 769514 : splitmuxsink: Deadlock
      * 769773 : multiudpsink: Randomly ceases to send to clients

==== Download ====

You can find source releases of gst-plugins-good in the download
directory: https://gstreamer.freedesktop.org/src/gst-plugins-good/

The git repository and details how to clone it can be found at
http://cgit.freedesktop.org/gstreamer/gst-plugins-good/

==== 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
    
      * Brad Lackey
      * Jan Schmidt
      * Jonas Holmberg
      * Jürgen Slowack
      * Miguel París Díaz
      * Nicolas Dufresne
      * Reynaldo H. Verdejo Pinochet
      * Sebastian Dröge
      * Seungha Yang
      * Thomas Bluemel
      * Thomas Scheuermann
      * Tim-Philipp Müller
 