
Release notes for GStreamer Good Plugins 1.4.5

The GStreamer team is pleased to announce a bugfix release of the stable
1.4 release series. The 1.4 release series is adding new features on top
of the 1.2 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework that contains new features.
The 1.4.x bugfix releases only contain important bugfixes compared to 1.4.0.


Binaries for Android, iOS, Mac OS X and Windows are provided by the
GStreamer project for this release.


The 1.x series is a stable series targeted at end users. It is not API
or ABI compatible with the 0.10.x series. It can, however, be installed
in parallel with the 0.10.x series and will not affect an existing
0.10.x installation.


The stable 1.4.x release series is API and ABI compatible with 1.0.x and
any other 1.x release series in the future. Compared to 1.0.x it contains
some new features and more intrusive changes that were considered too
risky as a bugfix.



"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
     
      * 711437 : apev2mux: should not put APEv2 tags at beginning of WavPack files
      * 726194 : v4l2src does not cope well when a capture card is sometimes interlaced, sometimes progressive at the same resolution
      * 736397 : flvdemux: Per-stream resyncing behavior causes A/V-desyncs
      * 737603 : v4l2bufferpool: set buffer interlace flags when field is V4L2_FIELD_INTERLACED
      * 739476 : vpx: fails to build against libvpx from git
      * 739722 : matroskamux: Thread safe register GstMatroskamuxPad
      * 739789 : v4l2allocator: fix error message if allocator is already active
      * 739791 : v4l2bufferpool: unref pool when v4l2_allocator_new() fails
      * 739792 : v4l2allocator: fix gst_v4l2_allocator_stop prototype
      * 739996 : videomixer: Drops a lot of frames, if one of the sources is live
      * 740040 : v4l2src: Fails in presence of V4L2_BUF_FLAG_ERROR
      * 740392 : rtspsrc: mikey base64 decoded key-mgmt leak
      * 740407 : qtmux limits capture to 4096x4096
      * 740633 : v4l2src: RW io-mode is broken
      * 740636 : v4l2src: framerate is not always set on driver
      * 740671 : aspectratiocrop: crop needs to be reset when video size changes
      * 740905 : v4l2: still has 1 include to linux/videodev.h
      * 741271 : rtph264pay: Buffer leak in H.264 payloader when using SPS/PPS
      * 741381 : rtph264pay: Race condition may cause crash when going from PAUSED- > READY
      * 741407 : deinterlace: in query_caps return only supported formats if filter is interlaced
      * 737579 : v4l2object: set colorspace for output devices
      * 739754 : v4l2bufferpool: Should validate that all memories are writeable before queueing back

==== Download ====

You can find source releases of gst-plugins-good in the download
directory: http://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 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
    
      * Aleix Conchillo Flaqué
      * Andrei Sarakeev
      * Aurélien Zanelli
      * Göran Jönsson
      * Jan Alexander Steffens (heftig)
      * Matthew Waters
      * Nicolas Dufresne
      * Olivier Crête
      * Patrick Radizi
      * Sebastian Dröge
      * Simon Farnsworth
      * Thibault Saunier
      * Tim-Philipp Müller
      * Wim Taymans
 