
Release notes for GStreamer Bad Plug-ins 0.10.5 "Expedition to Lake Pahoe"
        


The GStreamer team is proud to announce a new release
in the 0.10.x stable series of the
GStreamer Bad Plug-ins.


The 0.10.x series is a stable series targeted at end users.
It is not API or ABI compatible with the stable 0.8.x series.
It is, however, parallel installable with the 0.8.x series.



"That an accusation?"


No perfectly groomed moustache or any amount of fine clothing is going to
cover up the truth - these plug-ins are Bad with a capital B.
They look fine on the outside, and might even appear to get the job done, but
at the end of the day they're a black sheep. Without a golden-haired angel
to watch over them, they'll probably land in an unmarked grave at the final
showdown.


Don't bug us about their quality - exercise your Free Software rights,
patch up the offender and send us the patch on the fastest steed you can
steal from the Confederates. Because you see, in this world, there's two
kinds of people, my friend: those with loaded guns and those who dig.
You dig.


This module contains a set of plug-ins that aren't up to par compared to the
rest.  They might be close to being good quality, but they're missing something
- be it a good code review, some documentation, a set of tests, a real live
maintainer, or some actual wide use.  If the blanks are filled in they might be
upgraded to become part of either gst-plugins-good or gst-plugins-ugly,
depending on the other factors.
If the plug-ins break, you can't complain - instead, you can fix the
problem and send us a patch, or bribe someone into fixing them for you.
New contributors can start here for things to work on.


Other modules containing plug-ins are:


gst-plugins-base
contains a basic set of well-supported plug-ins
gst-plugins-good
contains a set of well-supported plug-ins under our preferred license
gst-plugins-ugly
contains a set of well-supported plug-ins, but might pose problems for
    distributors



  

Features of this release
    
      * New plugin - realdec for decoding Real streams using binary libs
      * New plugin - MythTV source
      * New plugin - appsrc (for application data insertion)
      * New plugin - VMnc VMware capture decoder
      * New plugin - JACK audio output
      * New plugin - interleave/deinterleave
      * New plugin - RTP manager
      * New plugin - Bayer to RGB converter
      * New plugin - ReplayGain support
      * New plugin - DirectShow win32 input support
      * New plugin - videosignal/videoanalyse
      * LADSPA plugin improvements
      * IIR equaliser ported to 0.10 (iirequalizer)
      * libsndfile output ported to 0.10
      * mpegvideoparse ported to 0.10 and improved
      * switch element ported to 0.10
      * AMR-WB support fixes
      * MIDI renderer plugin based on timidity
      * Windows and OS/X output plugins moved to the Good module
      * qtdemux, wavpack and videocrop plugins moved to the Good module
      * Many other bug fixes and improvements
      * Parallel installability with 0.8.x series
      * Threadsafe design and API

Bugs fixed in this release
     
      * 152403 : [mpeg/DVB] Integrating externaly developped DVB source el...
      * 333307 : AmrWB Plugin
      * 345633 : [nassink] port to 0.10
      * 354174 : [PATCH] add REAL support by using the proprietary drivers
      * 354451 : [mythtvsrc] Plugin for MythTV source
      * 357055 : Tremor (ivorbis) plug-in is unable to decode vorbis strea...
      * 374773 : [qtdemux] [PLUGIN-MOVE] Move from -bad to good
      * 375264 : [neonhttpsrc] add seek support
      * 376591 : configure.ac looks for wrong symbols for FAAD support
      * 382184 : Port interleave and deinterleave to 0.10 for audio channe...
      * 388050 : [neonhttpsrc] code simplifications
      * 392112 : [rfbsrc] doesn't build with MinGW
      * 393622 : Not building real plugin, only works on 32bit x86 platforms.
      * 395536 : [wavpackenc] Trivial cleanup
      * 395597 : Deinterleave fails to negotiate with alsasrc when using D...
      * 400555 : dts-in-wav: only 2 channel recognised
      * 402470 : [osxvideosink] video sink for MacOSX
      * 412077 : [speed] can't initially set speed > 1
      * 412710 : [replaygain] Add playback elements
      * 413818 : [neonhttpsrc] errors out on redirects
      * 421110 : New x264enc plugin
      * 421598 : [wavpack] Add support for non-8*n depths and don't play a...
      * 423283 : [qtdemux] timestamps of outgoing h264 packets are wrong
      * 423741 : [amrwb] use external shared libamrwb
      * 430594 : Unable to compile gst-plugins-bad CVS
      * 430598 : [realvideodec] dll functions not available on MinGW
      * 430664 : name conflict for " rtpbin " element
      * 437260 : CFLAGS are poinsoned by the OpenGL test
      * 437403 : gst-plugins-bad uses #ifdef G_OS_WIN32 instead of #ifdef ...
      * 437539 : Compilation of DirectDraw and DirectSound plugins using m...
      * 439405 : YUV not working in GL image sink.
      * 439910 : [switch] Warning in a debug function (Mingw)
      * 439911 : [qtdemux] Warning in a debug function (MinGW)
      * 439914 : [directdraw] Warnings when using MinGW
      * 440466 : [PLUGIN-MOVE] osxvideo
      * 440774 : [sdl] sdlvideosink has ill-formatted element details
      * 442689 : [neon] Property-related cleanups of neonhttpsrc
      * 445189 : PLUGIN-MOVE - Move Windows sinks to -good
      * 348973 : New plugins: MVE muxer/demuxer
      * 391971 : Fix build with gcc-2.x
      * 392313 : [directdrawsink] dist and add to gst-plugins-bad
      * 392638 : [directsoundsink] dist and add to gst-plugins-bad
      * 392856 : [qtdemux] plugin must link against zlib (error with MinGW)
      * 403572 : Port equaliser element to 0.10
      * 352605 : [PLUGIN-MOVE] move wavpack to -good
      * 426972 : Specific set of H.264 files cannot be played
      * 434101 : [gsm] doesn't link against libgstbase-0.10

Download

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

GStreamer Homepage

More details can be found on the project's website:
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

Developers

CVS is hosted on cvs.freedesktop.org.
All code is in CVS and can be checked out from there.
Interested developers of the core library, plug-ins, and applications should
subscribe to the gstreamer-devel list. If there is sufficient interest we
will create more lists as necessary.

        
Applications
  
Contributors to this release
    
      * 
      * Ali Sabil
      * Andre Moreira Magalhaes
      * Andy Wingo
      * Chris Lord
      * Christian Schaller
      * David Schleef
      * Edgard Lima
      * Edward Hervey
      * James "Doc" Livingston
      * Jan Schmidt
      * Jens Granseuer
      * Josef Zlomek
      * Julien Moutte
      * Lutz Mueller
      * Michael Smith
      * Michal Benes
      * Mogens Jaeger
      * Nguyen Thai Ngoc Duy
      * Paul Davis
      * René Stadler
      * Rosfran Borges
      * Sebastian Dröge
      * Sébastien Moutte
      * Stanislav Brabec
      * Stefan Kost
      * Thomas Vander Stichele
      * Tim-Philipp Müller
      * Vincent Torri
      * Wim Taymans
      * Wouter Paesen
      * Young-Ho Cha
      * Zaheer Abbas Merali
 
