
Release notes for GStreamer Bad Plugins 1.3.3


The GStreamer team is pleased to announce the third release of the unstable
1.3 release series. The 1.3 release series is adding new features on top of
the 1.0 and 1.2 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The unstable 1.3 release series
will lead to the stable 1.4 release series in the next weeks, and newly added
API can still change until that point.


This is hopefully the last 1.3 development release and will be followed by
the first 1.4.0 release candidate (1.3.90) in 1-2 weeks. Which then hopefully
is followed by 1.4.0 soonish in early July.


Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.3 release series.



"That an accusation?"


No perfectly groomed moustache or any amount of fine clothing is going to
cover up the truth - these plugins 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 plugins 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 plugins 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 plugins are:


gst-plugins-base
contains a basic set of well-supported plugins
gst-plugins-good
contains a set of well-supported plugins under our preferred license
gst-plugins-ugly
contains a set of well-supported plugins, but might pose problems for
    distributors
gst-libav
contains a set of codecs plugins based on libav (formerly gst-ffmpeg)



  

Bugs fixed in this release
     
      * 731918 : videoaggregator: Add a new base class that aggregates video streams
      * 731921 : gl: Port glmixer to the GstVideoAggregator baseclass
      * 723352 : codecparsers_h264: Framerate estimation enhancement
      * 675132 : tsdemux: implement proper seeking with binary search and keyframe detection
      * 674536 : tsdemux: Freeze on pts-wrap with streaming sources
      * 704507 : glimagesink: Replace pointer properties with signals
      * 705129 : androidmedia: add support for video encoding
      * 709414 : dvbsrc: Uses deprecated field frontend type and add DVB S2/T2 support
      * 721035 : tsdemux: fails to seek on the attached file (regression)
      * 721869 : dvbsrc needs to conditionally build for older dvb headers
      * 722397 : liveadder: handle gap buffer flag
      * 723529 : glimagesink: only draws on buffer push
      * 726193 : waylandsink: subsurface & scaling support, plus many other improvements
      * 726861 : srtp: add support for rollover counter
      * 728364 : mpegts: add service list, stuffing and bouquet name descriptors
      * 728429 : mpegts: add multilingual descriptors
      * 728514 : glimagesink fails with gst-sdk android tutorial-5 / tutorial-4
      * 728890 : GstGLUpload: wrong colors for YUY2 and UYVY on GLES
      * 729054 : schroenc: Does not handle variable framerate streams
      * 729245 : gl: rename platform cocoa to cgl to be more consistent with context type
      * 729257 : glvideomixer: segfault in gst_gl_video_mixer_callback when accessing frame info
      * 729278 : gl: avoid using an extra FBO pass in some basic cases
      * 729750 : gl: GL_FRAMEBUFFER_UNSUPPORTED with GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA
      * 729798 : glvideomixer: Does not support positioning of input streams
      * 729861 : glfilter: lose some caps informations like the framerate
      * 729882 : opusenc: use aux vars to minimize critical region
      * 730141 : motioncells improvements
      * 730231 : gl*: No libGLU with NVIDIA binary drivers
      * 730363 : h264parse: set field_pic_flag when parsing a slice header
      * 730435 : mpegts: add support for ATSC tables MGT / ETT / EIT / STT
      * 730523 : pnmdec: PBM (Bitmap) decoding support is not present
      * 730570 : dvbsrc: fix building with newer kernel headers
      * 730574 : hlsdemux: Saving IV from media sequence number is done out of file- > iv structure
      * 730635 : androidmedia: Add a new QCOM color format
      * 730641 : dvbbasebin: criticals/crash if tsparse is missing
      * 730642 : mpegts: atsc: rename TVCT to VCT as it is the same as CVCT
      * 730666 : gl: YUY2 conversion broken in GLES2
      * 730692 : dvbsrc: Add missing tone ioctl
      * 730703 : gl: Freshly allocated memory is twice the expected size
      * 730782 : glimagesink: cannot create window and stalls
      * 730802 : glimagesink: should honor " show-preroll-frame " property inherited from GstVideoSink
      * 730830 : hlsdemux: Remove \ " sign from decryption KEY url does not always work
      * 730847 : example: ts-parser: add terrestrial delivery system descriptor
      * 730854 : example: ts-parser: add component, content, stream id, ca id, parential rating descriptors
      * 730901 : example: ts-parser: add linkage descriptor
      * 730944 : glvideomixer: Got data flow before stream-start event
      * 731088 : tsdemux: missing audio after seeking in mpeg transport stream (regression)
      * 731107 : glimagesink: Failed to create window surface: EGL_BAD_ALLOC
      * 731164 : hlsdemux: Attempt to reload variant playlist if refreshing playlist or downloading fragments failed
      * 731250 : dvbsrc: tuning/locking logic improvements
      * 731400 : pnmdec: PNMDecoder gives sticky event warning
      * 731522 : codecparsers: add C++ guards for MPEG-4 and VP8 parsers
      * 731524 : codecparsers: h264: fix quantization matrix conversion  routine names
      * 731555 : gst-plugins-bad requires glib > = 2.34.0
      * 731698 : tsdemux : latest patch for accurate seeking of h264 streams has been incorrectly merged.
      * 731707 : tsdemux: remove unused const variables
      * 731714 : gstsrtpenc: add allow-repeat-tx property
      * 731722 : OpenGL: Add an element for transforming video geometry
      * 731768 : gstsrtpenc: unref event when needed
      * 731899 : rawparser doesn't forward custom query
      * 731917 : aggregator: Add a new base class for mixers and muxers
      * 731919 : compositor: Add a new compositor based on the new GstVideoAggregator base class
      * 731968 : hlsdemux: Fix decrypting fragments
      * 641204 : dvbsrc: Faster tuning logic: Use poll instead of artificial usleep

==== Download ====

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

The git repository and details how to clone it can be found at
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/

==== 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é
      * Arnaud Vrac
      * Aurélien Zanelli
      * Chen Jie
      * Christian Fredrik Kalager Schaller
      * Damian Ziobro
      * Edward Hervey
      * George Kiagiadakis
      * Gwenole Beauchesne
      * Jan Schmidt
      * Jorge Zapata
      * Julien Isorce
      * Justin Joy
      * Lubosz Sarnecki
      * Mathieu Duponchelle
      * Matthew Waters
      * Matthieu Bouron
      * Michael Olbrich
      * Miguel París Díaz
      * Nicola Murino
      * Nicolas Dufresne
      * Olivier Crête
      * Reynaldo H. Verdejo Pinochet
      * Sanjay NM
      * Sebastian Dröge
      * Stefan Ringel
      * Thiago Santos
      * Thibault Saunier
      * Thomas Bluemel
      * Tim-Philipp Müller
      * Vincent Penquerc'h
      * Wim Taymans
 