
Release notes for GStreamer Good Plugins 1.5.90


The GStreamer team is pleased to announce the first release candidate for the
stable 1.6 release series. The 1.6 release series is adding new features on top of
the 1.0, 1.2 and 1.4 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The final 1.6.0 release is planned
in the next few days unless any major bugs are found.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately by
the GStreamer project.



"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
     
      * 738363 : jitterbuffer: lost-events are broken
      * 738570 : flvdemux: Fix support for seeking flags
      * 738681 : qtdemux: does not detect orientation
      * 739472 : multifilesrc: Lost the ability to start at a different frame by setting index property
      * 739868 : rtpmanager: rtpjitterbuffer fixes and improvements
      * 745089 : qtdemux: gets stuck if file only has a moof and no moov
      * 746445 : rtpaux: Unit test is racy and producing warnings
      * 747728 : vp8enc: multipass-mode=2 is not working
      * 747881 : rtpmp4gdepay does not calculate timestamp for RTP packets with multiple Access Units
      * 747965 : rtppayload: payload type could be inconsistent in some payloader, which have pre-defined pt by RFC standard
      * 749536 : rtspsrc: handle gap in tcp mode
      * 750101 : rtspsrc: send the user-agent header
      * 750106 : splitmuxsink: add a " format-location " signal that allows better control over filenames
      * 751240 : splitmuxsrc: improve sticky events handling
      * 751334 : FLAC: memory leak on a specific media file
      * 751496 : rtspsrc: Add new ntp-time-source property and deprecate use-pipeline-clock property
      * 751774 : rtp: Copy over metas if possible
      * 751780 : avidemux: Fix the return type of index_entry_offset_search
      * 751886 : Add rtph261pay and rtph261depay
      * 751929 : rtpvp8depay: Ignore reserved bit in payload descriptor
      * 751982 : rtph261pay: rtph261depay: Add documentation
      * 751985 : rtph261pay: Fix uninitialized variable compiler error
      * 752012 : rtph263pdepay: Fix initialization of debug category
      * 752053 : goom:  Initialised variables to remove compiler warnings
      * 752073 : Revert " imagefreeze: Remove impossible error condition " 
      * 752100 : rtpklvdepay: fix build error
      * 752112 : rtph263depay: Make sure payload is large enough
      * 752117 : avidemux: fix event leak
      * 752416 : audiofx: fix typos in example pipelines
      * 752421 : matroskademux: SRT subtitles with markup are displayed with a trailing asterisk
      * 752613 : qtdemux: raw 16 bit PCM audio in 'raw ' fourcc not working
      * 752618 : v4l2bufferpool: Set timestamp when queue buffer
      * 752655 : qtdemux: support 'subt' subtype for subtitle tracks
      * 752663 : rtpvp8depay: Check available bytes before copy
      * 752825 : v4l2: Patch to remove limit on framerate
      * 752850 : matroskademux: Does not send user-supplied metadata tags from streamable files
      * 752866 : souphttpsrc: allow empty http proxy string
      * 752992 : matroska: fix minor tag string leak
      * 753008 : dvdemux: Remove unused variable
      * 753009 : rtspsrc: Strip keys from the fmtp that we use internally in our caps
      * 753042 : rtpmp4vdepay: rtpbuffer is being unref'ed twice
      * 753066 : rtpstreamdepay: No Caps set error when activating in pull mode
      * 753240 : souphttpsrc: Typo (occured) in translatable string
      * 753325 : rtpklv(de)pay: add " RTP " in the klass string
      * 753430 : rtph264depay: Not working with caps " byte-stream/nal " 
      * 753450 : audioecho: unused local variable in set_property function
      * 753490 : audioecho: reallocate buffer on changing max_delay
      * 753556 : matroska: Remove unused variables
      * 753670 : directsoundsink: allow specifying audio playback device
      * 753706 : rtp: some (de)payloaders are missing copying metadata.
      * 743758 : osxaudiosrc supports only 44100 sample rate on iOS
      * 679768 : mpegaudioparse, baseparse: fix tag handling

==== 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
    
      * Alex Ashley
      * Arun Raghavan
      * Dimitrios Christidis
      * Dimitrios Katsaros
      * Dustin Spicuzza
      * Edward Hervey
      * Eunhae Choi
      * George Kiagiadakis
      * Gilbok Lee
      * Glen Diener
      * Havard Graff
      * Hyunjun Ko
      * Ilya Konstantinov
      * Jan Alexander Steffens (heftig)
      * Jan Schmidt
      * Jimmy Ohn
      * Luis de Bethencourt
      * Manasa Athreya
      * Miguel París Díaz
      * Nicolas Dufresne
      * Oleksij Rempel
      * Olivier Crête
      * Paul Hyunil
      * Prashant Gotarne
      * Ramiro Polla
      * Ravi Kiran K N
      * Sebastian Dröge
      * Song Bing
      * Stefan Sauer
      * Stian Selnes
      * Thiago Santos
      * Tim-Philipp Müller
      * Tobias Mueller
      * Vineeth T M
      * Vineeth TM
      * Wim Taymans
 