
Release notes for GStreamer Bad Plug-ins 0.10.14 "Your New Best Friends"
        


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
    
      * Moved rtpmanager to -good
      * Moved dirac elements from schroedinger to gst-plugins-bad (new schroedinger release without the gstreamer elements will follow shortly)
      * amrwb: Remove AMR-WB parser and decoder and rename encoder plugin from amrwb to amrwbenc (the removed elements will re-appear in the next -ugly release; no migration strategy provided in this case because of the 'special' status of the amrwb plugin)
      * asfmux, rtpasfpay: add ASF muxer and windows media payloader
      * basevideo: add experimental video base class library/API
      * camerabin: lots of fixes and improvements
      * capssetter: new element for debugging purposes
      * directdraw: Implement GstNavigation interface
      * directshow: refactor and improve dshowsrcwrapper, dshowideosrc, dshowaudiosrc
      * frei0r: wrapper for frei0r video filter plugins
      * gme: add libgme plugin which supersedes the existing OpenSPC spc plugin
      * Implement SEEKING query in more demuxers and decoders (notably mpeg-ps/mpeg-ts, mxf, musepack, rawparse)
      * kate: add kate subtitle encoder, decoder and overlay
      * mimic: lots of fixes for mimenc and mimdec; add "paused mode"
      * mpegpsdemux: added caps for AAC and fixed playback of a clip with LPCM
      * mpegtsdemux: added VC1, EAC3 and LPCM related to blueray/hdmv
      * qtmux: handle pixel-aspect-ratio; misc. other fixes and improvements
      * shapewipe: support ARGB/RGBA for video input/output; fix for still images
      * vdpau: add experimental vdpau plugin

Bugs fixed in this release
     
      * 587819 : [mpegtsparse] crash because of double free
      * 344129 : [directsoundsrc] Plugin for Directsound source
      * 377784 : xvidenc should output video/mpeg
      * 540128 : Totem freeze with short HDV file
      * 541962 : [directdrawsink] crash when exposing in GST_STATE_READY
      * 561241 : metadatademux pad activation deadlock
      * 561752 : GstRtpBin implement Release pad functions
      * 575672 : [mpegtsdemux] crashes when souphttpsrc is used as a stream source
      * 575818 : [ivorbisdec] extract vorbis tags
      * 576800 : gstreamer SPC plugin requires non-portable x86 code
      * 583470 : mpegtsparse: Old pes pids not removed when receiving PAT table
      * 584252 : enhancements to OSSv4 plugin
      * 584897 : Remove AMR plugin as it has been replaced by updated OpenCore plugin
      * 585839 : Support for sending RTP packets as GstBufferList in the gstrtpbin
      * 586019 : [mxfdemux] stray semicolons after if statement
      * 586097 : GStreamer DVB tuning too quick for some devices
      * 586956 : Include < sys/time.h > only if it is present in the system
      * 587023 : [freeze] disable plugin static lib
      * 587595 : [dshowsrcwrapper] start refactoring
      * 588638 : [katedec] add x-dvd-subpicture output
      * 588944 : mpegpsdemux doesn't support seeking with GST_FORMAT_TIME anymore
      * 590030 : rtpsource: Incoming buffers do not always have caps
      * 590208 : GstNavigation interface support for directdrawsink
      * 590360 : [qtmux] requires endianness even if the samples are 8bit
      * 590446 : [mpegdemux] MPEG TS with A52 not seekable
      * 590797 : Memory leak in rtpsource.c
      * 591440 : rtpdtmfsrc event cleanup
      * 591538 : generic states test fails (vdpau, mimenc)
      * 591610 : asfmux: messing up with sinkpads
      * 591927 : REQUIREMENTS is out of date
      * 592259 : mimenc: fourcc written incorrectly
      * 593024 : regression in schroenc streamheader initialization
      * 593063 : resindvd and rawparse do not use correct base LDFLAGS
      * 593068 : Disarray in directsoundsrc/directdrawsink
      * 586354 : [h264parse] blocked in infinite loop while parsing a corrupted frame

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

GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned 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
    
      * Aleksey Yulin
      * Andoni Morales
      * Arek Korbik
      * Austin Lund
      * Branko Subasic
      * Carl-Anton Ingmarsson
      * Changwoo Ryu
      * Christian Schaller
      * Dave Robillard
      * David Schleef
      * Edward Hervey
      * Garrett D'Amore
      * Iago Toral
      * Jan Schmidt
      * Jan Urbanski
      * Joni Valtanen
      * Josep Torra
      * Julien Isorce
      * Lasse Laukkanen
      * Mark Nauwelaerts
      * Matijs van Zuijlen
      * Maximilian Högner
      * Michael Pyne
      * Miguel Àngel Farré
      * Mikael Magnusson
      * Olivier Crête
      * Руслан Ижбулатов
      * Sebastian Dröge
      * Sebastian Pölsterl
      * Stefan Kost
      * Thiago Santos
      * Tim-Philipp Müller
      * Tommi Myöhänen
      * Vincent Penquerc'h
      * Wim Taymans
      * Zaheer Abbas Merali
      * Zaheer Merali
      * Zeeshan Ali (Khattak)
 