
Release notes for GStreamer Good Plugins 1.8.1

The GStreamer team is proud to announce the first 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.0. 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
     
      * 764733 : qtdemux: Regression in YouTube TV tests in WebKit MSE after fix for #760779
      * 763711 : splitmuxsink: deadlock when one streams doesn't have regular buffers
      * 730540 : rtspsrc: parse crypto sessions to support rollover counters
      * 744612 : splitmuxsink: add property for specifing maximum number of files to store
      * 757569 : rtspsrc: avoid potentially overflowing expression
      * 761345 : rtpjpegpay: Allow different quantization tables for components 2 and 3
      * 762893 : splitmuxsink critical assertion when changing  from null to ready
      * 763780 : flvdemux: don't emit pad-added until caps are ready
      * 763973 : qtdemux: Fix qtdemux memory leak
      * 764169 : vp9dec: Dogslow VP9 4k playback with libvpx, works fine with avdec_vp9
      * 764798 : rtspsrc Critical errors when connecting with TLS / rtsps
      * 764870 : qtdemux: Fix parsing segment duration of empty edit list box
      * 764889 : rtpjitterbuffer: Drops wrong number of packets with drop-on-latency=true
      * 765072 : splitmuxsink: Sometimes creates a small one-frame file after EOS
      * 765116 : scaletempo: memory corruption

==== 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
    
      * Aleix Conchillo Flaqué
      * Damian Ziobro
      * Havard Graff
      * Jan Schmidt
      * Jihae Yi
      * Jimmy Ohn
      * Nicolas Dufresne
      * Paolo Pettinato
      * Sebastian Dröge
      * Seungha Yang
      * Thiago Santos
      * Xavier Claessens
 