
Release notes for GStreamer Good Plugins 1.10.4

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


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


See /releases/1.10/ 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
     
      * 778341 : rtpjitterbuffer: resetting pts to 0 after gap
      * 775702 : v4l2object: Don't set empty interlace-mode list
      * 776106 : v4l2object: Don't check size in a non-list value
      * 777399 : v4l2allocator: memory referenced too late
      * 777940 : qtdemux: huge memory allocation
      * 778428 : souphttpsrc: Original connection does not cleared if the uri is redirected
      * 778437 : icydemux: reset tags on empty StreamTitle value
      * 778453 : v4l2videodec: Makes singleton caps ref increase on every access
      * 778815 : typo in gstv4l2object's  _acquire_format() set of error messages
      * 775564 : v4l2 1.10 Regression: white pixels with camera on Raspberry Pi & gstgl

==== 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
    
      * Arun Raghavan
      * Jan Schmidt
      * Jean-Christophe Trotin
      * Juan Pablo Ugarte
      * Nicolas Dufresne
      * Reynaldo H. Verdejo Pinochet
      * Sebastian Dröge
      * Seungha Yang
      * Søren Juul
      * Thibault Saunier
      * Tim-Philipp Müller
      * Víctor Manuel Jáquez Leal
 